2016-07-28 44 views
1

Ich habe ein Programm, das in der CLI ausgeführt wird, aber ein JOptionPane verwendet, um ein Popup-Menü anzuzeigen, um den Benutzer eines Ereignisses zu benachrichtigen. Ich habe festgestellt, dass das resultierende Popup-Menü nicht automatisch ausgerichtet wird, wenn die Methode showMessageDialog aufgerufen wird.JOptionPane showMessageDialog Anfrage Fokus im Konsolenprogramm

Gibt es eine Möglichkeit, Fokus für das Popup-Dialogfeld anzufordern? Ich habe versucht, requestFocus auf dem JOptionPane aufzurufen, aber ohne Erfolg.

Hier ist ein Beispielcode.

Ich entschuldige mich, wenn dies ein Repost ist, aber ich konnte bisher keine funktionierende Antwort finden.

+0

Ich habe gerade versucht, den Code und es automatisch bekam Fokus! Um zu testen, drücken Sie einfach "Enter" und sehen, ob das Popup nicht verschwindet. – mohsenmadi

+0

@mohsenmadi Es tut es nicht, wenn ich in einem anderen Fenster bin, was das Problem ist. Normalerweise kann ich das umgehen, indem ich 'requestFocus()' aufrufe, aber das kann ich anscheinend nicht tun, da 'showMessageDialog' statisch ist und 'jop.requestFocus()' 'ruft nicht auf, weil' showMessageDialog' die Pausen unterbricht Faden. – Sollybird

+0

Noch konnte nicht reproduzieren! Ich habe gerade versucht 'try {Thread.sleep (2000); JOptionPane.showMessageDialog (null, "Zurück ...");} catch (InterruptedException e) {} ', um Zeit zu gewinnen, um sich auf andere Fenster zu konzentrieren. Ergebnis? Immer noch Fokus, wenn das Popup angezeigt wird! Ich laufe auf einem Mac - vielleicht geben andere Systeme ein anderes Verhalten? – mohsenmadi

Antwort

0

Erstellen Sie eine JDialog und rufen Sie setAlwaysOnTop über true.

JOptionPane jop = new JOptionPane(); 
JDialog dlog = jop.createDialog(null, "Backup complete. Ready for encryption."); 
dlog.setAlwaysOnTop(true);//make JDialog on top of other windows 
dlog.setVisible(true); 

Die oben genannten Arbeiten auf Windows, aber beachten Sie, dass dieses Verhalten abhängig Plattform sein kann (docs sehen - Sie können überprüfen, ob dies über die isAlwaysOnTopSupported Methode unterstützt wird)