2

2 つのフレームがあり、frame2 のボタンをクリックして、frame1 のボタンを無効にしたいと考えています。これは可能ですか?プログラムはフレーム 1 から実行を開始し、フレーム 2 を開きます。フレーム1でそのボタンを無効にしたいのは、このフレーム2からですが、機能しません.....どうすればできますか?

追加情報: パネルを操作するときも、このような同様の問題があります。私はそれを理解していません。助けてください!

プログラムが実行を開始するフレーム 1 のコーディングは次のとおりです。

public class Frame1 extends javax.swing.JFrame {

Frame2 frm2 = new Frame2();    

public Frame1() {
    initComponents();        
}    

public void buttonDisable(){
    Btn1.setEnabled(false);
}
private void Btn1ActionPerformed(java.awt.event.ActionEvent evt) {                                     
    frm2.setVisible(true);
}                                    

public static void main(String args[]) {

    java.awt.EventQueue.invokeLater(new Runnable() {
        @Override
        public void run() {
            new Frame1().setVisible(true);
        }
    });
}

public javax.swing.JButton Btn1;

}

そのボタンを無効にしたいframe2のコーディングは次のとおりです。

public class Frame2 extends javax.swing.JFrame {

public Frame2() {
    initComponents();
}                       

private void Btn2ActionPerformed(java.awt.event.ActionEvent evt) {                                     
    Frame1 frm1 = new Frame1();
    frm1.buttonDisable();
}                                    

public static void main(String args[]) {

    java.awt.EventQueue.invokeLater(new Runnable() {
        @Override
        public void run() {
            new Frame2().setVisible(true);
        }
    });
}

public javax.swing.JButton Btn2;

}
4

1 に答える 1

3

それは非常に単純で、あなたの抽象化は問題なく機能します。あなたが望むものを達成するための基本的な方法は次のとおりです。

class FrameTwo extends JFrame {
    private FramOne firstFrame;

    public FrameTwo(FrameOne firstFrame) {
        this.firstFrame = firstFrame;
    };

    public void doSomething() {
        System.out.println(this.firstFrame.someMethod());
    };
};

基本的に、FrameOneクラスのインスタンスをFrameTwoコンストラクターに渡します。これを実現するには、静的メンバーを使用する、両方のフレームを何らかのクラスのインスタンスとして使用する、View抽象化を使用するなど、いくつかのオプションがあります。あなたの質問は単純な OOP です。おそらくそれについてもっと読んでください。

import javax.swing.Frameまた、ファイルの先頭に追加して、class FrameOne extends Frame代わりに入力できることに注意してくださいclass FrameOne extends javax.swing.Frame

最も重要な

同じアプリケーションに複数のフレームを使用することは非常にまれであり、強くお勧めしません。a を使用して要素をネストするビューを作成するとJPanel、同じフレーム内でパネルとダイアログを切り替えることができます。

于 2013-04-05T19:56:37.327 に答える