Selektierung zwischen JTrees übertragen



  • Hi,
    ich habe 2 JTrees, bei denen folgendes passieren soll: Wenn ich in dem einen einen Knoten selektiere, soll dieser auch im anderen JTree selektiert werden. Leider bekomme ich das nicht zum Laufen. Folgender Code sollte eigentlich laufen:

    import javax.swing.JFrame;
    import javax.swing.JSplitPane;
    import javax.swing.JTree;
    import javax.swing.event.TreeSelectionEvent;
    import javax.swing.event.TreeSelectionListener;
    import javax.swing.tree.DefaultMutableTreeNode;
    import javax.swing.tree.TreePath;
    
    public class TreeViewer extends JFrame {
    	public TreeViewer(){
    		setSize(500, 300);
    		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    
    		final JTree tree1 = new JTree(createTreeStructure());
    
    		JTree tree2 = new JTree(createTreeStructure());
    		tree2.addTreeSelectionListener(new TreeSelectionListener() {
    			public void valueChanged(TreeSelectionEvent treeSelectionEvent){
    				TreePath[] treePaths = treeSelectionEvent.getPaths();
    				for(int i = 0; i < treePaths.length; i++){
    					if(treeSelectionEvent.isAddedPath(i)){
    						tree1.expandPath(treePaths[i]);
    						tree1.setSelectionPath(treePaths[i]);
    					}
    				}
    			}
    		});
    
    		JSplitPane splitPane = new JSplitPane();
    		splitPane.setLeftComponent(tree1);
    		splitPane.setRightComponent(tree2);
    
    		getContentPane().add(splitPane);
    
    		setVisible(true);
    	}
    
    	private DefaultMutableTreeNode createTreeStructure(){
    		DefaultMutableTreeNode childNode2 = new DefaultMutableTreeNode("Child node 2");
    		DefaultMutableTreeNode childNode1 = new DefaultMutableTreeNode("Child node 1");
    		DefaultMutableTreeNode rootNode = new DefaultMutableTreeNode("Root node");
    		rootNode.add(childNode1);
    		childNode1.add(childNode2);
    		return rootNode;
    	}
    
    	public static void main(String[] arguments){
    		new TreeViewer();
    	}
    }
    

    Sieht jemand das Problem?



  • Jeder der Bäume hat seine eigenen Knoten. Daher kannst du nicht den TreePath von dem einen im anderen verwenden.


Anmelden zum Antworten