Java - 在 JPanel 中获取选择的选项而不进行轮询

标签 java swing concurrency future completion-service

我有一个 JPanel,它以与 JOptionPane.showMessageDialog(...) 非常相似的方式实例化另一个 JPanel。但我不使用此选项,因为我想更改大小、消息、按钮位置和更多内容。但最终的实用程序必须相同,一旦选择就返回所选选项。问题是,我不想轮询可能初始化为 null 的属性,直到它从 actionPerformed(...) 方法更改为止。相反,我曾想过以某种方式使用CompletionService,但我不知道如何准确地做到这一点。我该如何定义它?因为我猜必须在 getSelectedOption() 方法中选择 Future,但它必须在 actionPerformed(...) 中生成> 一。如何做到这一点?

最佳答案

最简单的选择是将面板嵌入模态 JDialog 中 setModal(true)

这样你就可以有一个静态方法来初始化你的面板和其他任何东西,调用setVisible(true)(由于对话框是模态的,所以会阻塞)。然后,一旦用户单击“确定”按钮(关闭对话框),您就可以检索所选选项。

public static MyOption showMyDialog() {
    final JDialog myDialog = new JDialog();
    myDialog.add(myPanel);
    myDialog.setModal(true);
    myDialog.setVisible(true); // blocker since the dialog is modal

    return myPanel.getSelectedOption();
}

关于Java - 在 JPanel 中获取选择的选项而不进行轮询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12892613/

相关文章:

java - 将对象的引用传递给 java 中的方法是一种好习惯吗?

java - 加载下一个图像后刷新 JPanel

java - 防止 JTable 单元格编辑器在验证失败时留下 "edit mode"

java - BlockingQueue : What are the differences between SynchronousQueue and LinkedBlockingQueue 的实现

java - 为什么我的线程输出显示相同的消息两次?

java - 使用 Maven 运行 mvn package 找不到目标 'single'

java - 如何禁用 GUI 树查看器中展开箭头的悬停显示?我希望它们始终可见

java - 在 swing/Java 中为自定义 DnD 设置 DragImage

delphi - 线程安全对象的包装器类

google-app-engine - 在 Google App Engine 上部署时,将数据存储在静态字段中是否线程安全?