有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

带有文本字段的java GUI,用于使用Swing进行输入

实际上我是一个初学者,所以我试着用Swing创建GUI,用户在两个字段中填写两个输入数字,所以有一个新的文本字段,我想在其中添加两个输入值

我想将两个文本字段的整数相加,并将两个值相加,并显示在另一个文本字段中。如何将JTextField整数值提取到另一个JTextField

import java.io.*;
 import java.awt.*;
 import java.awt.event.*;
import javax.swing.*;
public class GUI
{
public JFrame f;
    public JPanel p;
    public JLabel l1,l2;
    public JButton b1;
    public JButton b2;
    public JTextField t1;
    public JTextField t2;
    public JTextField t3;
    public GUI()
        {
            f=new JFrame("hello world application");
            p=new JPanel(true);
            l1=new JLabel("enter first number");
            t1=new JTextField(30);
            l2=new JLabel("\n enter the second number");
            t2=new JTextField(30);
            t3=new JTextField(30);
            b1=new JButton("check here");
            b2=new JButton("clear all");
            //b1.addActionCommand1("checking....");
            //b2.addActionCommand2("clearing all input's ....");

        }
    public void launch()
        {
            f.setSize(400,500);
            p.add(l1);
            p.add(t1);
            p.add(l2);
            p.add(t2);
            p.add(t3);
            p.add(b1);
            p.add(b2);
            f.pack();
            f.add(p);

            //l.setFont(Times Roman);
            f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            p.setSize(400,500);
            p.setForeground(Color.red);
            p.setBackground(Color.green);
            f.setLayout(new BorderLayout());
            b1.addActionListener(new Button1handler(t1,t2,t3));
            b2.addActionListener(new Button2handler());
            f.setVisible(true);


        }
    public static void main(String a[])
        {
            javax.swing.SwingUtilities.invokeLater(new Runnable()
                {
                    public void run()
                        {
                            GUI br=new GUI();
                            br.launch();

                        }
                });
        }
}

 class Button1handler implements ActionListener 
{

              private JTextField t1;
     private JTextField t2;
     private JTextField t3;
             public Button1handler(JTextField t1, JTextField t2, JTextField t3) 
                   {
                   this.t1 = t1;
                   this.t2 = t2;
                   this.t3 = t3;
    }
      public void actionPerformed(ActionEvent e)
        {
    System.out.println("action occurred for checking");
    String firstnumber=t1.getText();
    String secondnumber=t2.getText();
    int num1=Integer.parseInt(firstnumber);
    int num2=Integer.parseInt(secondnumber);
    int sum=num1+num2;
            String str=Integer.toString(sum);
            String sum2=t3.setText(str);
   JOptionPane.showMessageDialog( null, "The sum is " + sum,"Sum of Two Integers", JOptionPane.PLAIN_MESSAGE );



        }
}
class Button2handler implements ActionListener
{
    public void actionPerformed(ActionEvent r)
        {
            System.out.println("clearing all");

        }
}           

在这段编辑过的代码中,我可以在消息对话框中检索和值。问题是我可以在第三个JtextField中获得特定的字符串。这一行显示错误: //错误:不兼容的类型 字符串sum2=t3。setText(str); 必需:字符串 发现:空虚 1错误:(


共 (1) 个答案

  1. # 1 楼答案

    如果没有运行代码,你会遇到问题

    t3.setText(total);
    

    因为JTextField没有setText(int)方法。相反,您需要将该值转换为String

    您可以使用Integer.toString(total),但例如,使用NumberFormat.getNumberInstance().format(total))可能会获得更好的结果

    t3.setText(NumberFormat.getNumberInstance().format(total));
    

    更新

    你的“另一个”问题是Button1handler扩展了GUI,这让我一直在绕圈子

    class Button1handler extends GUI implements ActionListener {
    

    这意味着,当它访问t1t2字段时,它得到的是空值,因为这些字段与屏幕上的字段不同

    如果ActionListener位于外部文件/类中,则需要为该类提供上下文,例如

    class Button1handler implements ActionListener {
    
        private JTextField f1;
        private JTextField f2;
        private JTextField f3;
    
        public Button1handler(JTextField f1, JTextField f2, JTextField f3) {
            this.f1 = f1;
            this.f2 = f2;
            this.f3 = f3;
        }
    
        public void actionPerformed(ActionEvent e) {
            int firstnumber = Integer.parseInt(f1.getText());
            int secondnumber = Integer.parseInt(f2.getText());
            int total = firstnumber + secondnumber;
            f3.setText(NumberFormat.getNumberInstance().format(total));
        }
    }
    

    然后你需要创建一个动作处理程序的新实例,比如

    b1.addActionListener(new Button1handler(t1, t2, t3));
    

    这为操作处理程序提供了对用户在屏幕上操作的实际字段的引用

    您可能对Nested Classes感兴趣,它为您提供了egt的一些额外特性(必须传递引用),但在进入它之前,您应该非常熟悉对象的上下文;)