У меня есть проблема в настоящее время для моего приложения напоминания о качании, которое позволяет свести к минимуму до лотка. Моя проблема здесь, мне нужно, чтобы диалог JOptionPane появлялся вовремя в соответствии с тем, что я установил, но проблема здесь в том, что когда я свожу к минимуму, диалог появится, но не в верхней части окон, когда другое приложение, такое как explorer, firefox, кто-нибудь знает, как всплывать диалоговое окно поверх окон, независимо от того, какое приложение запущено?
JOptionPane не будет показывать свой диалог поверх других окон
Ответ 1
Создайте пустой фиктивный JFrame, установите его всегда сверху и используйте его как компонент для JOptionPane вместо null. Таким образом, JOptionPane остается всегда поверх всех остальных окон приложения. Вы также можете определить, где JOptionPane появляется на экране с расположением фиктивного JFrame.
JFrame frmOpt; //dummy JFrame
private void question() {
if (frmOpt == null) {
frmOpt = new JFrame();
}
frmOpt.setVisible(true);
frmOpt.setLocation(100, 100);
frmOpt.setAlwaysOnTop(true);
String[] options = {"delete", "hide", "break"};
int response = JOptionPane.showOptionDialog(frmOpt, msg, title, JOptionPane.YES_NO_OPTION, JOptionPane.QUESTION_MESSAGE, null, options, "delete");
if (response == JOptionPane.YES_OPTION) {
removeRow();
}
frmOpt.dispose();
}
Ответ 2
Старый пост, но я боролся с этим.
Моя проблема была больше с 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, чтобы немного очистить ваш код.
Ответ 3
Используете ли вы один из консервированных JOptionPanes? (Как JOptionPane.showCOnfirmDialog(...))
Вы можете посмотреть расширение JDialog и создать собственную диалоговую панель, а затем вызвать myDialog.setAlwaysOnTop(true);
Ответ 4
Windows блокирует эту операцию с XP.
Сценарий раньше был следующим: Ваш опрос в каком-то тексте в редакторе и не признает, что другой диалог выходит на передний план, когда вы опрокидываете текст. Приближающийся диалог фокусируется, и вы настраиваете новый диалог. Возможно, вы нажмете кнопку после того, как будете готовы, и сделайте это в неправильном диалоговом окне, в котором спрашивается, действительно ли вы хотите удалить свой жесткий диск;)
Приходящий на передний вызов в java работает только для java-окон.
Возможность уведомлять пользователя о новом окне - реализовать Frame, который будет выделен/мигает на панели задач Windows.
Ответ 5
Исправьте сообщение выше..
Я решаю свою проблему, как показано ниже:
this.setVisible(true); // show main frame
MyDialog dialog = New MyDialog(this, true); // show my custom dialog
dialog.setVisible(true);
this.setVisible(false);
он отлично работает для меня:)
Ответ 6
Вместо этого вы можете подумать об использовании JFrame. Это может дать вам немного большую гибкость.
Если вы используете JFrame и хотите, чтобы он всплывал поверх других окон, используйте:
myFrame.setVisible(true);
myFrame.setState(Frame.NORMAL);
SetState покажет окно пользователю, если оно было ранее в мини-состоянии.