0

我在使用 JFrame 时遇到问题。

目前我有 2 个 JFrames 正在运行,MainFrame 带有一个调用 Frame2 的按钮。从带有 JButton 的 Frame2 开始,我想调用当前运行/后台 MainFrame 而无需调用另一个新的 MainFrame。

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

4

2 回答 2

0

如果 Frame2 继承 MainFrame 则执行以下操作:

Frame2.getParent().getBackground();
于 2012-04-26T08:54:50.580 回答
0

此类问题有多种解决方案。这实际上取决于最适合您的用例。

在下面的示例中,我使用一个接口向MainFramefrom发出回调Frame2。我假设后者是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
        }

    }
}

这可以帮助你实现你想要的。

于 2012-04-26T10:48:41.803 回答