Java - 将一个 JTextField 变量与另一个类变量链接



我想要实现的目标非常简单。 我有2节课。"SpeedingTicket"和"SpeedingTicket GUI"。 在我的GUI中,我有1个文本框名称txtSpeedLimit和一个按钮。 在我的SpeedingTicket类中,我有一个变量"int speedingTicket"。 在我的 SpeedingTicket 类中,我还有一个用于"speedingTicket"的 get & set 方法。

我知道如何使用JTextFields获取和设置文本,但我希望能够:

接收来自"txtSpeedLimit"的输入,并将该值存储到"SpeedTicket"类中的"txtSpeedLimit"实例变量中。然后,当我添加车速时,我可以检查验证等。

也许这不是处理此程序的最有效方法。也许我应该废弃 SpeedingTicket 中的实例变量,并在 GUI 中处理它们。

任何建议将不胜感激。

基本上我要做的是:

class confirmHandler implements ActionListener{
public void actionPerformed(ActionEvent e){
String val = txtSpeedLimit.getText();
int realNum = speed.getSpeedLimit() = txtSpeedLimit; < but obviously that doesn't work, but I want the textbox link to the variable. 

编辑:如果我们拿走GUI,我希望我的程序做的只是以下内容: 限速:50

输入到文本字段中的值应存储在 SpeedingTicket 类中的两个变量(速度和速度限制)中。

您可以在以下位置更新值:

public class SpeedingTicket {
int speedingTicket;
public SpeedingTicket() {
speedingTicket = 500;
}
public int getSpeedingTicket() {
return speedingTicket;
}
}

由:

public class SpeedingTicketGUI extends JPanel{
SpeedingTicket st;
SpeedingTicketGUI() {
st = new SpeedingTicket();
setLayout(new FlowLayout(FlowLayout.LEFT));
JTextField txtField = new JTextField(10);
txtField.setText(""+st.getSpeedingTicket());
add(txtField);
JButton btn = new JButton("Update");
btn.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
setSpeedingTicket(txtField.getText());
}
});
add(btn);
}
private void setSpeedingTicket(String text) {
try {
int speedTicket = Integer.parseInt(text);
st.setSpeedingTicket(speedTicket);
System.out.println("Speeding ticket set to " +st.getSpeedingTicket());
} catch (NumberFormatException ex) {
System.out.println("Invalid value " +text);
ex.printStackTrace();
}
}
public static void main(String[] args){
JFrame frame = new JFrame("Speeding Ticket");
frame.setSize(400,100);
frame.add(new SpeedingTicketGUI());
frame.setVisible(true);
}
}

你不需要在 JText 或任何 GUI 组件中存储值... 使用全局静态变量。例如:

公共静态speed_limit;

您可以从任何方法,类等访问此变量。

有多种方法可以做到这一点。

您可以使用 DocumentListener 检测文本字段更改,或者如果需要(不推荐)通过 KeyListener 来检测文本字段更改。

侦听器可以直接由您的 gui 类或其他类实现。如果你想要更多的抽象,你可以通过你的gui类实现DocumentListener并创建一个方法

public void addSpeedChangeListener(SpeedChangeListener scl) {
this.speedChangeListeners.add(scl);
}

您的 SpeedChangeListener 可能非常简单:

public interface SpeedChangeListener {
public void speedChanged(int value);
}

然后,您的第二个类实现 SpeedChangeListener 并在您的 gui 类上调用addSpeedChangeListener(this)。 在 gui 类中,文档侦听器为每个注册的侦听器调用speedChanged(val)

编辑您还可以使用 Button 并在ActionListeneractionPerformed方法中的每个侦听器上调用speedChanged

我认为使用单击按钮时会弹出的JOptionDialog会更容易。这样,您可以轻松获取输入并立即验证输入。

最新更新