我正在使用Java为足球模拟器制作UI,并且一段时间以来一直陷入问题。我正在尝试将用户输入的团队转移到另一个JFrame上的另一个JLabel。
我已经尝试过getter和setter方法,但是我不知道何时调用它们。
第一帧(jtextfield在其中):
String userinput1 = Home.getText();
System.out.println(userinput1);
String userinput2 = Away.getText();
第二帧(jlabel Home在哪里):
JLabel Home = new JLabel("");
Home.setBounds(333, 33, 46, 14);
frame.getContentPane().add(Home);
frame.setBounds(100, 100, 450, 300);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
当我在第二帧中打印
userinput1
时,我希望看到输入的橄榄球队的名称,例如“阿森纳”,但实际输出为null。 最佳答案
进行所需操作(IMO)的最佳方法是拥有一个静态类,该类要共享数据。
例如,假设我有两个JFrame,在一个JFrame中,我要求某人提供他们的电话号码,但是在第二个JFrame中,我要显示该电话号码。我会有类似的东西:
public class UserData{
private static String _phoneNumber = "";
private static ArrayList<Runnable> listeners = new ArrayList<Runnable>();
public static void listenForUpdate(Runnable run){
listeners.add(run);
}
private static void update(){
for(Runnable r: listeners){
r.run();
}
}
public static void setPhoneNumber(String phoneNumber){
_phoneNumber = phoneNumber;
update();
}
public static String getPhoneNumber(){
return _phoneNumber;
}
}
public class InputFrame extends JFrame{
// ... other code here
... onInput(String phoneNumber){
UserData.setPhoneNumber(phoneNumber);
}
}
public class DisplayFrame extends JFrame{
public DisplayFrame(){
super();
JLabel label = new JLabel("default");
add(label);
UserData.listenForUpdate(new Runnable(){
public void run(){
label.setText(UserData.getPhoneNumber());
}
});
setVisible(true);
}
}