0

JDialog からフレームのボタンを無効にしたいのですが、すべてを試しましたが、うまくいきません。プログラムの実行はフレームから開始され、ボタンをクリックするとダイアログがポップアップします。ダイアログのボタンをクリックすると、フレームのボタンが無効になり、ダイアログが閉じます。

ところで:すべてが機能します。無効にならないのはフレームのボタンだけです! これがどのように見えるかです

PS: 私はこれを NetBeans でコーディングしているので、簡単にするために不要なコーディングを削除しました。

フレームのコーディングは次のとおりです。

public class Frame extends javax.swing.JFrame {

Dialog D = new Dialog(this, true);

public Frame(){
    setTitle("Frame");
    initComponents();
    setResizable(false);
}

void buttonDisable(){
    Btn1.setEnabled(false);
}

private void Btn1ActionPerformed(java.awt.event.ActionEvent evt) {                                     
    D.setVisible(true);
}                                    

public static void main(String args[]) {

    java.awt.EventQueue.invokeLater(new Runnable() {
        @Override
        public void run() {
            new Frame().setVisible(true);
        }
    });
}
// Variables declaration - do not modify                     
public javax.swing.JButton Btn1;
// End of variables declaration                   
}

JDialog Box のコーディングは次のとおりです。

public class Dialog extends javax.swing.JDialog {

public Dialog(java.awt.Frame parent, boolean modal) {
    super(parent, modal);
    initComponents();
    setTitle("Dialog");
}                      

private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {                                         
    new Frame().buttonDisable(); 
    dispose();
}                                        



public static void main(String args[]) {

    java.awt.EventQueue.invokeLater(new Runnable() {
        public void run() {
            Dialog dialog = new Dialog(new javax.swing.JFrame(), true);
            dialog.addWindowListener(new java.awt.event.WindowAdapter() {
                @Override
                public void windowClosing(java.awt.event.WindowEvent e) {
                    System.exit(0);
                }
            });
            dialog.setVisible(true);
        }
    });
}
// Variables declaration - do not modify                     
private javax.swing.JButton jButton1;
// End of variables declaration                   
}
4

1 に答える 1

2

私はこれをIDEで実行していません。しかし、実際の親フレームで呼び出すのではなく、 new Frame() で buttonDisable() を呼び出すことが問題であると確信しています。ダイアログに「親」を保存して、後でアクセスしてダイアログでこのようなことを実行できるようにする必要があります。

private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {                                         
    parentFrame.buttonDisable(); 
    dispose();
}    

したがって、完全なコードは次のようになります。

public class Frame extends javax.swing.JFrame {

Dialog d = new Dialog(this, true);

public Frame(){
    setTitle("Frame");
    initComponents();
    setResizable(false);
}

void buttonDisable(){
    Btn1.setEnabled(false);
}

private void Btn1ActionPerformed(java.awt.event.ActionEvent evt) {                                     
    d.setVisible(true);
}                                    

public static void main(String args[]) {

    java.awt.EventQueue.invokeLater(new Runnable() {
        @Override
        public void run() {
            new Frame().setVisible(true);
        }
    });
}
// Variables declaration - do not modify                     
public javax.swing.JButton Btn1;
// End of variables declaration                   
}

ダイアログは次のようになります

public class Dialog extends javax.swing.JDialog {

private Frame parentFrame;
public Dialog(Frame parent, boolean modal) {
    super(parent, modal);
    initComponents();
    setTitle("Dialog");

    this.parentFrame=parent;//hold reference to the parent

    this.setVisible(true);
}                      

private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {                                         
    this.parentFrame.buttonDisable();//invoke method on the parent reference 
    dispose();
}                                        


// Variables declaration - do not modify                     
private javax.swing.JButton jButton1;
// End of variables declaration                   
}
于 2013-04-12T22:11:46.350 に答える