Старый пост, но я боролся с этим.
Моя проблема была больше с Javafx, позволяющим JOptionPane идти за текущим окном Java.
Поэтому я использовал следующее, что делает то, о чем просил оригинальный плакат, помещая JOptionPane перед всеми окнами; даже JAVAFX.
Во-первых, старая JOptionPane:
JOptionPane.showMessageDialog(null, "Here I am");
Теперь JOptionPane, которая остается впереди:
final JDialog dialog = new JDialog();
dialog.setAlwaysOnTop(true);
JOptionPane.showMessageDialog(dialog, "Here I am");
А для забавы все в одной длинной строке:
JOptionPane.showMessageDialog(
((Supplier<JDialog>) () -> {final JDialog dialog = new JDialog(); dialog.setAlwaysOnTop(true); return dialog;}).get()
, "Here I am");
Вы можете создать статический метод, который будет возвращать JDialog для вас, а затем просто вызвать его в JOptionPane, чтобы немного очистить ваш код.