繁体   English   中英

如何从另一个面板对象更新JTextField文本

[英]How do I Update JTextField text from another panel object

我有4个面板在一个框架上运行..每个面板在哪里都有自己的类。 每个面板类都有自己的小部件和布局。 我正在尝试从panel1的textField输入更新panel2的textField。

我试过调用panel2.textfield.setText(“需要什么文本”); 在panel1的textfield actionEvent上,当我检查system.out.println()方法时,值的确发生了变化,但除非两个文本字段都在一个构造函数下定义,否则荡荡的UI不会改变,这是我不希望的

这只是一个概念,让您了解我想做什么。

class1 extends JPanel{
JTextField textfield1;
class1(){
 textfield1 = JTextField();
 add(textfield1);
 textfield1.addActionListener((ActionEvent evt)->{
  change(evt);
  system.out.println(textfield1.getText())
});
}
void change(ActionEvent evt){
  new Class2.textfield2.setText("y");
}
}

class2 extends JPanel{
JTextfield textfield2;
class2(){
 texfield2 = new JTextField("x");
 add(textfield2);
}
}

Mainclass extends JFrame{
Mainclass(){
setOnDef....(JFrame.exit_onclose);
 Class1 class1 = new Class1();
 Class2 class2 = new Class2();

add(class1);
add(class2);
pack();
}

public void main(String[]args){
SwingUtilities.invokelater(()->{
 new Mainclass.setVisible(true);
});
}
}

我希望X可以更改为Y。

您的问题在于此行:

new Class2.textfield2.setText("y");

通过调用new Class2()创建的新实例Class2 ,后来改变东西在里面。 框架中Class2的实例保持不变。 为了解决这个问题,您必须获得对框架中对象的引用,例如通过将其传递给构造函数,如下所示:

Class1

Class2 class2;

Class1(Class2 class2) {
  this.class2 = class2;
  // Other constructor stuff
}

void change(...) {
  class2.textfield2.setText("y);
}

Mainclass的构造函数中

Class2 class2 = new Class2();
Class1 class1 = new Class1(class2);

这种方式的change实际上会更改显示的TextField

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM