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

时间:2017-03-05 10:33:57

标签: java swing button label jtextfield

我想要实现的目标非常简单。 我有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)中。

4 个答案:

答案 0 :(得分:0)

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

  

public static int speed_limit;

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

答案 1 :(得分:0)

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

您可以使用DocumentListenerKeyListener想要(不推荐)来检测文本字段更改。

监听器可以由你的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);
    }
}