У меня есть несколько текстовых полей, которые я накладываю между ними. На focusLost()
Я открываю JOptionPane
. Я хотел бы, чтобы код в focusGained()
был выполнен ПОСЛЕ JOptionPane
был закрыт. Несмотря на то, что диалог является модальным, focusGained()
вызывается до закрытия JOptionPane
. Есть ли способ обойти это?Как подождать, когда JOptionPane будет закрыт, прежде чем отправлять какие-либо события
Обнаружил этот вопрос, но он, похоже, не был разрешен. Postpone Event Queue after Focus Lost
Вот пример кода. Вы заметите, что «Focus Gained» напечатано до закрытия JOptionPane.
import java.awt.event.FocusEvent;
import java.awt.event.FocusListener;
import javax.swing.BoxLayout;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JTextField;
public class ShortTest implements FocusListener
{
private void go()
{
JFrame frame = new JFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JPanel panel = new JPanel();
panel.setLayout(new BoxLayout(panel, BoxLayout.Y_AXIS));
JTextField text1 = new JTextField();
text1.setName("text1");
text1.addFocusListener(this);
JTextField text2 = new JTextField();
text2.setName("text2");
text2.addFocusListener(this);
panel.add(new JLabel("tex1"));
panel.add(text1);
panel.add(new JLabel("text2"));
panel.add(text2);
frame.setContentPane(panel);
frame.pack();
frame.setVisible(true);
}
public static void main(String [] args)
{
ShortTest test = new ShortTest();
test.go();
}
@Override
public void focusGained(FocusEvent e)
{
if (!e.isTemporary() && (e.getSource() instanceof JTextField))
{
System.out.println("Focus Gained: " + ((JTextField)e.getSource()).getName());
}
}
@Override
public void focusLost(FocusEvent e)
{
if (!e.isTemporary() && (e.getSource() instanceof JTextField))
{
JOptionPane.showOptionDialog(null, ((JTextField)e.getSource()).getName() + " lost focus", "Title", JOptionPane.DEFAULT_OPTION, 0, null, null, null);
}
}
}
Рассмотрите возможность создания и публикации [SSCCE] (http://SSCCE.org), которую мы можем запускать и изменять, и которая демонстрирует вашу проблему. –
См. Редактирование моего ответа. 1+ для публикации sscce - очень впечатляет! –