Как перенести текст из текстового поля в JLable в другом JFrame? - PullRequest
1 голос
/ 03 апреля 2019

Я создаю пользовательский интерфейс для футбольного симулятора, использующего Java, и застрял в какой-то проблеме. Я пытаюсь перенести введенную пользователем команду в другую JLabel на другой JFrame.

Я уже пробовал геттеры и сеттеры, но я не знаю, где и когда их вызывать.

Первый кадр (где 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 во втором кадре, я ожидаю увидеть имя введенной футбольной команды, например, «Арсенал», но фактический результат равен нулю.

1 Ответ

0 голосов
/ 03 апреля 2019

Лучший способ сделать то, что вы хотите (IMO), это иметь статический класс, в котором данные, которыми вы хотите поделиться, являются.

Например, допустим, у меня есть два JFrames в одном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);
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...