将String.getText()String传递给另一个类

时间:2012-04-08 23:25:51

标签: java swing reflection awt jtextfield

我目前正在进行一年级的大学项目,我遇到了一个问题,虽然我怀疑这是一个非常复杂的问题,但我一直在寻找,但我找不到合适的答案。

问题涉及两个类。一个gui类(class1)和另一个类(class2),当我运行代码时,第二个类在尝试从class1中检索class2中的getText()字符串时给了我一个nullpointerexception。

我在class1中有一个JTextField,我试图将.getText()值传递给class2并将其存储在String类型变量中。

我正在尝试实现的当前代码如下(简化):

 public class Class1 {

    private JTextField textField = new JTextField("Something");

      public Class1() {}
    ...
    public String getTextFieldString() {
      return textField.getText();
  }
}

 public class Class2 {

   public Class2(Class1 class1) {
    c1=class1
   }
    private c1 Class1 = new Class1();
    private String s = new String();
    ...
    s = c1.getTextFieldString();
}

我对编码很新,我读过,也许我需要在某处传递一个参数,我认为这是因为textField本身不是静态的,当有人输入新值时它会改变。 (很抱歉在那里说明显而已。)

无论如何,感谢帮助。非常感谢!

3 个答案:

答案 0 :(得分:4)

我可以帮助您查看Java中的prescribed initialization order。特别是,textField实例变量初始值设定项应在有效Class1实例存在时完成。违反此顺序的一种方法是在不同的线程上构造Class1Class2。为排除这种情况,应在event dispatch thread上构建和操作仅 的Swing GUI对象,如下面的sscce所示。

import java.awt.EventQueue;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;

/** @see http://stackoverflow.com/q/10067399/230513 */
public class NewJavaGUI extends JPanel {

    public NewJavaGUI() {
        Class1 class1 = new Class1();
        Class2 class2 = new Class2(class1);
        this.add(class1.textField);
        this.add(new JLabel(class2.s));
    }

    private static class Class1 extends Object {

        private final JTextField textField = new JTextField("Something");

        public Class1() {} // implicit

        public String getTextFieldString() {
            return textField.getText();
        }
    }

    private static class Class2 extends Object {

        private final Class1 c1;
        private final String s;

        public Class2(Class1 class1) {
            c1 = class1;
            s = c1.getTextFieldString();
        }
    }

    private void display() {
        JFrame f = new JFrame("NewJavaGUI");
        f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        f.add(this);
        f.pack();
        f.setLocationRelativeTo(null);
        f.setVisible(true);
    }

    public static void main(String[] args) {
        EventQueue.invokeLater(new Runnable() {

            @Override
            public void run() {
                new NewJavaGUI().display();
            }
        });
    }
}

答案 1 :(得分:3)

好吧,你可以在Class1的构造函数中传递Class2的引用并将其保存在属性中,每次Class2需要文本时,只需调用{{1}属性上的方法。

getText()

现在,当您实例化public class Class2 { private Class1 class1; public Class2(Class1 reference) { class1 = reference; } public void someMethod() { String s = class1.getTextFieldString(); } } 对象时:

Class2

答案 2 :(得分:2)

听起来您有兴趣知道有人在文本字段中修改文本。我的第一条建议是,只要有关于Swing组件的特定问题,就可以查看java教程。具体来说,请查看JTextField tutorial中的addActionListener方法,包括Text Demo示例。