1

Java GUI に問題があります。説明するのは難しいですが、最善を尽くします。私は 2 つの GUI クラスを持っています。1 つはクラス I で、もう 1 つはクラス G です。クラス I はメイン メソッドから開始されます。クラス I には、クラス G のフィールド (インスタンス) があります。その理由は、クラス I が重要な情報を収集し、それをクラス G のインスタンスに渡すためです。クラス I でボタンが押されると、クラス I フレームの可視性が false に設定され、クラス G のインスタンスを true に設定します (G インターフェイスを表示します)。ここでの問題は、I の可視性を true に戻して以前に編集したウィンドウを表示する G のリスナーを作成できるようにしたいということです。すべてのフレームを破棄して新しいインスタンスを作成するという解決策がありましたが、I の新しいクリアされたインスタンスしか表示されません。いくつかのコード スニペットを次に示します。

クラス I:

田畑:

private JFileChooser j;
private FileFilter filter;
private GUI g;  //<--- it is initialized shortly after.
private Font masterFont;
private JFrame frame;
private JButton done;

private JButton browse1;
private JButton browse2;.....

G を表示し、I を非表示に設定します。

class Done implements ActionListener {

    @Override
    public void actionPerformed(ActionEvent e) {

        for (int i = 0; i < 9; i++) {
            System.out.println(array[i]);
        }

        g.setArray(array);
        System.out.println(array);
        setText();
        frame.setVisible(false);
        g.setVisible(true);
        g.setVisible2(false);
        if (g.clear.isSelected()) {
            frame.setVisible(true);
        }


    }

クラス G: スタック オーバーフロー エラーが発生し続けるため、ここでは I のインスタンスを作成できないことに注意してください。

ハード リセット: これは、残りを破棄しながら新しいインスタンスを作成するだけです (I の古いインスタンスが適切に閉じられていないため、無駄になる可能性があります)。

private class Reset implements ActionListener {
    @Override
        public void actionPerformed(ActionEvent arg0) {
            frame.dispose();
            frame2.dispose();

            Runnable runnable = new Runnable() {
                @Override
            public void run() {
                Intro g = new Intro();
                g.setVisible(true);

            }
        };
        EventQueue.invokeLater(runnable);
    }
}

新しいインスタンスを作成せずに、I の「既に実行中の」インスタンスにアクセスできるようにしたいと考えています。

4

3 に答える 3

0

"I" への参照を (コンストラクターまたはセッターを介して) "G" に渡し、それを使用しactionPerformedて可視性を true に設定できます。「I」のインスタンスが 1 つしかない場合は、「G」から参照できる静的参照を作成する別の方法があります。

于 2013-04-07T02:24:29.037 に答える