ActionListeners在模态JDialog中不起作用

时间:2017-06-13 09:16:15

标签: java swing actionlistener jdialog

我为模态对话框编写了自己的类,但是当我从代码中调用它时,按钮点击没有任何反应。 如果我定义setModal(false)一切都很好。 我认为并发存在一些问题,但我不确定。 我的错误在哪里?

public class PauseTaskDialog extends JDialog {

private JPanel contentPane;
private JButton buttonOK;
private JButton buttonCancel;
private JCheckBox prioritisingCheckBox;
private JCheckBox simultaneousWorkCheckBox;
private JCheckBox problemsWithDataCheckBox;
private JTextArea comment;

private String taskID;

public PauseTaskDialog(String task) {

    this.setContentPane(contentPane);
    this.setModal(true);
    this.setLocationRelativeTo(null);
    this.pack();

    this.setTitle("Task pause reasons");

    this.taskID = task;

    comment.setFont(comment.getFont().deriveFont(14f));
    comment.setLineWrap(true);
    comment.setWrapStyleWord(true);

    buttonOK.addActionListener(e -> {
        onOK();
    });

    buttonCancel.addActionListener(e -> {
        onCancel();
    });

    this.setVisible(true);
}


private void onOK() {
    // some code here        
}

private void onCancel() {
    // some code there
}
}

我以这种方式从我的代码中调用对话框:

PauseTaskDialog dialog = new PauseTaskDialog(taskID);

1 个答案:

答案 0 :(得分:1)

来自docs

  

注意:更改可见对话框的模态可能无效,直到它被隐藏然后再次显示。

尝试在setModal(true)之前调用setVisible

但我们已弃用setModal,您应该拨打setModalityType(您需要的类型可能是APPLICATION_MODAL),请查看tutorial。 它与JButton监听器无法正常工作无关,如果你可以点击JButton然后它意味着你正在运行他们的监听器(如果有的话),如果你不能点击它们(JButton有动画显示它们被点击)然后它们隐藏在/不在前面,它与并发性无关。