我有两个不同的班级,创建了两个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);
}
答案 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
的实例,并将其传递给所需的内容,以便告诉您需要更新的内容。
你应该抵制让B
或A
直接对彼此进行修改的诱惑,因为这会给他们带来很大的潜在风险,并且会紧密地结合你的代码,最好使用{{{} 3}}某种
根据您的示例,B
需要监控A
中的某些状态更改,因此B
需要"监听器"到A
并根据A
宣布的更改