0

这是一个非常简单的程序,我需要帮助。我试图显示在 actionlistener 内部的 JTextField 中输入的输入,但是当我编译程序时,我收到一条错误消息,指出“错误:找不到符号”指向这一行 --String input = field.getText();- - 在第二节课。我猜是因为它无法识别第一类的 JTextField 名称,但我如何让第二类识别它?请帮助我尝试自学,是的,我是菜鸟,对不起,谢谢。

附言。它所要做的就是在第二类的 system.out.println 中显示输入。

    import java.awt.* ;
    import java.awt.event.* ;
    import java.sql.* ;
    import java.util.* ;
    import javax.swing.* ;
    import javax.swing.border.* ;
    import javax.swing.event.* ;
    import javax.swing.table.* ;

    class Test
    {
        public static void main(String[] args)
       {

         Test gui = new Test() ;

       }

        public Test()
       {
       JPanel panel1 = new JPanel(new BorderLayout(10,10));  
       JTextField field = new JTextField(22);
       field.addActionListener(new FieldInputAction()) ;     

       panel1.add(field ,BorderLayout.NORTH);

       JFrame f = new JFrame();
       f.setTitle("TEST") ;
       f.setDefaultCloseOperation(f.EXIT_ON_CLOSE);  
       f.setSize(1000, 700) ;
       f.setVisible(true) ;  
       f.setContentPane(panel1) ;

       }

       class FieldInputAction implements ActionListener
       {

          public void actionPerformed(ActionEvent e)
          {  
             String input = field.getText();
             System.out.println(input);
          }


       }





    }
4

3 回答 3

0

我会做以下事情:

class Test
{

    private JTextField field; //declare interface components as private
    private JPanel panel1; 
    private JFrame f;
    private String input; //this is the input variable


    public static void main(String[] args)
   {

     Test gui = new Test() ;

   }

    public Test()
   {
   panel1 = new JPanel(new BorderLayout(10,10));  
   field = new JTextField(22);
   field.addActionListener(new FieldInputAction()) ;     

   panel1.add(field ,BorderLayout.NORTH);

   f = new JFrame();
   f.setTitle("TEST") ;
   f.setDefaultCloseOperation(f.EXIT_ON_CLOSE);  
   f.setSize(1000, 700) ;
   f.setVisible(true) ;  
   f.setContentPane(panel1) ;

   }

   class FieldInputAction implements ActionListener
   {

      public void actionPerformed(ActionEvent e)
      {  
             input = field.getText(); 
//if this doesn't work encapsulate the fields. and use the method getfield() with getText()

             System.out.println(input);
          }


   }

}

编辑:如果您想在另一个类中使用输入变量,只需封装该字段并使用:system.out.println(""+Text.getInput())

于 2013-05-22T22:22:00.777 回答
0

JTextField 被声明为私有的。重写类 Test ,使其实现自己的 ActionListener ,然后将 actionPerformed 移动到类 Test 中,您的对象将在类 Test 范围内可见。

于 2013-05-22T22:10:47.067 回答
0

原因是field当你调用它时它超出了范围。由于它是在 for 的花括号(即“块”)内声明的Test(),因此只能在Test().

解决这个问题的最简单方法就是创建field一个实例变量。所以:

class Test
{
    private JTextField field; //Add this line

    public static void main(String[] args)
    {
    //etc.
    field = new JTextField(22); //Note that we no longer declare it, only initialize it.
    //etc.
于 2013-05-22T22:11:47.640 回答