Java 通过JLabel显示和

Java 通过JLabel显示和,java,swing,actionlistener,jlabel,jtextfield,Java,Swing,Actionlistener,Jlabel,Jtextfield,我是java新手,我只想制作一个简单的JFrame,它通过JtextFields输入两个数字,求和,然后通过JLabel返回答案。。。但它并没有完成它应该做的事情,下面是我的代码: import javax.swing.*; import java.awt.*; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.ComponentEvent; import

我是java新手,我只想制作一个简单的JFrame,它通过JtextFields输入两个数字,求和,然后通过JLabel返回答案。。。但它并没有完成它应该做的事情,下面是我的代码:

import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.ComponentEvent;
import java.awt.event.ComponentListener;
import java.util.*;
public class gUi extends JFrame {
    private JLabel lbl;
    private JLabel lbl2;
    private JLabel lbl3;
    private JTextField tb;
    private JTextField tb1;
    private int num1;
    private int num2;
        public gUi(){
        super("Sum Dialog");
        setLayout(new FlowLayout());
        lbl = new JLabel("1st Number:");
        add(lbl);
        tb = new JTextField(15);
        add(tb);
        tb.addActionListener(new ActionListener()
        {
        public void actionPerformed(ActionEvent event){
         num1 = Integer.parseInt(tb.getText());
        }
        });
        lbl2 = new JLabel("2nd Number");
        add(lbl2);
        tb1= new JTextField(15);
        tb1.addActionListener(new ActionListener(){
            public void actionPerformed(ActionEvent event ){
                num2= Integer.parseInt(tb1.getText());
            }
        });

        add(tb1);
        int sum= num1+num2;
        String ssum = Integer.toString(sum);
        lbl3 = new JLabel();
        lbl3.setText(ssum);
        add(lbl3);      
    }
    }

import java.awt.*;
import javax.swing.*;
public class Main {

    public static void main(String[] args) {
        gUi g =new gUi();
        g.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        g.setVisible(true);
        g.setSize(180, 160);


    }

}
它编译得很好,但当我放入一些整数时,并没有通过JLabel显示sum 通过文本字段。。。
我有这个问题已经一个星期了,我尝试了不同的事情,我知道到目前为止,但问题仍然存在

您不应该在文本字段中放置操作侦听器(当然可以,但这里还有其他选项)

你可以在相框中添加一个按钮,可能带有文本“add”。无论何时单击该按钮,您都会获取两个值,并将它们相加;然后把它们推到第三个文本字段

到目前为止,您的代码只计算了一次0+0的和;当调用构造函数时。相反,您必须确保此计算“稍后”发生-当用户要求时


但是作为记录:如果你把相同的动作监听器放在你的文本字段中,那也会起作用。如果该操作侦听器只是获取两个标签,将它们相加,并将总和放入第3个字段。

您已经创建了一个JLabel,并将其初始值设置为0(因为最初num1和num2都是0)。您需要的是刷新JLabel(重新计算并显示当前的sum in action performed方法)

例如

并在textfield 1的侦听器的操作中调用它

tb.addActionListener(new ActionListener()
        {
        public void actionPerformed(ActionEvent event){
         num1 = Integer.parseInt(tb.getText());
            updateSum();

        }
        });
和文本字段2

tb1.addActionListener(new ActionListener(){
            public void actionPerformed(ActionEvent event ){
                num2= Integer.parseInt(tb1.getText());
                updateSum();
            }
        });
查看以下代码(包括注释):


int sum=num1+num2
这段代码将“立即”执行并且只执行一次,
num1
num2
仍然是
0
。必须始终在
actionPerformed
方法以及sum标签的文本中重新计算sum。提示:了解java命名约定。类名大写;总是。避免在你的名字中使用“缩写”,即使是“AddingNumbersFrame”或类似的东西也比“gUI”更能说明问题。非常欢迎你。您可能需要检查我对答案所做的更新。当然,别忘了接受你认为最有帮助的答案。非常感谢GoXR3Plus!你们所有人都很乐于助人。。。我真的很感激。。。这帮了大忙……@Waleed Sagher:)在使用Swing之后,您应该将JavaFX传递给他人。非常感谢先生!在你们的帮助下,我希望我能很快学会。。。。再次感谢!很高兴它有帮助:)。记住,你总是可以对你觉得有用的答案进行投票
tb1.addActionListener(new ActionListener(){
            public void actionPerformed(ActionEvent event ){
                num2= Integer.parseInt(tb1.getText());
                updateSum();
            }
        });
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JTextField;

/**
 * Shows a Stage that has two text Fields
 *
 */
@SuppressWarnings("serial")
public class UserInterface extends JFrame {

    private JLabel label1;
    private JLabel label2;
    private JLabel label3;
    private JTextField textField1;
    private JTextField textField2;

    /**
     * Constructor
     */
    public UserInterface() {
        super("Sum Dialog");

        // Layout
        setLayout(new FlowLayout());

        // 1st JLabel
        label1 = new JLabel("1st Number:");
        add(label1);
        textField1 = new JTextField(15);
        add(textField1);

        // 2 second JLabel
        label2 = new JLabel("2nd Number");
        add(label2);
        textField2 = new JTextField(15);
        add(textField2);

        // 3 third label
        label3 = new JLabel();
        label3.setSize(200, 30);
        add(label3);

        JButton button = new JButton("Calculate");
        button.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent event) {
                // calculate the sum when the Button is pressed
                int sum = Integer.parseInt(textField2.getText()) + Integer.parseInt(textField2.getText());
                label3.setText(Integer.toString(sum));
            }
        });
        add(button);

    }

    /**
     * Main method of the application
     * 
     * @param args
     */
    public static void main(String[] args) {
        UserInterface main = new UserInterface();
        main.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        main.setVisible(true);
        main.setSize(180, 160);

    }

}