JFrames に問題があります。
現在、Frame2を呼び出すボタンを備えたMainFrameの2つのJFrameを実行しています。そして、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
}
}
}
これは、あなたが望むものを達成するのに役立つかもしれません.