簡體   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