Как вернуть объект в предыдущий кадр, который все еще открыт? - PullRequest
0 голосов
/ 01 мая 2019

У меня есть основной фрейм, в котором есть список массивов, содержащий список элементов для заказа.Затем у меня есть кнопка, которая создает новое окно с формой, позволяющей пользователю выбрать несколько вариантов для элемента, затем эта информация помещается в объект.

Я хочу вернуть этот объект обратно в исходныйкадр, чтобы я мог добавить его в список массивов заказов.Однако я не уверен, как это сделать, поскольку мои кадры автоматически генерируют свой код, поскольку я использую netbeans.

1 Ответ

0 голосов
/ 01 мая 2019

Вы должны использовать систему слушателя (интерфейс). Создайте интерфейс и внедрите его в свой основной фрейм, при создании второго фрейма вы передаете первый в качестве параметра. Таким образом, вы сможете вызывать метод, скажем, onItemSelected во втором кадре, когда захотите элегантным способом. Использование интерфейсов более удобно, вы можете иметь несколько слушателей.

Есть пример:

class MyFrame extends JFrame implements ItemSelectedListener {

    void onButtonClick() {
        new SecondFrame(this);
    }

    @Override
    public void onItemSelected(List<String> items) {
        // do your stuff with the selected items here
    }

}

interface ItemSelectedListener {
    void onItemSelected(List<String> items);
}

class SecondFrame extends JFrame {

    private ItemSelectedListener    itemSelectedListener;
    private JTextField              name;
    private JButton                 buttonOk;

    SecondFrame(ItemSelectedListener listener) {
        itemSelectedListener = listener;

        name = new JTextField();
        buttonOk = new JButton("OK");
        getContentPane().add(name);
        getContentPane().add(buttonOk);

        buttonOk.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                List<String> myFormItems = new ArrayList<>();
                // fulfill your list with all informations that you need
                myFormItems.add(name.getText());
                // notify your main frame that the user finished to complete the form
                itemSelectedListener.onItemSelected(myFormItems);
            }
        });
    }

}
...