Frage

Einfache Frage:

Kann ein Schwenkrahmen vollständig modal sein (alle anderen Fenster blockieren)?

habe ich versucht, die folgende, aber ich kann auf andere Anwendungen Fenster noch klicken (wie dieser Browser)

JDialog myDialog  = .... 
myDialog.setModalityType(Dialog.ModalityType.APPLICATION_MODAL);

Plase einige Code einfügen, wenn dies möglich ist.

War es hilfreich?

Lösung

JFrame ist nicht als modal gestaltet. Verwenden Sie JDialog für sie, aber Sie werden einige JFrame Funktionalität verlieren dies zu tun. Wenn Sie nicht mit dem Verlust leben können, müssen Sie die Eventqueue blockieren und ersetzen Sie es mit Ihrem eigenen akzeptieren nur Ereignisse aus der Blockierung ein.

Siehe Erstellen Modal Interner Frames für eine Erklärung mit internen Rahmen das sollte auch JFrame anwendbar sein.

Edit: Oups, meine Antwort scheint ein wenig ab, da Ihr Codebeispiel zeigt Ihnen bereits einen Dialog Unterklasse für diese verwendet wird.

Andere Tipps

Dialoge sind nicht dazu gedacht, global modal zu sein. Jedes moderne OS rät dringend globale Modalität in seiner HIG, und sie können sogar die Funktionalität als veraltet (wie durch die Tatsache, dass Sie es nicht zur Arbeit kommen kann). Ihre Anwendung sollte nie stehlen Ereignisse aus dem gesamten System; das ist nicht nur schlechtes Design, es ist in der Nähe von-Verbrecher in meinem Buch.

die Tatsache ignorieren, dass die meisten Menschen wie zu Multi-Task zwischen mehreren Anwendungen, was über das Szenario, in dem Sie einen global modalen Dialog öffnen und dann die Anwendung friert? Strg + Alt + Entf sollte unter Windows arbeiten, um die App zu töten, aber ich bin nicht sicher Cmd + Opt Flucht + auf Mac mit einem global modalen Dialog (tut Cocoa auch wird global Modalität?). Keiner der Linux-Plattformen haben keine schöne Möglichkeit, Anwendungen zu töten, die sich über die vollständige Kontrolle über die Benutzeroberfläche genommen haben, wie Sie vorschlagen (Sie müssten X11 vollständig töten und eine neue Instanz von Grund auf neu starten).

Meine Antwort:.. einen anderen Weg finden ist mir egal, was Ihr Kunde ist zu fragen, sie will das nicht

Ich weiß nicht, über die globale modal, aber hier ist eine Idee.

  1. Nehmen Sie den Screenshot des Desktops.
  2. Gehen Sie Vollbild.
  3. Pop Up Ihren Dialog.

Da der Desktop gefälschter Screenshot ist, können Sie jeden Versuch ignorieren hinein zu klicken.

Vollbild Probe :

private void toggleFullScreenWindow() {
  GraphicsEnvironment graphicsEnvironment
    = GraphicsEnvironment.getLocalGraphicsEnvironment();
  GraphicsDevice graphicsDevice
    = graphicsEnvironment.getDefaultScreenDevice();
  if(graphicsDevice.getFullScreenWindow()==null) {
    dialog.dispose(); //destroy the native resources
    dialog.setUndecorated(true);
    dialog.setVisible(true); //rebuilding the native resources
    graphicsDevice.setFullScreenWindow(dialog);
  }else{
    graphicsDevice.setFullScreenWindow(null);
    dialog.dispose();
    dialog.setUndecorated(false);
    dialog.setVisible(true);
    dialog.repaint();
  }
  requestFocusInWindow();
}

Zur Info: Vollbild-Exclusive Mode API .

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top