Problem mit reload eines JTrees in Java !!!

Diskutiere Problem mit reload eines JTrees in Java !!! im Programmierung Forum im Bereich Software Forum; Hallo, ich habe u.a. zwei Klassen geschrieben. Die 1. Klasse sieht wie folgt aus: public class Manager extends Observable implements...

Pago83

Threadstarter
Dabei seit
17.10.2006
Beiträge
177
Hallo,

ich habe u.a. zwei Klassen geschrieben. Die 1. Klasse sieht wie folgt aus:

Code:
public class Manager extends Observable implements TreeManager, CoreDataManager
{
	private List<WEAObject> _weaObjects;
	private WEAObject _selectedWeaObject;
	
	public WEAObject getSelectedWeaObject()
	{
		return _selectedWeaObject;
	}
	
	public void selectionChanged(WEAObject previous, WEAObject now) 
	{
		_selectedWeaObject = now;
		setChanged();
		notifyObservers(_selectedWeaObject);		
	}

	public void cancelPressed() 
	{
		
	}

	public void savePressed(WEAObject actual) 
	{
		
	}

	public List<WEAObject> getWeaObjects() 
	{
		return _weaObjects;
	}

	public void setWeaObjects(List<WEAObject> weaObjects) 
	{
		_weaObjects = weaObjects;
	}
}

Die 2. Klasse sieht so aus:

Code:
public class TreePane extends JTree implements Observer, TreeSelectionListener
{
	private static final long serialVersionUID = 1814397171864186901L;
	private TreeManager _treeManager;
	
	public TreePane(List<WEAObject> weaObjects)
	{
		super();
		Map<String, List<WEAObject>> parkMap = createParkMap(weaObjects);
		createTree(parkMap);
	}
	
	private Map<String, List<WEAObject>> createParkMap(List<WEAObject> weaObjects)
	{
		Map<String, List<WEAObject>> weaObjectMap = new TreeMap<String, List<WEAObject>>();
		for (int i = 0; i < weaObjects.size(); i++)
		{
			WEAObject weaObject = weaObjects.get(i);
			String parkName = weaObject.getParkName();
			if (weaObjectMap.containsKey(parkName))
			{
				weaObjectMap.get(parkName).add(weaObject);
			}
			else
			{
				List<WEAObject> weaObjectList = new ArrayList<WEAObject>();
				weaObjectList.add(weaObject);
				weaObjectMap.put(parkName, weaObjectList);
			}
		}
		return weaObjectMap;	
	}
	
	class CompareFacilityNumbers implements Comparator<WEAObject>
	{

		public int compare(WEAObject o1, WEAObject o2) 
		{
			Integer facilityNumber1 = o1.getFacilityNumber();
			Integer facilityNumber2 = o2.getFacilityNumber();			
			return facilityNumber1.compareTo(facilityNumber2);
		}
	}
	
	private void createTree(Map<String, List<WEAObject>> parkMap)
	{
		DefaultMutableTreeNode root = new DefaultMutableTreeNode("Wurzel");
		Set<String> keys = parkMap.keySet();
		for (String key : keys)
		{
			List<WEAObject> weaObjectList = parkMap.get(key);
			Collections.sort(weaObjectList, new CompareFacilityNumbers());
			DefaultMutableTreeNode child = new DefaultMutableTreeNode(key);
			for (int j = 0; j < weaObjectList.size() ; j++)
			{
				WEAObject weaObject = weaObjectList.get(j);	
				DefaultMutableTreeNode subChild = new DefaultMutableTreeNode(weaObject);
				child.add(subChild);
			}
			root.add(child);
		}
		DefaultTreeModel treeModel = new DefaultTreeModel(root);		
		this.setModel(treeModel);
		addTreeSelectionListener(this);
		this.setRootVisible(false);
	}

	public void update(Observable o, Object object) 
	{
		((DefaultTreeModel)this.getModel()).reload();				
	}
	
	public TreeManager getTreeManager() 
	{
		return _treeManager;
	}

	public void setTreeManager(TreeManager manager) 
	{
		_treeManager = manager;
	}

	public void valueChanged(TreeSelectionEvent e) 
	{		
		TreePath oldTreePath = e.getOldLeadSelectionPath();
		WEAObject weaObject = null;
		if (oldTreePath != null)
		{
			Object object = oldTreePath.getLastPathComponent();
			DefaultMutableTreeNode treeNode = (DefaultMutableTreeNode)object;
			Object userObject = treeNode.getUserObject();
			if (userObject instanceof WEAObject)
			{
				weaObject = (WEAObject)userObject;
			}
		}
		TreePath newTreePath = e.getNewLeadSelectionPath();
		WEAObject newWeaObject = null;
		if (newTreePath != null)
		{
			Object object = newTreePath.getLastPathComponent();
			DefaultMutableTreeNode treeNode = (DefaultMutableTreeNode)object;
			Object userObject = treeNode.getUserObject();
			if (userObject instanceof WEAObject)
			{
				newWeaObject = (WEAObject)userObject;
			}
		}
		_treeManager.selectionChanged(weaObject, newWeaObject);
	}
}

Wenn die update Methode der einen Klasse aufgerufen wird, soll der Baum reloaded werden.

Die selectionChanged Methode soll notifyObservers aufrufen, wenn sich etwas im Baum geändert hat.

Das Problem ist momentan folgendes:

Wähle ich einen Knoten des Baums aus, so werden die Blätter des Knotens angezeigt. Möchte ich nun jedoch ein Blatt anklicken, so schliesst sich der Baum beim Anklicken des Blatts komplett.

Was muss ich in meinem Code ändern um dieses Problem zu beseitigen?

MfG Pago
 
Thema:

Problem mit reload eines JTrees in Java !!!

Problem mit reload eines JTrees in Java !!! - Ähnliche Themen

Problem mit Java Programm Einsteiger: Hallo ich wollte mir ein bisschen das Programmieren bei bringen und habe mir ein Buch gekauft jetzt wollte ich ein Programm aus dem buch nach...
Windows 10 Update 1809 auf 1903 schlägt fehl und System wird zurückgesetzt FM: 0x8007042B - 0x2000D: Hallo, bitte um Mithilfe, leider kann kann ich kein erfolgreiches Systemupadte von Windows 10 1808 auf 1903 durchführen. Fehlermeldung ...
Win 10 Upgrade auf 1803 läuft nicht durch (SECOND_BOOT / MIGRATE_DATA): Hallo, Bei mir läuft das Upgrade auf 1803 nicht durch. Ich hatte seit Win7 bisher entweder keine Probleme mit den Upgrades oder konnte durch die...
Windows 10 Mobile: Änderungen und Neuheiten des Anniversary Update im Überblick: Ende Juli wird Microsoft ein mehr als umfangreiches Update seines mobilen Betriebssystems veröffentlichen, das diverse Neuerungen und...
VB bau-game (richtung Siedler =)): ich habe programmiert dass man wenn man auf einen button klickt dass dann eine pb erstellt wird mit der münzprägerei (bsp.) dann folgt dieses der...
Oben