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:
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!
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!