我为模态对话框编写了自己的类,但是当我从代码中调用它时,单击按钮没有任何反应。
如果我定义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);

最佳答案

docs


  注意:更改可见对话框的模式可能不会生效,直到将其隐藏然后再次显示。


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

但是不建议使用setModal,而应调用setModalityType(您需要的类型可能是APPLICATION_MODAL),选中此tutorial
这与JButton侦听器不起作用无关,如果您可以单击JButton,则表示您正在运行其侦听器(如果有),如果无法单击它们(JButton的动画显示它们正在被单击),则它们是隐藏的/不在前面,与并发无关。

10-04 20:06