如何将对象返回到仍打开的前一帧?

时间:2019-05-01 20:15:34

标签: java swing netbeans jframe

我有一个主框架,该主框架具有一个数组列表,其中包含一个订单项的列表。然后,我有一个按钮,用于创建一个新窗口,该窗口的窗体允许用户为一个项目选择多个选项,然后将该信息放入对象中。

我想将此对象返回到原始帧,以便可以将其添加到订单数组列表中。但是我不确定该怎么做,因为当我使用netbeans时,框架会自动生成其代码。

1 个答案:

答案 0 :(得分:0)

您应该使用侦听器(接口)系统。创建一个接口并在您的主框架中实现它,当您创建第二个框架时,您将第一个作为参数传递。通过这种方式,只要您愿意,就可以在第二帧中调用方法,例如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);
            }
        });
    }

}