Mein Problem:
Ich habe eine Liste mit vielen Items darin. Nun will ich ein Popupmenu für die einzelnen Elemente in der Liste erstellen. Klicke ich mit der rechten Maustaste auf ein Items in der Liste soll ein Popupmenu erscheinen mit speziellen Daten aus der DB.
Jedes Item aus der Liste hat verschiedene Daten in der DB. Deshalb benötige ich ein Popupmenu der dynamisch die MenuItems erstellt. Ein Popupmenu mit einem Item “ausgewähltes Element lösche” habe ich schon erstellt. Wie bekomme ich jetzt dynamisch die Daten aus der DB als Items in das Popupmenu…
item.add(new Item)
PopUp.add(item.get(i) = new JMenuItem(liste.get(i).getInfo()));
}```
so was in der Art? evtl. stimmt der Code nicht 100% bin, naja sagen wir, nciht fit in Java
...
// Context-Menu in Anlagenliste
final Menu menu = new Menu(this.client);
this.listAnlagen.setMenu(menu);
menu.addListener(SWT.Show, new ContextMenu(menu, this.listAnlagen));
....
Klasse ContextMenu
...
@Override
public void handleEvent(Event event)
{
MenuItem[] menuItems = this.menu.getItems();
for (int i = 0; i < menuItems.length; i++)
{
menuItems**.dispose();
}
String[] listItems = this.listAnlagen.getSelection();
for (int i = 0; i < listItems.length; i++)
{
MenuItem removeSelection = new MenuItem(this.menu, SWT.PUSH);
removeSelection.setText(listItems** + " aus Auswahl entfernen"); //$NON-NLS-1$
removeSelection.addListener(SWT.Selection, new Listener()
{
@Override
public void handleEvent(Event events)
{
ContextMenu.this.listAnlagen.remove(ContextMenu.this.listAnlagen.getSelectionIndices());
}
});
}
}
...
Hmmm… wenn ich nimdas Beispiel anschaue komme ich auf die Idee eine Schleife zu erstellen der für das ausgewählte Item in der Liste alle Daten aus der DB lädt und in das Menu einfügt.
Aber für alle Daten brauche ich ja ein MenuItem, d.h. ich muss für alle Daten jeweils ein MenuItem erstellen?
Also erstmal halte ich deine Vorgehensweise für recht kompliziert.
Sinnvoller ist es IMO den MenuDetectListener zu verwenden und dort das ContextMenü explizit zu erzeugen
Beispiel:
list.addMenuDetectListener(new MenuDetectListener() {
@Override
public void menuDetected(MenuDetectEvent e) {
Menu menu = new Menu(list.getShell(), SWT.POP_UP);
// Creates a new menu item
MenuItem exit = new MenuItem(menu, SWT.NONE);
exit.setText("Test!");
exit.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent e) {
System.out.println("Test");
}
});
// We need to make the menu visible
menu.setVisible(true);
}
});
Vorteil dieser Vorgehensweise ist, dass das Menü jedes mal neu erzeugt wird. Du musst die alten Menuitems also nicht extra disposen und kannst jedes mal context bezogene Informationen abrufen und einbinden. In deinem Fall würde das also bedeuten, dass du die Daten aus der DB abrufst und die dazu gehörigen MenuItems erstellst
[QUOTE=Sonecc]Also erstmal halte ich deine Vorgehensweise für recht kompliziert.
Sinnvoller ist es IMO den MenuDetectListener zu verwenden und dort das ContextMenü explizit zu erzeugen
Beispiel:
list.addMenuDetectListener(new MenuDetectListener() {
@Override
public void menuDetected(MenuDetectEvent e) {
Menu menu = new Menu(list.getShell(), SWT.POP_UP);
// Creates a new menu item
MenuItem exit = new MenuItem(menu, SWT.NONE);
exit.setText("Test!");
exit.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent e) {
System.out.println("Test");
}
});
// We need to make the menu visible
menu.setVisible(true);
}
});
Vorteil dieser Vorgehensweise ist, dass das Menü jedes mal neu erzeugt wird. Du musst die alten Menuitems also nicht extra disposen und kannst jedes mal context bezogene Informationen abrufen und einbinden. In deinem Fall würde das also bedeuten, dass du die Daten aus der DB abrufst und die dazu gehörigen MenuItems erstellst[/QUOTE]
Danke für den Hinweis. Habe ich jetzt mal umgeändert bei mir.
Mal ne andere Frage, kann man in eine “org.eclipse.swt.widgets.List” ein Objekt als Item speichern?
Nun kommt das nächste Problem, dass ich nun das selektierte Item(Objekt) aus der Liste haben möchte.
Mit “ISelection listItems = listViewerAnlagen.getSelection();” bekomme ich nur ein String wieder vom selektierten Item.
Ich möchte aber das gespeicherte Objekt im ListViewer wiederbekommen.
EDIT: Hat sich erledigt…
Mit dem addSelectionChangedListener habe ich das nun gelöst…