java - 如何将变量从 jtextfield 传递到另一个 JFrame/类中的另一个 jtextfield?

标签 java swing constructor jtextfield

我的 JTextField 遇到问题。我不知道如何将变量从 JTextField (位于 JFrame A 中)传递到另一个 JTextField (位于 JFrame B 中)。 我尝试这样做,但它没有执行任何操作,即它没有收到任何运行时/编译错误,也没有收到文本。

我尝试在 ClassB 中执行此操作:

ClassA a = new ClassA();
String text = a.jtextfield1.getText();

但是它不起作用!!

你能帮我一个简单的例子吗?我做错了什么?

附注:我正在使用 netbeans

[编辑 --] 这是 ClassA 的代码:

public class ClassA extends javax.swing.JFrame {

public ClassA() {
    initComponents();
}

public void initComponents() {

    jTextField1 = new javax.swing.JTextField();

    setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);

    jTextField1.setText("Some text blah blah");
    jTextField1.addActionListener(new java.awt.event.ActionListener() {
        public void actionPerformed(java.awt.event.ActionEvent evt) {
            jTextField1ActionPerformed(evt);
        }
    });

    javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
    getContentPane().setLayout(layout);
    layout.setHorizontalGroup(
        layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
        .addGroup(layout.createSequentialGroup()
            .addGap(33, 33, 33)
            .addComponent(jTextField1, javax.swing.GroupLayout.PREFERRED_SIZE, 104, javax.swing.GroupLayout.PREFERRED_SIZE)
            .addContainerGap(124, Short.MAX_VALUE))
    );
    layout.setVerticalGroup(
        layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
        .addGroup(layout.createSequentialGroup()
            .addGap(47, 47, 47)
            .addComponent(jTextField1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
            .addContainerGap(86, Short.MAX_VALUE))
    );

    pack();
}

public static void main(String args[]) {

    java.awt.EventQueue.invokeLater(new Runnable() {

        public void run() {
            new ClassA().setVisible(true);
        }
    });
}

public javax.swing.JTextField jTextField1;

}

这是ClassB的代码:

public class ClassB extends javax.swing.JFrame {

public ClassB() {
    initComponents();
}

  public  ClassA a = new ClassA();


public void initComponents() {

    jTextField1 = new javax.swing.JTextField();
    getText = new javax.swing.JButton();

    setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);

    getText.setText("GetText");
    getText.addActionListener(new java.awt.event.ActionListener() {
        public void actionPerformed(java.awt.event.ActionEvent evt) {
            getTextActionPerformed(evt);
        }
    });

    javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
    getContentPane().setLayout(layout);
    layout.setHorizontalGroup(
        layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
        .addGroup(layout.createSequentialGroup()
            .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                .addGroup(layout.createSequentialGroup()
                    .addGap(31, 31, 31)
                    .addComponent(jTextField1, javax.swing.GroupLayout.PREFERRED_SIZE, 114, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addGroup(layout.createSequentialGroup()
                    .addGap(50, 50, 50)
                    .addComponent(getText)))
            .addContainerGap(143, Short.MAX_VALUE))
    );
    layout.setVerticalGroup(
        layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
        .addGroup(layout.createSequentialGroup()
            .addGap(50, 50, 50)
            .addComponent(jTextField1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
            .addGap(26, 26, 26)
            .addComponent(getText)
            .addContainerGap(49, Short.MAX_VALUE))
    );

    pack();
}

public void getTextActionPerformed(java.awt.event.ActionEvent evt) {
    a.jTextField1.getText(); //this doesn't work. How can I it makes work?
}

public static void main(String args[]) {

    java.awt.EventQueue.invokeLater(new Runnable() {

        public void run() {
            new ClassB().setVisible(true);
        }
    });
}

public javax.swing.JButton getText;
public javax.swing.JTextField jTextField1;

}

提前致谢。

最佳答案

如果您实例化一个新的 ClassA 实例(顺便说一句,语法是 new ClassA()),那么您将拥有...一个新实例,其中包含另一个 jtextfield1,而不是现有的 ClassA 实例。您需要将对现有 ClassA 实例的引用传递给 ClassB 实例:

构造ClassB时:

ClassB theClassB = new ClassB(theClassA);

你似乎没有掌握类和对象的基本 OO 概念,甚至没有掌握 Java 的语法。我建议现在不要使用 Swing,先学习基础知识。 Swing 很难,对于不理解这些概念的开发人员来说太难了。

阅读 Java tutorial 的基础知识和 OO 类(class)

关于java - 如何将变量从 jtextfield 传递到另一个 JFrame/类中的另一个 jtextfield?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9199136/

相关文章:

java - android studio 每 X 秒自动刷新线程中的数据 json url

java - 如果用户关闭单独的窗口,为什么我的应用程序会终止?

c++ - 继承:没有合适的默认构造函数可用

java - Poynt 在 JAVA 中从私钥创建 JWT

java - 如何更改 ActionListener 的聚焦 JButton 的默认键绑定(bind)?

Java:将 "this"实例设置为相同类型的对象

java - 调用之间的 Swing 延迟

java - 单击按钮创建新的 JTable?

C++ 调用构造函数来初始化对象会产生错误

perl - 在构造过程中实例化强制属性