【问题标题】:JFrame-JDialog comunicationJFrame-JDialog通信
【发布时间】:2015-06-30 21:41:02
【问题描述】:

我有一个 JFrame 主窗口,其中有一个注册按钮。单击注册按钮,JDialog 窗口会弹出。

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

JDialog窗口有2个按钮->Register,Cancel。它们都必须做一些事情并关闭Dialog窗口。

这是我尝试过的。 在 Reg(Dialog 窗口)---> btnCancel:

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

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

【问题讨论】:

  • 你是什么意思,当从主窗口执行时 - 它应该由用户操作执行。而 FWIW,ActionListener 可能更适合处理 JButton 事件。
  • jframe有一个按钮,点击按钮打开jdialog
  • public void mouseClicked(MouseEvent e) { 不要在按钮上添加鼠标监听器!添加一个动作监听器,按钮将响应鼠标和键盘输入。

标签: java swing


【解决方案1】:

您需要一些方法让框架确定对话框的关闭方式

// 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

看看:

...更多详情

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-05-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多