-1

使い方?

  1. クラスMiWindowsは、クラスMiOtherWindowsの実行を担当します。
  2. MiOtherWindowsクラスは、ステータスを変更して閉じるユーザーと対話します。
  3. クラスMiWindowsは、クラスMiOtherWindowsの値の変更を検出します。
  4. クラスMiWindowsは変更を出力します。

何が問題ですか?MiWIndowsクラスは、子クラスMiOtherWindowsの変更を検出しません。

質問?

スレッドを使用せずに別のウィンドウを聞くことができるウィンドウを作成するにはどうすればよいですか?

// ------------------------------------------------ -------------------

//これがMiWindowsのコードです

public class MiWindows extends JDialog {

    private JButton doing = new JButton("The Button");

    public MiWindows(SeconWindows owner) {

        doing.addActionListener(new ActionListener() {

            public void actionPerformed(ActionEvent e) {
                Object value;
                try {
                    value = new MiOtherWindows(MiWindows.this).getValue();
                    if (value != null) {
                        System.out.println("Never Print this...");
                    }
                } catch (Exception x) {
                    System.out.println("exception");
                }
            }
        });
    }
}

// ------------------------------------------------ -------------------

//ここにMiOtherWindowsのコードがあります

public class MiOtherWindows extends JDialog {

    private JButton close = new JButton("The Button");
    private String value = null;

    public MiOtherWindows(JDialog owner) {
        super(owner);
        //super(owner, true); modal don't work

        close.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                this.value = "This is Result";
                setVisible(false);
            }
        });
    }

    public String getValue() {
        return value;
    }
}
4

1 に答える 1

0

からコンストラクタの定義を変更

public VentanaCrearExamen(JDialog owner)

public VentanaCrearExamen(MiWindows owner)

への参照をに保存MiWindowsMiWindowます。

private MiWindows owner;
.....
public VentanaCrearExamen(MiWindows owner) {
    this.owner = owner;
}

で特別なコールバック メソッドを定義しますMiWindows。たとえば、

public void childActionPerformed(ActionEvent e) {
}

これで、イベントが発生したときに、MiWindowコールバック メソッドを呼び出してMiWindows

   close.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent e) {
            this.value = "This is Result";
            setVisible(false);
            owner.childActionPerformed(e);
        }
    });

他にも多くのソリューションが利用可能です。このヒントがお役に立てば幸いです。おそらく他のアイデアも得られるでしょう。

于 2012-05-21T16:51:38.587 に答える