我想要实现的目标非常简单。 我有2节课。 " SpeedingTicket" &安培; " SpeedingTicket GUI"。 在我的GUI中,我有1个文本框名称txtSpeedLimit&一个按钮。 在我的SpeedingTicket课程中,我有一个变量" int speedingTicket"。 在我的SpeedingTicket课程中,我也有一个获得&设置" speedingTicket"。
的方法我知道如何使用JTextFields获取和设置文本,但我希望能够:
从" txtSpeedLimit"接收输入,并将该值存储到" txtSpeedLimit" " SpeedTicket"中的实例变量类。然后我可以在添加车速时检查验证等。
也许这不是处理这个程序的最有效方式。也许我应该在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&lt;通过文本字段输入 速度:60&lt;通过文本字段输入 如果速度是等等的(我已经编码了这个)..然后将结果输出到我的一个标签。 我在没有制作GUI的情况下实现了这一点,并且只使用基于控制台,但是不是用户通过控制台键入它,而是希望通过文本字段输入。
输入文本字段的值应存储在SpeedingTicket类中的两个变量(speed和speedlimit)中。
答案 0 :(得分:0)
您不需要在JText或任何GUI组件中存储值... 使用全局静态变量。例如:
public static int speed_limit;
您可以从任何方法,类等访问此变量
答案 1 :(得分:0)
有多种方法可以做到这一点。
您可以使用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)
。
修改强>
您还可以使用按钮并在speedChanged
的{{1}}方法内的每个侦听器上调用actionPerformed
。
答案 2 :(得分:0)
我认为使用单击按钮时弹出的JOptionDialog会更容易。这样您就可以轻松获得输入并立即验证输入。
答案 3 :(得分:0)
您可以更新以下值:
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);
}
}