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

在JTextField-Java中保持变量的最新,java,swing,events,event-handling,Java,Swing,Events,Event Handling,因此,我对java非常陌生,我正在尝试使用按钮创建一个GUI计算器。当用户按下按钮时,我希望它将他们按下的数字添加到第一个数字上,这样它的工作原理如下: 我遇到的问题是,当事件处理程序将数字添加到总数时,JTextField不会更新。我的代码如下: package App; import javax.swing.*; import java.awt.*; import java.awt.event.*; public class gui_calc

因此,我对java非常陌生,我正在尝试使用按钮创建一个GUI计算器。当用户按下按钮时,我希望它将他们按下的数字添加到第一个数字上,这样它的工作原理如下:

我遇到的问题是,当事件处理程序将数字添加到总数时,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。当我进行计算时,我将解析它们

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

然而,我还没有到这个阶段,因为在测试中,我发现当按下按钮时,JTextField不会更新,但当我将数字1按钮捣碎时,控制台会输出01、011、0111等。我现在只在按钮1上设置了一个侦听器,因为我想先让一个按钮工作,然后再执行其他操作


我知道这段代码可能很糟糕,而且可以很容易地更连贯地完成,但我对java还是很陌生。感谢您的帮助

仅启用了一个按钮事件,您将只看到一个按钮的结果。看起来代码as接近正常工作,但您需要处理前导零,因此如果您按下一个数字,当前num1_sum为“0”,只需将num1_sum设置为新值


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

num1\u sum+“0”
是字符串串联,而不是数字加法,这就是为什么你会看到例如
011
而不是
2
@berger我知道,这就是它的本意。我的问题是,当事件侦听器更改值时,我无法找到如何更新JTextfield。计算器使用按钮首先通过字符串连接创建用户想要的数字,然后我将其解析为Int来进行计算,但我一直在研究如何让JTextField更新或某种替代方法。我只看到一个按钮的结果,但之后它会在JTextField中显示num1_和值它已由事件侦听器更新。我在控制台中看到011,因为我在那里输出它,但我无法找到在值更改后如何生成JTextField生成JTextField?或者设置jtextfield的文本?在jtextfield中设置文本是的。在应用程序开始时,它在JTextField中显示0,因为这是默认设置的。但我希望每次事件侦听器向字符串添加一个数字时它都保持最新。因此,用户按下1三次,Jtextfield显示0111。我似乎找不到如何在每次num_sum1更改时保持JTextField最新。顺便说一句,我之所以使用jtextfield,是因为它在应用程序中看起来比标签更好,答案是:sum.setText(num1_sum);太棒了,谢谢。我误解了你的回答,对setText一无所知。现在工作。再次感谢