0

こんにちは、私はJavaが初めてです。「次へ」の JButton を別のクラスの別のフレーム (DriversLicenseApplicant) にリダイレクトしようとしています。問題は、「次へ」ボタンをクリックすると、プログラムが現在実行している MainInfo であるフレームを開き続けることです。私のコードを手伝ってもらえますか? 皆さん、ありがとうございました。:)

    final JButton btnNext = new JButton("Next");
    btnNext.setBounds(824, 623, 89, 51);
    contentPane.add(btnNext);
        btnNext.addActionListener(
                new ActionListener(){


        public void actionPerformed(ActionEvent e) {
            if (btnNext.isSelected()) {
            DriversLicenseApplicant frame = new DriversLicenseApplicant();
            MainInfo objMain = new MainInfo();
                    frame.setVisible(true);
                        objMain.setVisible(false);



        }
        }
    });
4

1 に答える 1

0

何が起こっている

キーラインはこちら

1  DriversLicenseApplicant frame = new DriversLicenseApplicant();
2  MainInfo objMain = new MainInfo();
3  frame.setVisible(true);
4  objMain.setVisible(false);

このブロックの前に、1 つのフレームがありthisます。(Java では、現在のオブジェクトを として参照しますthis。)thisは開いています。

1 行目で新しいフレームを作成し、frame合計フレーム数を 2 にします。frameが隠されています。

2 行目で、3 番目のフレームを作成しますobjMain。と同じクラスですがthis、別のインスタンスです。(クラスとインスタンスの違いの説明は、StackおよびOracle の Web サイトにあります)。objMain隠されていthisますが、開いています。

3 行目で、 を開きframeます。thisとの両方frameが開いていますが、objMainは非表示になっています。Java のフォーカス ルールthisにより、フォーカスを維持します。

4 行目で、 を非表示にしobjMainます。objMainそもそも開かれていないため、これは効果がありません。まだ 3 つのフレームがあり、両方ともthis開いframethisいて、まだフォーカスがあります。

修正方法

これらの行を

DriversLicenseApplicant frame = new DriversLicenseApplicant();
frame.setVisible(true);
this.setVisible(false);

新しいフレームを開き、現在のフレームに非表示にします。

しかし、根本的な設計上の問題がある可能性があると思います。通常、各プログラムには 1 つのフレームしかありません。2 番目のウィンドウにJDialogを使用することを検討することをお勧めします。両方を同じフレームに保持し、 CardLayoutを使用して切り替えることもできます。また、クラスを変更してJPanelを拡張し、ウィンドウのコンテンツ ペインに配置できるようにします。これにより柔軟性が増し、どの方法を選択しても便利です。

もう一つ

JButton の絶対位置について言及せずにはいられません。レイアウトを使用してください。彼らはあなたの友達です。

于 2013-08-23T12:59:12.817 に答える