从活动运行或后台JFrame调用JFrame而不调用新的JFrame

时间:2012-04-25 21:01:21

标签: java swing jframe

我遇到了JFrame问题。

目前我正在运行2个JFrame, 带有按钮的MainFrame可以调用Frame2。 从带有JButton的Frame2,我想调用当前运行/后台的MainFrame而不调用另一个新的MainFrame。

实际上我在Frame2上进行搜索功能,当点击按钮搜索时,想在主框架中显示结果。

2 个答案:

答案 0 :(得分:0)

如果Frame2继承了MainFrame,那么执行以下操作:

Frame2.getParent().getBackground();

答案 1 :(得分:0)

针对此类问题有很多解决方案。这真的取决于最适合您的用例。

在下面的示例中,我使用界面从MainFrameFrame2发出回调。我假设后者是MainFrame的成员。这种解决方案使您可以轻松地在Frame2的多个实现中使用相同的MainFrame实现(对多个帧进行常见搜索)。

请注意,下面的代码只是用于演示正在使用的模式的框架代码。

public class Frame2 extends JFrame {

    private final Controller controller;
    private JButton button;

    public Frame2(Controller controller) {
        this.controller = controller;
        button = new JButton("Search");
        button.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                // do search and create result object
                Object results = new Object();
                Frame2.this.controller.displaySearchResults(results);
            }
        });
    }

    public interface Controller {
        // users implement this
        public void displaySearchResults(Object results);
    }
}
public class MainFrame extends JFrame {

    private Frame2 search;
    private JButton button;

    public MainFrame() {
        search = new Frame2(new ControllerImplementation());
        button = new JButton("Show search");
        button.addActionListener(new ShowSearch());
    }

    private class ShowSearch implements ActionListener {
        public void actionPerformed(ActionEvent e) {
            search.setVisible(true);
        }
    }

    private class ControllerImplementation implements Frame2.Controller {
        public void displaySearchResults(Object results) {
            // display results by accessing members of MainFrame
        }

    }
}

这可以帮助您实现自己想要的目标。