[SWT] Kontextmenü in einer einfachen Liste?!

DarthShader

Erfahrenes Mitglied
Hallo,

ich wollte kürzlich eine GUI mit SWT bauen und benötigte eine Funktionalität, die in fast allen Anwendungen vor kommt:

Ich habe eine Liste (org.eclipse.swt.widgets..List), und möchte gerne, dass der Benutzer einen Rechtsklick auf ein Item machen kann, zu dem dann ein Kontextmenü erscheint.

Sodann habe ich also eine Liste (name "list") erstellt, sowie das folgende Kontextmenu:

Java:
Menu contextMenu = new Menu( shell, SWT.POP_UP );
MenuItem item1 = new MenuItem( contextMenu, SWT.PUSH );
MenuItem item2 = new MenuItem( contextMenu, SWT.PUSH );
MenuItem item3 = new MenuItem( contextMenu, SWT.PUSH );

item1.setText( "Item Nr.1" );
item2.setText( "Item Nr.2" );
item3.setText( "Item Nr.3" );

// Das Kontextmenü der Liste "bekannt machen"
list.addMenu( contextMenu );

Ein sehr simples Beispiel eines Kontextmenüs (natürlich nur Exemplarisch, das eigentliche wird komplexer, hilft jedoch nicht bei der Problemstellung hier).

Unter Windows wohl überall anzutreffen, und unter Linux in den meisten Anwendungen, ist folgendes Verhalten: Der Benutzer bewegt die Maus über eines der List-Items. Er drückt die rechte Maustaste herunter, das Item wird markiert, er lässt die rechte Maustaste los, das Kontextmenü erscheint.
Danach kann der Benutzer dann irgend einen Kontextmenü-Punkt auswählen und die entsprechende Aktion wird mit dem markierten List-Item durchgeführt.

Das Problem ist nun: Ein Item wird in der SWT Liste _nicht_ durch drücken der rechten Maustaste markiert! Zwar erscheint das Kontextmenü, aber das angeklickte Item ist nicht markiert. Man muss das Item erst mit einem Linksklick markieren und kann dann einen Rechtsklick ausführen, um das Kontextmenü anzuzeigen.

Ich dachte mir dann, ich könne der Liste einen MouseListener hinzufügen, der beim (runter-)drücken der rechten Maustaste das Item markiert. Nun ja, ich glaube man kann nicht ermitteln, auf welches List-Item geklickt wurde :-(


Ich bin etwas verwirrt, dass eine so einfache Verhaltensweise, wie man sie von jeder GUI Bibliothek kennt, solche Probleme macht.

Mache ich einen Fehler bei der ganzen Sache? Falls nicht, gibt es einen guten Work-Around dafür?


Vielen Dank für Eure Hilfe!
 
Hallo,

Unter Windows wohl überall anzutreffen, und unter Linux in den meisten Anwendungen, ist folgendes Verhalten: Der Benutzer bewegt die Maus über eines der List-Items. Er drückt die rechte Maustaste herunter, das Item wird markiert, er lässt die rechte Maustaste los, das Kontextmenü erscheint.
Danach kann der Benutzer dann irgend einen Kontextmenü-Punkt auswählen und die entsprechende Aktion wird mit dem markierten List-Item durchgeführt.
Zumindest unter Windows ist das aber nicht das Standardverhalten für eine Listbox. Am einfachsten wäre es wohl, wenn du statt einer List eine Table verwendest, bei der auch mit einem Rechtsklick markiert wird.

Grüße,
Matthias
 
Zumindest unter Windows ist das aber nicht das Standardverhalten für eine Listbox.

Meinst Du für SWT, oder ganz allgemein unter Windows?


Am einfachsten wäre es wohl, wenn du statt einer List eine Table verwendest, bei der auch mit einem Rechtsklick markiert wird.

Hm ok, werde ich einmal ausprobieren. Aber irgendwie kommt es mir immer noch komisch vor, kein ordentliches Kontextmenü für eine Listbox erstellen zu können.
 
generell unter Windows funktioniert das mit dem Linksklick und nicht dem Rechtsklick, auf welchem OS soll das denn mit nem Rechtsklick gehen? MAC?
Und wenn man es unter Windows richtig bedient (Linksklick) dann auch die Event-Handler ohne Probleme und korrekt, wie alles gedacht ist ;)
 
Meinst Du für SWT, oder ganz allgemein unter Windows?
Für das Windows-Control „List Box“, das zur Darstellung einer SWT-List verwendet wird, ist dies das Standardverhalten. Dieses Control ist allerdings inzwischen so gut wie ausgestorben; man findet an den meisten Stellen nur noch ein „List View“ oder in den einfacheren Fällen auch eine „Combo Box“. Nach langem Suchen habe ich aber doch noch einen Systemdialog von Windows XP gefunden, der eine „List Box“ enthält: man erreicht sie, in dem man in den „Telefon- und Modemoptionen“ in der Systemsteuerung auf den Reiter „Erweitert“ klickt. Dort zeigt sich dann auch das beschriebene Verhalten.

Hm ok, werde ich einmal ausprobieren. Aber irgendwie kommt es mir immer noch komisch vor, kein ordentliches Kontextmenü für eine Listbox erstellen zu können.
Finde ich auch schade. Aber das ist wohl noch eine Altlast aus weit zurückliegenden Windowsgenerationen. Unter Gnome funktioniert es übrigens auch wie erwartet mit einem Rechtsklick, auch wenn dir das jetzt vermutlich nicht weiterhilft.

Grüße,
Matthias
 
Es soll so unter Win/Linux funktionieren. Hm ich dachte das wäre auch das Standardverhalten für normale ListBoxen... nungut, wenn es wirklich nicht so vorgesehen ist für normale Listen, dann werde ich wohl Table benutzen.

Abgesehen davon, was der Standard ist, ne Idee für einen Workaround, sodass das oben beschriebene Verhalten auf für Listen funktioniert?
 

Neue Beiträge

Zurück