Примечание: Решение, приведенное ниже, протестировано только на OS X
Вынуждает JDialog
иметь тип Window.Type#POPUP
, как показано ниже.work.
dialog.setType(Window.Type.POPUP);
Это позволяет диалогу быть фокусируемым, и когда он получает фокус, другие окна не теряют фокус, как всплывающее меню.Тем не менее, он также имеет другие эффекты, такие как заставить диалог вести себя так, как если бы был вызван dialog.setAlwaysOnTop(true)
.
Примечание: Пример приложения ниже при запуске не фокусирует другие окна при запуске, но не после не сфокусированных оконснова сфокусированы.
Пример:
import java.awt.EventQueue;
import java.awt.Window;
import javax.swing.JDialog;
import javax.swing.JLabel;
import javax.swing.SwingConstants;
import javax.swing.WindowConstants;
public class NonUnfocusingDialogExample {
public static void main(final String[] args) {
EventQueue.invokeLater(() -> {
final JDialog dialog = new JDialog();
dialog.setType(Window.Type.POPUP);
dialog.getContentPane().add(new JLabel("Hello World!",
SwingConstants.CENTER));
dialog.pack();
dialog.setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
dialog.setTitle("Test Dialog");
dialog.setLocationByPlatform(true);
dialog.setVisible(true);
});
}
}