我有一些实用程序代码,在
JList
内呈现 JPanel
,并在 JOptionPane.showOptionDialog
内使用,类似于:
SelectionPanel<T> panel = new SelectionPanel<>(allValues, initiallySelectedElement, multipleSelection);
int action = JOptionPane.showOptionDialog(parent, panel, title, JOptionPane.OK_CANCEL_OPTION, JOptionPane.PLAIN_MESSAGE, null, null, null);
if (action == JOptionPane.OK_OPTION) {
// Do stuff
}
这效果很好,但我有一个功能请求,希望能够双击列表来添加单击的元素。该面板不知道被包裹在
JOptionPane
中,理想情况下我希望保持这种状态。
我发现我可以使用以下代码关闭对话框:
@Override
public void mouseClicked(MouseEvent e) {
if (e.getClickCount() == 2 && !e.isControlDown()) {
Window w = SwingUtilities.getWindowAncestor(this);
w.setVisible(false);
}
}
然而,这会关闭它,而不会
action == JOptionPane.OK_OPTION
成为 true
。
是否有任何通用方法可以从不知道自己处于
OK_OPTION
内部的 JPanel
发出 JOptionPane
动作和关闭信号?
您应该修改您的
mouseClicked
方法,如下所示:
@Override
public void mouseClicked(MouseEvent e) {
if (e.getClickCount() == 2 && !e.isControlDown()) {
JOptionPane pane = (JOptionPane) SwingUtilities.getAncestorOfClass(JOptionPane.class, e.getComponent());
pane.setValue(JOptionPane.OK_OPTION);
Window w = SwingUtilities.getWindowAncestor(this);
w.dispose();
}
}