Java - 在没有轮询的情况下在JPanel中获取所选选项

时间:2012-10-15 09:20:07

标签: java swing concurrency future completion-service

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

2 个答案:

答案 0 :(得分:1)

最简单的选择是将您的面板嵌入到模态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();
}

答案 1 :(得分:0)

您可以编写JOptionPane的子类并进行所需的布局,并仍然使用return方法。