手动触发 JPanel 中 JOptionPane 的 OK_OPTION

问题描述 投票:0回答:1

我有一些实用程序代码,在

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
动作和关闭信号?

java swing jpanel joptionpane
1个回答
0
投票

您应该修改您的

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();
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.