为什么我的Java代码不会获取JTextfield的值?

时间:2011-10-23 21:46:20

标签: java swing null jtextfield

我试图从文本字段(由用户输入)中获取值以用于处理。但无论我做什么,它都不会得到输入的值似乎仍然是空的。有人可以告诉我为什么它不会从文本字段中获取值。

这是初始创建名为writeStrings

的文本字段的方法
public void chooseEmpToAdd()
{
     JTextArea EmpDetails = new JTextArea(5,20);
     JTextField writeStrings  = new JTextField(20); 
     JLabel enterIDno = new JLabel("Please enter The Employye ID number that you wish to assign to a department: ");  

     JButton  submit  = new JButton  (" Submit") ;
       ButtonListenerEmp Listener2 = new ButtonListenerEmp(); 
      submit.addActionListener(Listener2);
     JFrame frameAllEmps = new JFrame();
      frameAllEmps.setSize( 150, 140 );
     frameAllEmps.pack();
     frameAllEmps.setVisible(true); 

     //layout
     frameAllEmps.setLayout(new FlowLayout());
      frameAllEmps.add(enterIDno);

    int x = 0;
    System.out.println("ALL Emps from the tree map");
    for(int key:employeeMap.keySet())
    {

        Employee dEmp = employeeMap.get(key);
        System.out.println("Employe no :" +x+": "+dEmp);
        EmpDetails.setText(EmpDetails.getText()+" "+dEmp);
        frameAllEmps.add(EmpDetails);   
         x++;
    }

    frameAllEmps.add(new JScrollPane(EmpDetails));
    frameAllEmps.add(writeStrings);
    frameAllEmps.add(submit);
    frameAllEmps.pack();

}

这是动作监听器,应该从文本框中取值并将其打印到控制台,但它不起作用。

 private class ButtonListenerEmp implements ActionListener
    {
        public void actionPerformed (ActionEvent e )
        {
            String ID ; 
            int dID;


               ID = writeStrings.getText();
                System.out.println("start of try b4 changes: "+ID);     
               }
           }

4 个答案:

答案 0 :(得分:3)

监听器实现不应该有权访问本地变量writeStrings,我甚至不确定如何编译 - 你发布的代码是否准确?

哦,你可能同时拥有一个局部变量writeStrings一个实例变量writeStrings,虽然很难说因为你没有发布其余的码。不要在writeStrings方法中声明chooseEmpToAdd;改为使用类变量。

答案 1 :(得分:2)

因为您将文本字段声明为chooseEmpToAdd方法的局部变量,所以ButtonListenerEmp类不会看到它。要解决此问题,请将文本字段声明为类字段并将其公开或将文本字段的文本作为ButtonListenerEmp构造函数的参数传递。

答案 2 :(得分:2)

变量ID可能尚未初始化(即String ID = "";

此外,writeStrings.getText()行还存在编译错误,因为writeStrings方法之外的变量chooseEmpToAdd()不存在。请尝试在方法之前声明JTextField writeStrings = new JTextField(20);

答案 3 :(得分:0)

从提供的代码中我想到的一件事是,您创建新的JTextField并将其存储在名为writeStrings本地变量中,这可能不是同样你试着从后面读。