# SWT - Tree: Problem mit Double-Click expand



## Wite (Gast) (18. Aug 2004)

Hey ihr schlauen Koepfe da draussen!

Wenn ich einem Tree einen SelectionListener hinzufuege, dann werden bei einem Doppelklick
die TreeItems nicht mehr expanded bzw. colllapsed.
Jemand eine Ahnung warum das so ist und wie man das fixen kann?

Wite@gmx.net <- bitte mailen, DANKE im Voraus!

-Wite-


----------



## thE_29 (18. Aug 2004)

bisi source wäre net schlecht 

weil bei mir gehts!


----------



## Illuvatar (18. Aug 2004)

Bei mir auch :bae:


----------



## Wite (Gast) (22. Aug 2004)

So, hier mal ein bisschen Code (sorry fuer die weiten Indents, hab's aus eclipse rauskopiert):

```
...
..
.
		// Tree
		m_tree = new Tree(sashForm, SWT.BORDER | SWT.SINGLE);
		m_tree.addTreeListener(new TreeListener()
		{
                        // setzen des Images, abhaengig ob expanded oder collapsed.
			public void treeCollapsed(TreeEvent e)
			{
				chooseImage((TreeItem)e.item);
			}
			public void treeExpanded(TreeEvent e)
			{
				chooseImage((TreeItem)e.item);
			}
		});
		m_tree.addSelectionListener(new SelectionAdapter()
		{
			public void widgetSelected(SelectionEvent e)
			{
				if (e.item instanceof TreeItem)
				{
					Object o = ((TreeItem)e.item).getData();
					if ((o != null) && (o instanceof Section))
					{
						SectionEntry sectionEntry;
						TableItem tableItem;
						Vector sectionEntryVector = ((Section)o).getSectionEntries();
						if (sectionEntryVector.size() > 0)
						{
							m_table.setRedraw(false); // koennte es damit zu tun haben?
							m_table.removeAll();
							for (Iterator iter = sectionEntryVector.iterator(); iter.hasNext();)
							{
								sectionEntry = (SectionEntry)iter.next();
								tableItem = new TableItem(m_table, SWT.LEFT);
								tableItem.setData(sectionEntry);
								tableItem.setText(COL_NAME, sectionEntry.getName());
								tableItem.setText(
									COL_TYPE,
									sectionEntry.getValue().getValueType().getStringValue());
								tableItem.setText(
									COL_VALUE,
									sectionEntry.getValue().valueToString());
							}
							TableColumn[] cols = m_table.getColumns();
							for (int i = 0; i < cols.length; i++)
							{
								cols[i].pack();
							}
							m_table.setRedraw(true); // koennte es damit zu tun haben?
						}
					}
				}
			}
		});
		TreeItem jiniFileItem = new TreeItem(m_tree, SWT.NONE); // Wurzel des Trees
		jiniFileItem.setImage(m_shell.getImage());
		jiniFileItem.setText("...");
		m_tree.setRedraw(false);
		createFirstLevelSectionItems(jiniFileItem); // anhaengen von TreeItems an die Wurzel (werden aus Datei gelesen)
		m_tree.setRedraw(true);
		m_tree.setSelection(new TreeItem[] { jiniFileItem });
		jiniFileItem.setExpanded(true);
...
..
.
```


----------



## Wite (Gast) (22. Aug 2004)

Der  sollte eigentlich nicht umgewandelt werden denk ich, wenn man schon das Code-Tag verwendet....
naja es sollte halt ; ) heissen......LOL


----------



## Wite (22. Aug 2004)

So, nun schaut!
Ich hab mir mal die SWT-Sourcen angeguckt und siehe da.....mir fiel etwas auf und zwar hier:

```
File: org.eclipse.swt.widgets.Tree.java
...
..
.
public void addSelectionListener(SelectionListener listener) {
	checkWidget ();
	if (listener == null) error (SWT.ERROR_NULL_ARGUMENT);
	TypedListener typedListener = new TypedListener (listener);
	addListener (SWT.Selection, typedListener);
	addListener (SWT.DefaultSelection, typedListener); // <-- Diese Zeile war vermutlich fuer mein Prob. verantwortlich!
}
...
..
.
```

Ich habe nun den alten Code 
	
	
	
	





```
...m_tree.addSelectionListener(new SelectionAdapter()...
```
geaendert in 
	
	
	
	





```
...m_tree.addListener(SWT.Selection,new TypedListener(new SelectionAdapter()...
```
und jetzt verhaelt der Tree sich wie er soll, d.h. er expandiert/kollabiert bei Doppelklick und zeigt mir die ausgewaehlten
Daten in der Table an.
Zur Table hab ich auch gleich meine naechste Frage...
aber dafuer mach ich lieber einen neuen Thread auf...bis gleich also.


----------

