0

JFrames に問題があります。

現在、Frame2を呼び出すボタンを備えたMainFrameの2つのJFrameを実行しています。そして、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 に答える