我遇到JFrame問題。從主動運行或後臺JFrame調用JFrame而不調用新JFrame
目前我有2個JFrames運行, MainFrame帶有一個按鈕來調用Frame2。 從Frame2與JButton,我想調用當前運行/背景MainFrame而不調用另一個新的MainFrame。
其實我在Frame2上做搜索功能,當點擊按鈕搜索時,要在主框架中顯示結果。
我遇到JFrame問題。從主動運行或後臺JFrame調用JFrame而不調用新JFrame
目前我有2個JFrames運行, MainFrame帶有一個按鈕來調用Frame2。 從Frame2與JButton,我想調用當前運行/背景MainFrame而不調用另一個新的MainFrame。
其實我在Frame2上做搜索功能,當點擊按鈕搜索時,要在主框架中顯示結果。
如果式2繼承了大型機然後做到這一點:
Frame2.getParent().getBackground();
有這樣的問題,多種解決方案。這真的取決於什麼最適合你的用例。
在下面的示例中,我使用接口從Frame2
向MainFrame
發出回調。我認爲後者是MainFrame
的成員。這種解決方案使您可以輕鬆地在MainFrame
(對多個幀的常見搜索)的多個實現中使用相同的Frame2
實現。
請注意,下面的代碼只是演示正在使用的模式的骨架代碼。
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-29 07:00:51
@Boon DerMaster很高興聽到這個消息。如果此答案回答了您的問題,則應將其標記爲已回答。 – predi 2012-04-30 08:02:12