从另一个类更改jTextField

时间:2015-05-06 02:10:44

标签: java swing class jtextfield

我有两个不同的班级,创建了两个Panel的A& A; B.按钮单击A后启动B. 当在A上单击按钮时,我想更改B中的jTextField。

A代码

private final B myB = new B();

public static void main(String args[])
    {
        /* Create and display the form */
        java.awt.EventQueue.invokeLater(new Runnable()
        {
            public void run()
            {
                new A().setVisible(true);
            }
        });
    }

启动B

private void btnIPCStartActionPerformed(java.awt.event.ActionEvent evt) 
    {                                            
        // TODO add your handling code here:
        launch.B.main(null);
    }

B

中jTextField的更改
private void btnBattRemoveActionPerformed(java.awt.event.ActionEvent evt)                                              
    {      
        **// Calling Via Variable**                                                  
        myB.txtSystemOutput.setText("Low Battery"); // **NOT Working**

        **// Calling Via Setter**
        myB.setTextSystemOutput("Low Battery"); // **NOT Working**

        **// Calling Via Direct Variable**
        project.B.txtSystemOutput.setText("Low Battery"); // **NOT Working**
    }

B代码

public static void main(String args[])
    {
        /* Create and display the form */
        java.awt.EventQueue.invokeLater(new Runnable()
        {
            @Override
            public void run()
            {
                new B().setVisible(true);
            }
        });
    }

public void setTextSystemOutput(String value)
    {
        txtSystemOutput.setText(value);
    }

2 个答案:

答案 0 :(得分:3)

您不希望通过调用其静态main方法来创建B,因为它将B可视化实例与A对象隔离,因此这是不必要且有害的。而是在A中创建一个B实例,在非静态世界中创建它,这样,A可以根据需要在B上调用实例变量。

所以改变方法:

private void btnIPCStartActionPerformed(java.awt.event.ActionEvent evt) {                                            
   myB.setVisible(true);
}

答案 1 :(得分:3)

不要使用launch.B.main(null);,创建一个B的实例,并将其传递给所需的内容,以便告诉您需要更新的内容。

你应该抵制让BA直接对彼此进行修改的诱惑,因为这会给他们带来很大的潜在风险,并且会紧密地结合你的代码,最好使用{{{} 3}}某种

根据您的示例,B需要监控A中的某些状态更改,因此B需要"监听器"到A并根据A宣布的更改

更新状态