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...
P

Pago83

Threadstarter
Mitglied 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

  • Gruppenrichtlinienclient Windows 7 Problem bei Anmeldung

    Gruppenrichtlinienclient Windows 7 Problem bei Anmeldung: seit kurzem erhalte ich beim Start von Windows 7 die Meldung: keine Anmeldung möglich, da "Gruppenrichtlinienclient" nicht freigegeben ist. Was...
  • Problem mit dem Wireless Display Adapter

    Problem mit dem Wireless Display Adapter: Hi, seit heute habe ich das folgende Problem: Ich benutze schon seit einigen Monaten einen Wireless Display Adapter mit meinem Galaxy Book, auf...
  • Problem bei Installation aus Microsoft-Store

    Problem bei Installation aus Microsoft-Store: Guten Tag. Ich habe mir über die Nacht das Spiel Forza Horizon 4 aus dem XBox Game Pass heruntergeladen und wollte eine Desktop-Verknüpfung dazu...
  • Problem bei Windows 10 Aktivierung nach Hardwareänderung

    Problem bei Windows 10 Aktivierung nach Hardwareänderung: Guten Tag, mein alter PC ist vor kurzem kaputt gegangen und ich habe mir einen neuen geholt. Ich habe mich anschließend mit meinem...
  • Problem mit Hotspot-Verbindung

    Problem mit Hotspot-Verbindung: Die Verbindung zum Internet über den Hotspot meines IPhone X macht Probleme. Anfänglich war eine Verbindung möglich, jetzt geht es wieder nicht...
  • Ähnliche Themen

    • Gruppenrichtlinienclient Windows 7 Problem bei Anmeldung

      Gruppenrichtlinienclient Windows 7 Problem bei Anmeldung: seit kurzem erhalte ich beim Start von Windows 7 die Meldung: keine Anmeldung möglich, da "Gruppenrichtlinienclient" nicht freigegeben ist. Was...
    • Problem mit dem Wireless Display Adapter

      Problem mit dem Wireless Display Adapter: Hi, seit heute habe ich das folgende Problem: Ich benutze schon seit einigen Monaten einen Wireless Display Adapter mit meinem Galaxy Book, auf...
    • Problem bei Installation aus Microsoft-Store

      Problem bei Installation aus Microsoft-Store: Guten Tag. Ich habe mir über die Nacht das Spiel Forza Horizon 4 aus dem XBox Game Pass heruntergeladen und wollte eine Desktop-Verknüpfung dazu...
    • Problem bei Windows 10 Aktivierung nach Hardwareänderung

      Problem bei Windows 10 Aktivierung nach Hardwareänderung: Guten Tag, mein alter PC ist vor kurzem kaputt gegangen und ich habe mir einen neuen geholt. Ich habe mich anschließend mit meinem...
    • Problem mit Hotspot-Verbindung

      Problem mit Hotspot-Verbindung: Die Verbindung zum Internet über den Hotspot meines IPhone X macht Probleme. Anfänglich war eine Verbindung möglich, jetzt geht es wieder nicht...
    Oben