代码在新的jframe中打印输入数字,但我无法在input
的变量getText()
处存储任何内容。 Plz告诉我我做错了什么。
我的代码: -
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
public class MainFrame extends JFrame implements ActionListener
{
static boolean a=false;
public MainFrame()
{
setTitle("Square's Root Finder");
setSize(350,100);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setLookAndFeel();
setLayout(new FlowLayout());
JButton but1 = new JButton("Calculate");
JLabel label1= new JLabel("Enter the number:", JLabel.RIGHT);
JTextField t = new JTextField(20);
if (a==true)
{
String input = t.getText();
System.out.print(input);
JLabel label2=new JLabel(input);
add(label2);
}
add(but1);
add(label1);
add(t);
but1.addActionListener(this);
}
public static void main(String[] args)
{
new MainFrame().setVisible(true);
}
public void actionPerformed(ActionEvent arg0)
{
String cmd = arg0.getActionCommand();
if(cmd.equals("Calculate"))
{
a=true;
new MainFrame().setVisible(true);
}
}
}
答案 0 :(得分:3)
每次按MainFrame
时,您都会创建一个新的but1
,因此每次打印前都会清空t
...
new MainFrame().setVisible(true); //calls MainFrame() while creating new object instance
...
JTextField t = new JTextField(20); //creates an empty text field
...
if (a==true)
{
String input = t.getText(); //t has just been created so it is empty
System.out.print(input); //t is empty so input is empty
...
}
答案 1 :(得分:1)
你无法从t得到任何东西,因为一旦你初始化它,你就会得到它的文本值(在构造函数中)。 textField是空的,这是合乎逻辑的。尝试从表单构造中分离“计算”所做的代码,并将其直接放在动作监听器中:
public void actionPerformed(ActionEvent arg0)
{
String cmd = arg0.getActionCommand();
if(cmd.equals("Calculate"))
{
String input = t.getText();
System.out.print(input);
label2.setText(input);
}
}