我有一个JPanel,它以与JOptionPane.showMessageDialog(...)类似的方式实例化另一个JPanel。但是我不使用此选项,因为我想更改大小,消息,按钮位置以及其他一些内容。但是最终的实用程序必须相同,选择后立即返回所选的选项。事实是,我不想轮询可能会被初始化为null的属性,直到将其更改为actionPerformed(...)方法为止。相反,我曾考虑过使用CompletionService,但我无法考虑如何精确地使用它。我该如何定义?因为我猜想Future必须在getSelectedOption()方法中选择,但必须在actionPerformed(...)中生成。这个怎么做?

最佳答案

最简单的选项是将面板嵌入到模式为setModal(true)的JDialog中。

这样,您可以有一个静态方法来初始化面板,然后调用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();
}

10-06 07:29