【发布时间】:2013-12-13 22:19:30
【问题描述】:
我想实现一个 Swing 输入对话框,在组合框中显示不同的选项。我的具体案例是Contact 创建,最终用户可以在现有Contacts 之间进行选择,也可以自己创建一个新的。
所以我有了这个静态方法,它基本上返回一个JOptionPane 的新实例,它具有开箱即用的可用选择对象。请注意,这段代码创建了父对话框,它提供了选择现有联系人或单击按钮来创建新联系人的功能:
/**
*
* @param message
* Here I've got a JPanel which allows the end user to show-hide
* the Contact creation dialog
* @param contacts
* Contact possibilities
* @return reference to the created JOptionPane
*/
public static JOptionPane newContactOptionPane(Object message,
Set<XmlContact> contacts) {
Object[] contactPossibilities = new Object[contacts.size()];
int index = 0;
for (XmlContact contct : contacts) {
contactPossibilities[index] = String.format("%s %s, %s",
contct.get_Surname1(), contct.get_Surname2(),
contct.get_Name());
index++;
}
JOptionPane optPane = new JOptionPane();
JOptionPane.showInputDialog(optPane, message, "Seleccionar Contacto",
JOptionPane.QUESTION_MESSAGE, null, contactPossibilities,
contactPossibilities[0]);
return optPane;
}
调用程序代码类似于:
JOptionPane contactSelectionPane =
ViewUtils.newContactOptionPane(createContactPanel, xmlContacts);
XmlContact selectedContact =
(XmlContact) contactSelectionPane.getValue();
稍后,我想使用JOptionPane#getValue() 方法恢复选定的值。
希望的行为是在点击Cear nuevo contacto时显示用于创建联系人的表单,因此之前的JDialog将被隐藏:
我有两个原因将引用保留在调用程序代码中,第一个是因为我想包装选项窗格以使其返回 XmlContact 对象而不是字符串并且必须再次搜索它在我的调用程序代码中一次又一次地出现可能的选项。另一个是因为我想保留contactSelectionPane 的引用,以便在createContactPanel 中启用按钮来显示/隐藏它。
现在contactSelectionPane.getValue() 显然返回了String,这迫使我再次检查选项。我该如何实现?
【问题讨论】: