在JTextField - Java中保持变量是最新的

时间:2017-06-28 13:13:46

标签: java swing events event-handling

所以我对java很新,我想尝试使用按钮的GUI计算器。当用户按下按钮时,我希望它将他们按下的数字添加到第一个数字,所以它的工作方式如下: GUI Example

我遇到的问题是,当事件处理程序将数字添加到总数时,JTextField不会更新。我的代码如下:

    package App;

    import javax.swing.*;
    import java.awt.*;
    import java.awt.event.*;


    public class gui_calc extends JFrame
    {
        private Button button0;
        private Button button1;
        private Button button2;
        private Button button3;
        private Button button4;
        private Button button5;
        private Button button6;
        private Button button7;
        private Button button8;
        private Button button9;
        private Button buttonNull;
        private Button go;
        private String  num1_sum = "0";
        private String num2_sum = "0";
        private JTextField sum;


        public gui_calc()
        {

            super("Title");

            Label label1 = new Label("Enter First Number");

            JPanel numPad1 = new JPanel();
            button0 = new Button("0");
            button1 = new Button("1");
            button2 = new Button("2");
            button3 = new Button("3");
            button4 = new Button("4");
            button5 = new Button("5");
            button6 = new Button("6");
            button7 = new Button("7");
            button8 = new Button("8");
            button9 = new Button("9");
            buttonNull = new Button("-");
            go = new Button("Next");
            numPad1.setLayout(new GridLayout(4,3));
            numPad1.add(button1);
            numPad1.add(button2);
            numPad1.add(button3);
            numPad1.add(button4);
            numPad1.add(button5);
            numPad1.add(button6);
            numPad1.add(button7);
            numPad1.add(button8);
            numPad1.add(button9);
            numPad1.add(buttonNull);
            numPad1.add(button0);
            numPad1.add(go);


            eventHandler handler = new eventHandler();
            button1.addActionListener(handler);

            add(numPad1);
    // Where the number total is displayed
            sum = new JTextField(num1_sum);
            sum.setColumns(10);
            add(sum);




        }



        private class eventHandler implements ActionListener
        {
            public void actionPerformed(ActionEvent e)
            {
                System.out.println("Event");

                if (e.getSource()==button0)
                {
                    num1_sum = num1_sum + "0";
                }

                else if (e.getSource()==button1)
                {
                    num1_sum = num1_sum + "1";
// Creating the total and then printing to console so I know everything works as I // want it to
                    System.out.println(num1_sum);
                }

                else if (e.getSource()==button2)
                {
                    num1_sum = num1_sum + "2";

                }

                else if (e.getSource()==button3)
                {
                    num1_sum = num1_sum + "3";
                }

                else if (e.getSource()==button4)
                {
                    num1_sum = num1_sum + "4";
                }

            }
        }
    }

我正在使用字符串作为数字,因为很明显,如果用户用整数按下1和4,那么在添加它时我会得到5。我在进行计算时要解析整数。

用户按下一个后,应用程序将转到第二个JPanel,在那里他们以相同的方式输入第二个数字,然后我希望在再次按下next后显示结果。

我没有进入这个阶段但是因为在测试中我发现JTextField在按下按钮时没有更新但是当我将数字1按钮混合时控制台输出01,011,0111等我已经现在只在按钮1上有一个监听器,因为我想在完成其余工作之前让一个按钮工作。

我知道这段代码可能非常糟糕,而且可以很容易地做到更加连贯,但我仍然是java的新手。谢谢你的帮助

1 个答案:

答案 0 :(得分:1)

只启用了一个按钮事件,您只能看到一个按钮的结果。它看起来像是接近工作的代码,但你需要处理前导零,所以如果你按一个数字并且当前的num1_sum为“0”,只需将num1_sum设置为新值。

然后将jtextfields setText方法调用为sum.setText(num1_sum);