gpt4 book ai didi

java - 具有使用 Swing 输入的文本字段的 GUI

转载 作者:行者123 更新时间:2023-12-02 05:44:15 24 4
gpt4 key购买 nike

实际上我是一个初学者,所以我尝试自己使用 Swing 创建 GUI,其中用户在两个相应的字段中填写两个输入数字,因此有一个新的文本字段,我想在其中添加 2 个输入的值。

我想添加 2 个文本字段的整数,并将这两个值相加并显示在另一个文本字段中。如何将 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 个错误:(

最佳答案

如果不运行代码,就会出现问题......

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 感兴趣它为您提供了一些额外的功能来满足此要求(必须传递引用),但在移动到对象之前,您应该对对象的上下文非常敏感;)

关于java - 具有使用 Swing 输入的文本字段的 GUI,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24236274/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com