Используйте JFrame в качестве пользовательского поля ввода - PullRequest
0 голосов
/ 21 сентября 2019

Я работаю над приложением на основе Java-свинга, где у меня есть два JFrames: A, которое является основным окном, и B, которое вызывается на A.

Чтомне нужно сделать, чтобы в A вызвать B, получить пользовательский ввод от B и как-то передать этот ввод A, чтобы затем обработать его

Все, что я пробовалне удалось, и, насколько мне известно, Java не поддерживает async/await

Это моя лучшая попытка

    public void getInfoFromB()
    {
        FormB b = new FormB();

        while(b.isReady() == false){
            a.setVisible(false);
        }

        a.setVisible(true);
        ArrayList<String> b.getData();

        //...
    }

Обратите внимание, что оба объекта a и b расширяются JFrame, FormB isReady - это метод, который возвращает погоду, когда пользователь заполнил все необходимые данные, а метод getData возвращает указанные данные.

Эта попытка, похоже, не работает, поскольку после ввода кодацикл while, все остальное просто зависает, поскольку java, похоже, борется с параллельными действиями

Ответы [ 2 ]

2 голосов
/ 21 сентября 2019

Вы просто используете JOptionPane для запроса ввода.

Основной кадр будет ожидать закрытия панели параметров, чтобы получить текст, введенный пользователем.

Прочитать раздел из учебника по Swing на Получение ввода от пользователяДиалог для получения дополнительной информации и примеров.

0 голосов
/ 21 сентября 2019

Как предполагает @TT., Можно передать A в B по ссылке (очевидно, все объекты передаются по ссылке, поэтому нет необходимости использовать указатели).Оттуда я мог манипулировать данными как из A, так и из B

Класс A

public void getDataFromB(ArrayList<String> data)
{
    this.dataFromB = data;
}

public void startFormB()
{
    this.setVisible(false);
    B formB = new B(this);
}

Класс B

//constructor
public B(formA a)
{
    this.mainForm = a;

    //...
}


public void setDataToAAndExit()
{
    this.mainForm.getDataFromB(this.dataToA);
    //re-show main window
    this.mainForm.setVisible(true);
    //close this window
    this.dispatchEvent(new WindowEvent(this, WindowEvent.WINDOW_CLOSING));
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...