Problem mit JTree

jorgeHX

Erfahrenes Mitglied
Hallo zusammen,
ich bin auf ein Problem gestoßen, dass ich nicht so alleine lösen kann. Vielleicht wisst ihr ja Rat.
Folgendes Szenario: Ich habe einen Tree mit vier nodes unter der Wurzel und diese vier nodes enthalten selbst wieder nodes oder sind leafs.
Wie dem auch sei, ich befinde mich an irgendeiner Stelle im Baum und möchte dann ein neues Blatt an einer x-beliebigen Stelle einfügen.
Bsp.:

Code:
Wurzel
  Ordner1
       Blatt1
       Blatt2
  Ordner2
  Ordner3
       SubOrdner1
       SubOrdner2
             Blatt3
             Blatt4
  Ordner4
  Blatt5

Ich befinde mich an Stelle-Blatt5 und will ein neues Blatt in den SubOrdner2 einfügen. Der selektierte Zweig soll aber Blatt5 bleiben. Es soll alleine der Baum mit dem neuen Zweig aktualisiert werden.
Wenn ich ein neues Blatt in den Ordner-Ordner2 einfügen will und ich mich ebenfalls an der Stelle-Blatt5 befinde, dann soll Ordner2 aufgeklappt werden und der neue Zweig steht dort drin. Der selektierte Zweig bleibt aber Blatt5.

Frage: Ist das möglich? Ich müsste nur eine Möglichkeit wissen, wie ich den TreePath direkt auf z.B. [Wurzel, Ordner3, SubOrdner2] stellen kann... Danke für Antworten....
 
Hallo!

Meinst du sowas hier?

Code:
package de.tutorials;

import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Enumeration;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTextField;
import javax.swing.JTree;
import javax.swing.tree.DefaultMutableTreeNode;
import javax.swing.tree.DefaultTreeModel;
import javax.swing.tree.MutableTreeNode;
import javax.swing.tree.TreeModel;

public class TreeExample extends JFrame {

   private JScrollPane scrollPane;

   private JTree jtree;
   
   private JTextField txtAppend;

   private TreeModel model;

   private JButton btnAppend;

   public TreeExample() {
      super("TreeExample");
      setDefaultCloseOperation(EXIT_ON_CLOSE);

      model = new DefaultTreeModel(new DefaultMutableTreeNode("ROOT"));

      appendChildren(model);
      jtree = new JTree(model);
      scrollPane = new JScrollPane(jtree);

      getContentPane().add(scrollPane, BorderLayout.NORTH);
      
      ActionListener handler = new ActionHandler();

      btnAppend = new JButton("Append");
      btnAppend.addActionListener(handler);
      
      txtAppend = new JTextField(10);

      getContentPane().add(txtAppend,BorderLayout.CENTER);
      getContentPane().add(btnAppend, BorderLayout.SOUTH);
      
      pack();
      setVisible(true);
   }

   /**
    * @param model2
    */
   private void appendChildren(TreeModel mod) {
      int nodeCnt = 0;
      MutableTreeNode root = (MutableTreeNode) mod.getRoot();
      root.setUserObject("Wurzel");

      DefaultMutableTreeNode ordner1 = new DefaultMutableTreeNode("Ordner1");
      root.insert(ordner1, nodeCnt++);

      DefaultMutableTreeNode blatt1 = new DefaultMutableTreeNode("Blatt1");
      ordner1.insert(blatt1, 0);

      DefaultMutableTreeNode blatt2 = new DefaultMutableTreeNode("Blatt2");
      ordner1.insert(blatt2, 1);

      DefaultMutableTreeNode ordner2 = new DefaultMutableTreeNode("Ordner2");
      root.insert(ordner2, nodeCnt++);

      DefaultMutableTreeNode ordner3 = new DefaultMutableTreeNode("Ordner3");
      root.insert(ordner3, nodeCnt++);

      DefaultMutableTreeNode subOrdner1 = new DefaultMutableTreeNode("subOrdner1");
      ordner3.insert(subOrdner1, 0);

      DefaultMutableTreeNode subOrdner2 = new DefaultMutableTreeNode("subOrdner2");
      ordner3.insert(subOrdner2, 1);

      DefaultMutableTreeNode blatt3 = new DefaultMutableTreeNode("Blatt3");
      subOrdner2.insert(blatt3, 0);

      DefaultMutableTreeNode blatt4 = new DefaultMutableTreeNode("Blatt4");
      subOrdner2.insert(blatt4, 1);

      DefaultMutableTreeNode ordner4 = new DefaultMutableTreeNode("Ordner4");
      root.insert(ordner4, nodeCnt++);

      DefaultMutableTreeNode blatt5 = new DefaultMutableTreeNode("Blatt5");
      root.insert(blatt5, nodeCnt++);

   }

   public static void main(String[] args) {
      new TreeExample();
   }

   class ActionHandler implements ActionListener {

      public void actionPerformed(ActionEvent e) {
         Object src = e.getSource();
         if (src == btnAppend) {

            Enumeration enumeration = ((DefaultMutableTreeNode) jtree.getModel().getRoot())
                     .depthFirstEnumeration();
            DefaultMutableTreeNode node = null;
            while (enumeration.hasMoreElements()) {
               node = (DefaultMutableTreeNode) enumeration.nextElement();
               if (node.getUserObject().equals("subOrdner2")) {
                  break;
               }
            }
            
            node.insert(new DefaultMutableTreeNode(""+txtAppend.getText(),true),node.getChildCount());
            jtree.updateUI();
         }
      }
   }
}

Gruß Tom
 
Zurück