从另一个 class 更改 jTextField
Change jTextField from another class
我有两个不同的 类,它们创建了两个面板的 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);
}
您不想通过调用其静态 main 方法来创建 B,因为这是不必要且有害的,因为它将 B 可视化实例与 A 对象隔离开来。而是在A中创建一个B实例,在非静态世界中创建它,这样A就可以根据需要调用B上的实例变量。
因此将方法更改为:
private void btnIPCStartActionPerformed(java.awt.event.ActionEvent evt) {
myB.setVisible(true);
}
不要使用 launch.B.main(null);
,创建 B
的实例并将其传递给它所需的引用,以便告诉您需要更新的内容。
您应该抵制让 B
或 A
直接相互修改的诱惑,因为这会使它们面临很多潜在风险并与您的代码紧密耦合,最好使用Observer Pattern 某种
根据您的示例,B
需要监视 A
中的一些状态变化,因此 B
需要 "listener" 到 A
并更新它的状态基于 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);
}
您不想通过调用其静态 main 方法来创建 B,因为这是不必要且有害的,因为它将 B 可视化实例与 A 对象隔离开来。而是在A中创建一个B实例,在非静态世界中创建它,这样A就可以根据需要调用B上的实例变量。
因此将方法更改为:
private void btnIPCStartActionPerformed(java.awt.event.ActionEvent evt) {
myB.setVisible(true);
}
不要使用 launch.B.main(null);
,创建 B
的实例并将其传递给它所需的引用,以便告诉您需要更新的内容。
您应该抵制让 B
或 A
直接相互修改的诱惑,因为这会使它们面临很多潜在风险并与您的代码紧密耦合,最好使用Observer Pattern 某种
根据您的示例,B
需要监视 A
中的一些状态变化,因此 B
需要 "listener" 到 A
并更新它的状态基于 A
宣布