[英]get value jtextfield from another class to actionperformed method
我有兩個班級,一個是秋千班和主班,一個是動作執行方法
//class swing
package system;
import javax.swing.*;
import java.awt.event.*;
public class GUI{
JFrame frame = new JFRame("frame");
JTextField tx = new JTextField(10);
JButton bt = new JButton("button");
public void getTx(){
return tx.getText();
}
public void init(){
frame.setSize(200, 200);
frame.add(tx);
frame.add(bt);
tx.setBounds(20, 20, 140, 50);
bt.setBounds(20, 100, 120, 40);
btaddcom.addActionListener(new ActionListener(){
@Override
public void actionPerformed(ActionEvent e){
control.btclicked(e);
}
});
}
public GUI(){
init();
}
public static void main(String[] args) {
java.awt.EventQueue.invokeLater(new Runnable(){
public void run() {
new GUI().frame.setVisible(true);
}
});
}
}
下面是我的另一堂課
package system;
import java.awt;
import java.awt.event.*;
public abstract control implements ActionListener{
public static void btclicked(ActionEvent e){
GUI gui = new GUI();
String txf = gui.getTx();
JOptionPane.showMessageDialog(null, txf);
}
}
我的問題是為什么我無法從JTextField獲取值tx,因為每當我填充文本時它總是空白的。 謝謝
您正在創建GUI類的新實例,因此所有字段都將為空/重置。
這是你應該做的:
public abstract control implements ActionListener{
public static void btclicked(ActionEvent e, GUI gui){
String txf = gui.getTx();
JOptionPane.showMessageDialog(null, txf);
}
}
用法:
btaddcom.addActionListener(new ActionListener(){
@Override
public void actionPerformed(ActionEvent e){
control.btclicked(e, GUI.this);
}
});
您正在創建一個新的實例GUI
。 這與屏幕上顯示的內容無關,因此您嘗試對其進行的任何更新都不會反映在屏幕上...
相反,您應該傳遞某種模型(首選)或GUI
或JTextField
的引用。
更像是......
public abstract control implements ActionListener{
public static void btclicked(ActionEvent e, GUI gui){
String txf = gui.getTx();
JOptionPane.showMessageDialog(null, txf);
}
}
例如。
就個人而言,我更喜歡提供某種模型,因為它可以防止向調用者公開其他內容,因為您的btclicked
方法現在可以完全控制您的GUI
類,您可能不希望這樣做
如果我正確地閱讀了這些評論,似乎這已經解決了。 但為了以防萬一,還有一個基本的語法錯誤。 你的getTx()方法返回一個字符串但你把它列為void。 我確定這是馬上被抓住了但是我認為為了以防萬一而指出它並沒有什么壞處。 干杯。
public String getTx(){
return tx.getText();
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.