2011-12-18

Ultimate Swing, Teil 9

Wenn Sie mit Notes and Tasks experimentieren, fällt Ihnen vielleicht ein scheinbares Fehlverhalten auf.

Kategorieauswahl als Popup
Kategorieauswahl als Popup

Das Anklicken der Schaltfläche Change Category öffnet wieder und wieder das Popup, ebenso können Sie bei geöffnetem Menü die Registerkarten wechseln.

Sind Popups nicht eine Art modaler Dialog, der nach Anklicken des Hintergrunds verschwindet? Wenn ja, warum wirken Mausereignisse dann auf andere Komponenten?

Das Durchlassen der Mausereignisse ist gewollt.

Wie so oft in Swing kann man das Verhalten aber auf einfache Weise beeinflussen. Mit UIManager.put("PopupMenu.consumeEventOnClose", Boolean.TRUE); sorgen Sie dafür, dass Mausereignisse nicht an andere Komponenten weitergereicht werden, solange das Popup geöffnet ist.

Welches Verhalten würden Sie denn von Popups erwarten? Sollen Klicks außerhalb durchgereicht oder vom Popup konsumiert werden? Ich bin sehr auf Ihre Meinungen gespannt…

2 comments:

  1. Eine Eigenheit, die mir tatsächlich noch nie aufgefallen ist. Eigentlich hätte ich erwartet, dass sich das JPopupMenu wie ein modaler Dialog verhält.

    ReplyDelete
  2. Es ist nur ein Menü. An jeder anderen Stelle (zumindest in allen gängigen Windows-Programmen sowie der Windows-GUI selbst) reagiert die Oberfläche auf Klicks, wenn ein Menü geöffnet ist und lässt das Menü entsprechend verschwinden. Nichts mit "modal" oder sonst etwas. Von daher ist das Verhalten korrekt, zumindest soweit ich das aus dem Text herauslese (habe das Programm selbst noch nicht gestartet).

    ReplyDelete