我遇到了JFrame问题。
目前我正在运行2个JFrame, 带有按钮的MainFrame可以调用Frame2。 从带有JButton的Frame2,我想调用当前运行/后台的MainFrame而不调用另一个新的MainFrame。
实际上我在Frame2上进行搜索功能,当点击按钮搜索时,想在主框架中显示结果。
答案 0 :(得分:0)
如果Frame2继承了MainFrame,那么执行以下操作:
Frame2.getParent().getBackground();
答案 1 :(得分:0)
针对此类问题有很多解决方案。这真的取决于最适合您的用例。
在下面的示例中,我使用界面从MainFrame
向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
}
}
}
这可以帮助您实现自己想要的目标。