Donnerstag, 24. Februar 2011

TIPP: Plattform- und Eingabegeräte-unabhängige Behandlung von Kontextmenüs

Möchte man sicherstellen, dass ein Popup-Menü bzw. Kontext-Menü auf jeder Plattform bzw. mit verschiedenen Eingabegeräten (z.B. Stift bzw. Grafiktablett statt Maus, oder Linkshändler-Maus) funktioniert, hier ein kleiner Tipp:

Statt in MouseListener.mouseReleased() über SwingUtilities.isRightMouseButton() abzufragen, ob die rechte Maustaste gedrückt wurde, kann man besser MouseEvent.isPopupTrigger() verwenden. Dies gibt plattform- und geräteunabhängig true zurück, wenn das Popup geöffnet werden soll.

Da auf einigen Plattformen das Popup bei einem mousePressed() und auf anderen bei mouseReleased() angezeigt wird und isPopupTrigger() nur im entsprechenden Fall true liefert, muss man daher beide MouseEvents behandeln.

Hier ein kleines Code-Beispiel:

      private class PopupHandler extends MouseAdapter
      {
            @Override
            public void mousePressed(MouseEvent e)
            {
                  handlePopup(e);
            }


            @Override
            public void mouseReleased(MouseEvent e)
            {
                  handlePopup(e);
            }


            private void handlePopup(MouseEvent e)
            {
                  if (e.isPopupTrigger())
                  {
                        showPopup(e.getX(), e.getY());
                  }
            }


            private void showPopup(int x, int y)
            {
                  // Popup anzeigen
            }
      }

Keine Kommentare:

Kommentar veröffentlichen