-1

这个怎么运作?

  1. MiWindows 类负责运行 MiOtherWindows 类。
  2. MiOtherWindows 类与更改其状态并关闭的用户进行交互。
  3. MiWindows 类检测 MiOtherWindows 类中值的变化。
  4. Class 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 回答