2

我希望我的自定义消息类的行为方式与以下代码段中的 JOptionPane 相同:

int reply = JOptionPane.showConfirmDialog(
     null, 
     "Is the weather beautifull?", 
     "Question", 
     JOptionPane.YES_NO_OPTION
);
if (reply == JOptionPane.YES_OPTION) {
    // do something in response to yes...
} else {
    // do something in response to no...
}

所以我真正想要的是,我创建自己的消息对象,显示它并在用户按下按钮时做出反应,伪代码如下:

show my question message;
wait for user button press without blocking UI thread;
do something depending on which button the user pressed;

我尝试了所有方法让我的消息框像JOptionPaneFuturesWait/Notify等,但我总是以阻塞我的 UI 线程而告终。

这样做的秘诀是什么JOptionPane?:)

4

1 回答 1

2

请参阅文档

对话框可以是模态的。当模态对话框可见时,它会阻止用户对程序中所有其他窗口的输入。JOptionPane 创建模态的 JDialogs。要创建非模态对话框,必须直接使用 JDialog 类。

模态窗口

...要求用户在返回操作父应用程序之前与其交互

关于实现,我猜 Swing 会阻止 EDT 并为模式对话框创建另一个线程。

于 2013-11-11T15:59:02.337 回答