Экспериментируя, я совершенно случайно наткнулся на ответ (он не задокументирован в документах ...)
Шаг первый - пройти по дереву, чтобы найти объект JOptionPane.Это в слушателе MouseEvent, который ищет двойной щелчок:
Component c = (Component)OpenBookPanel.this;
while ((c != null) && (!(c instanceof JOptionPane))) {
c = c.getParent();
}
Если c
не null
, то вы нашли JOptionPane.Так что вы можете затем разыграть его правильно.
Теперь волшебный бит.JOptionPane
имеет метод setValue
:
public void setValue (Object newValue)
Устанавливает значение, выбранное пользователем.
Параметры:
newValue - выбранное значение
См. Также:
getValue ()
Вызовите его с помощью JOptionPane.OK_OPTION
, чтобы установить значение параметра, который выхочу выбрать.Теперь, что документы не упоминают, это то, что он не просто устанавливает значение: он активно выбирает значение.Он действует так, как будто пользователь фактически взаимодействовал с диалоговым окном, чтобы выбрать опцию.В тот момент, когда вы устанавливаете значение с помощью этой функции, диалоговое окно закрывается и возвращается выбранное значение.
Вот мой законченный обработчик MouseEvent для справки:
table.addMouseListener(new MouseAdapter() {
public void mousePressed(MouseEvent e) {
if (e.getClickCount() == 2 && table.getSelectedRow() != -1) {
Component c = (Component)OpenBookPanel.this;
while ((c != null) && (!(c instanceof JOptionPane))) {
c = c.getParent();
}
if (c == null) {
System.err.println("Could not get option pane!");
} else {
JOptionPane op = (JOptionPane)c;
op.setValue(JOptionPane.OK_OPTION);
}
}
}
});