我正在使用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);
    }
}

10-06 06:47