繁体   English   中英

JFrame-JDialog通信

[英]JFrame-JDialog comunication

我有一个JFrame主窗口,其中有一个Register按钮。单击register按钮,将弹出JDialog窗口。

public void mouseClicked(MouseEvent e) {
                Reg new1=new Reg(users);
                new1.setVisible(true);
            }

JDialog窗口有2个按钮-> Register,Cancel。这两个按钮都必须执行某些操作并关闭Dialog窗口。

这就是我尝试过的。 在Reg(对话视窗)---> btnCancel中:

public void mouseClicked(MouseEvent e) {
                        dialog.dispose();
                        System.out.println("Reg disposed by cancel button");
                    }

这仅在运行D窗口时关闭D窗口,但是我想从主窗口执行(单击按钮)时,它仍然像主框架“类”中的对象一样存在并且不会关闭。我该怎么办?怎么办我把它关闭吗?

您需要框架的某种方式来确定对话框的关闭方式

// Why are you using a `MouseListener` on buttons??
// User use keyboards to, use an ActionListener instead
public void mouseClicked(MouseEvent e) {
    Reg new1=new Reg(users);
    new1.setVisible(true);
    switch (new1.getDisposeState()) {
        case Reg.OK:
            // Clicked Ok
            break;
        case Reg.CANCEL:
            // Clicked cancel or was closed by press [x]
            break;
    }
}

然后在您的Reg类中,您需要维护有关状态的信息...

public class Reg extends JDialog {
    public static final int OK = 0;
    public static final int CANCEL = 1;

    private int disposeState = CANCEL;

    //...

    public int getDisposeState() {
        return disposeState
    }

    public void setDisposeState(int state) {
        disposeState = state;
    }

然后你改变状态

// Why are you using a `MouseListener` on buttons??
// User use keyboards to, use an ActionListener instead
public void mouseClicked(MouseEvent e) {
    setDisposeState(CANCEL);
    dialog.dispose();
    System.out.println("Reg disposed by cancel button");
}

所有这些都假定您的对话当然是模态的...

现在,就我个人而言,我将使您的Reg类成为JPanel并将其添加到JOptionPane或使用CardLayout

看一眼:

...更多细节

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM