SWT tree elemente markieren

Lord_Aratorn

Aktives Mitglied
Hallo, ich bin auf der Suche nach einem Weg ein Selektiertes Element eines Tree farblich zu markieren. Die Markierung soll solange erhalten bleiben, bis ein anderes Element aus dem selben Tree angewählt wird.

Ich habe dazu folgendes Snippet genutzt:
Java:
package org.eclipse.swt.snippets;

import org.eclipse.swt.SWT;
import org.eclipse.swt.graphics.Color;
import org.eclipse.swt.layout.FillLayout;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Event;
import org.eclipse.swt.widgets.Listener;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.swt.widgets.Tree;
import org.eclipse.swt.widgets.TreeItem;

public class Snippet114 {

  public static void main(String[] args) {
    final Display display = new Display();
    Shell shell = new Shell(display);
    shell.setLayout(new FillLayout());
    Tree tree1 = new Tree(shell, SWT.BORDER | SWT.V_SCROLL
        | SWT.H_SCROLL);
    for (int i = 0; i < 12; i++) {
      TreeItem item = new TreeItem(tree1, SWT.NONE);
      item.setText("tree1 Item " + i);
      for (int j = 0; j < i; j++) {
          TreeItem items = new TreeItem(item, SWT.NONE);
          items.setText("tree1 SubItem " + j);
        }
    }
    tree1.addListener(SWT.Selection, new MyTreelistener());
    
    Tree tree2 = new Tree(shell, SWT.BORDER | SWT.V_SCROLL
            | SWT.H_SCROLL);
        for (int i = 0; i < 12; i++) {
          TreeItem item = new TreeItem(tree2, SWT.NONE);
          item.setText("tree2 Item " + i);
          for (int j = 0; j < i; j++) {
              TreeItem items = new TreeItem(item, SWT.NONE);
              items.setText("tree2 SubItem " + j);
            }
        }
        tree2.addListener(SWT.Selection, new MyTreelistener());
    shell.setSize(800, 600);
    shell.open();
    while (!shell.isDisposed()) {
      if (!display.readAndDispatch())
        display.sleep();
    }
    display.dispose();
  }
}

und dazu einen eigenen Listener geschrieben
Java:
package org.eclipse.swt.snippets;

import org.eclipse.swt.SWT;
import org.eclipse.swt.graphics.Color;
import org.eclipse.swt.widgets.Event;
import org.eclipse.swt.widgets.Listener;
import org.eclipse.swt.widgets.TreeItem;

public class MyTreelistener implements Listener {
	TreeItem lastitem = null;

	public void handleEvent(Event event) {
		TreeItem item = (TreeItem) event.item;
		if (lastitem != item) {
			String string = null;
			if (event.detail == SWT.None) {
				if (lastitem != null)
					lastitem.setBackground(item.getBackground());
				lastitem = item;
				item.setBackground(new Color(item.getDisplay().getCurrent(), 0, 255, 0));
				string = "Selected";
			}
			System.out.println(event.item + " " + string);
		}
	}
}
Probleme: Bei Auswahl Eines Items aus dem anderen tree, wird die Farbe zurückgesetzt. Dabei soll es möglich sein in jedem tree genau 1 Element farblich zu markieren.
 
Nein, leider nicht. Denn wenn ein element gewählt wird, dass nicht im baum liegt, z.b. nen button dann ist die entsprechende Auswahl im Baum farblich nicht mehr wahrnehmbar. Das Element ist jedoch weiterhin selektiert, das ist richtig.
Ich hätte gerne dass der Nutzer sieht, welche elemente beider Bäume ausgewählt sind.
 
Danke Wildcard, ich habe nun einfach den text des Ausgewählten Treeelementes auf Blod gesetzt. Nun ist es offensichtlicher welches Element ausgewählt ist.
 

Zurück
Oben