getText()无法正常工作

时间:2013-12-10 13:56:49

标签: java swing actionlistener

代码在新的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);
    }

}
       }

2 个答案:

答案 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);
    }
}