我在使用 JFrame 时遇到问题。
目前我有 2 个 JFrames 正在运行,MainFrame 带有一个调用 Frame2 的按钮。从带有 JButton 的 Frame2 开始,我想调用当前运行/后台 MainFrame 而无需调用另一个新的 MainFrame。
实际上我在 Frame2 上做了一个搜索功能,当点击按钮搜索时,想在主框架中显示结果。
如果 Frame2 继承 MainFrame 则执行以下操作:
Frame2.getParent().getBackground();
此类问题有多种解决方案。这实际上取决于最适合您的用例。
在下面的示例中,我使用一个接口向MainFrame
from发出回调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
}
}
}
这可以帮助你实现你想要的。