【问题标题】:Java JTextField output from one class to another?Java JTextField 从一个类输出到另一个类?
【发布时间】:2013-05-18 03:07:54
【问题描述】:

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

ps。它所要做的就是在第二类的 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);
          }


       }





    }

【问题讨论】:

    标签: java jtextfield


    【解决方案1】:

    我会做以下事情:

    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())

    【讨论】:

      【解决方案2】:

      原因是field 在你调用它时超出了它的范围。由于它是在 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.
      

      【讨论】:

      • 如果他想在ActionListener 中访问它,他还需要创建field final...
      • 我相信这只是针对匿名内部类,而不是一般的内部类。
      • 已解决,谢谢!你们是最棒的!
      【解决方案3】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-03-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多