【问题标题】:How can I pass variables from a jtextfield to another one in another JFrame/class?如何将变量从 jtextfield 传递到另一个 JFrame/类中的另一个?
【发布时间】:2012-02-08 18:19:08
【问题描述】:

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

我尝试在 ClassB 中这样做:

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

但它不起作用!

你能帮我吗,可以举个简单的例子吗?我做错什么了?

ps:我正在使用 netbeans

[edit --] 那是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 a = new ClassA; 不行!也许ClassA a = new ClassA();
  • 是的,对不起,我写错了 "ClassA()" 但是,当我说它不起作用时,我会说程序没有显示任何内容,它没有捕捉到文本,它不会产生任何运行时/编译错误。
  • 升级了代码。请帮帮我!

标签: java swing constructor jtextfield


【解决方案1】:

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

ClassB 构造时:

ClassB theClassB = new ClassB(theClassA);

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

阅读Java tutorial的基础知识和OO课程

【讨论】:

  • 是的,我做到了,可惜没用!它说:“ClassB 中的构造函数 ClassB 不能应用于给定类型;必需:未找到参数:ClassA”
  • 您没有提供任何有意义的代码,我们得到的另一个诊断是“它不起作用”。我们不是特别清醒。给你的问题更多的实质内容。 SSCCE 会很有用。当然,您必须在 B 类中有一个构造函数,该构造函数以 ClassA 为参数。阅读基础教程。使用 Swing 真的为时过早。
  • 好吧,我刚刚添加了代码。请帮我!这对我很重要!
  • 您没有按照我在回答中的建议进行操作。如果您不了解 OO 编程的基础知识,您将无法做任何事情。阅读教程,和/或阅读入门书籍。
【解决方案2】:

你要一个简单的例子,你会得到一个。我让你自己决定如何在你的代码上匹配这个例子,这应该不会太难。

public class PanelWithTextField extends JPanel{
  private JTextField textField = new JTextField();
  public JTextField getTextField(){ return textField; };
}

public static void main( String[] args ){
  EventQueue.invokeLater(){ new Runnable(){
    public void run(){
      //create a first panel
      PanelWithTextField panel = new PanelWithTextField();
      panel.getTextField().setText( "Some text" );
      //create a second panel
      PanelWithTextField anotherPanel = new PanelWithTextField();
      //copy the text from the first panel's textfield to the second panel's textfield
      anotherPanel.getTextField().setText( panel.getTextField().getText() );
    }
  }
}

我希望我没有在其中写太多错字,因为我没有尝试运行它,也没有使用我的 IDE 编写此代码。

基本上,您需要在第二个面板中(或在您访问该文本字段的代码的任何部分)中引用您的第一个面板。

正如其他人已经建议的那样。在开始使用 Swing 和 UI 之前,您应该先确保了解基本的 OO 概念和基本的 Java 语法

【讨论】:

  • 感谢您的回答,但只有一个类它有效。问题是当我在两个不同的文件中有两个不同的类时(请参阅我刚刚用代码编辑的主要帖子)如果您能帮助我使用上述代码,我将非常感激。不过真的很感谢
  • 同一个类的两个实例,或者不同类的两个实例有什么区别。它们应该相互引用,然后它们可以调用另一个实例的方法。基本的面向对象的东西,就像之前说的那样
  • 是的,但正如我在代码中所写,您可以看到我已经实例化了该对象,但它仍然无法工作(它不显示任何内容)-
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-01-03
  • 2020-04-14
  • 1970-01-01
  • 2013-02-08
相关资源
最近更新 更多