JTreeTable von SUN -> wird mir nur als Tabelle angezeigt

Firefork

Grünschnabel
Hallo,

versuche anhand des JTreeTable-Beispiels von SUN das Object in meine Anwendung zu integrieren. Leider erfolglos. Ich habe mir erstmal ein Testprogramm geschrieben, doch dort werden mir alle Einträge als normale Tabelle und nicht als TreeView (in der ersten Spalte) angezeigt (siehe Bild im Anhang). Hier der Code:

Code:
/*
 * NewJFrame.java
 *
 * Created on 30. Juli 2007, 08:24
 */

package jtreetable_test;

import java.awt.Dimension;
import javax.swing.JScrollPane;
import javax.swing.tree.DefaultMutableTreeNode;

/**
 *
 * @author  andreas
 */
public class NewJFrame extends javax.swing.JFrame {
    
    
    
    /** Creates new form NewJFrame */
    public NewJFrame() {
        initComponents();
        
        DefaultMutableTreeNode rootNode = new DefaultMutableTreeNode(new TDatensatz("Root","nix",0));

        for (int a = 1; a <= 10; a++) {
          DefaultMutableTreeNode node = new DefaultMutableTreeNode(new TDatensatz("Eintrag "+Integer.toString(a),"Bezeichnung "+Integer.toString(a),a));
          rootNode.add(node);
          
          for (int b = 1; b <= a; b++) {
            DefaultMutableTreeNode nodeChild = new DefaultMutableTreeNode(new TDatensatz("Child-Eintrag "+Integer.toString(b),"Bezeichnung "+Integer.toString(b)+" von "+node.toString(),a));
            node.add(nodeChild);              
          }
          
        }
        
        MyTreeTableModel model = new MyTreeTableModel(rootNode);
        JTreeTable treetable = new JTreeTable(model);
        treetable.setPreferredSize(new Dimension(300,200));

        add(new JScrollPane(treetable));

        
    }
    
    /** This method is called from within the constructor to
     * initialize the form.
     * WARNING: Do NOT modify this code. The content of this method is
     * always regenerated by the Form Editor.
     */
    // <editor-fold defaultstate="collapsed" desc=" Generated Code ">                          
    private void initComponents() {

        setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
    }// </editor-fold>                        
    
    /**
     * @param args the command line arguments
     */
    public static void main(String args[]) {
        java.awt.EventQueue.invokeLater(new Runnable() {
            public void run() {
                new NewJFrame().setVisible(true);
            }
        });
    }
    
    // Variables declaration - do not modify                     
    // End of variables declaration                   

    public class MyTreeTableModel extends AbstractTreeTableModel {
        
        String[] spalten_namen = {"Eintrag","Bezeichnung"};
        
        public MyTreeTableModel(Object root) {
            super(root);
        }
        
        public int getColumnCount() {
            return spalten_namen.length;
        }

        public boolean isLeaf(Object node) {
            return ((DefaultMutableTreeNode)node).getChildCount() == 0;
        }
        
        public Object getValueAt(Object node, int column) {
            DefaultMutableTreeNode treenode = (DefaultMutableTreeNode)node;
            TDatensatz ds = (TDatensatz) treenode.getUserObject();
            String ergebnis = "";
            switch (column) {
                case 0 : 
                    ergebnis = ds.toString(); 
                    break;
                case 1 : 
                    ergebnis = ds.getFeld().toString();
                    break;
            }
            return ergebnis;
        }

        public Object getChild(Object parent, int index) {
            DefaultMutableTreeNode treenode = (DefaultMutableTreeNode)parent;
            System.out.print(treenode.toString()+": getChild = ");
            System.out.println(index);
            return treenode.getChildAt(index);
        }

        public int getChildCount(Object parent) {
            DefaultMutableTreeNode treenode = (DefaultMutableTreeNode)parent;
            System.out.print(treenode.toString()+": Count = ");
            System.out.println(treenode.getChildCount());
            return treenode.getChildCount();
        }

        public String getColumnName(int column) {
            return spalten_namen[column];
        }
        
        
        
    }

    
}

Ich habe mir die andere Frage zu JTreeTable in diesem Forum ebenfalls angeschaut. Das Beispiel von http://www.toedter.com/de/advancedswing.html finde ich für den Anfang ebenfalls zu überfrachtet und das andere Link existiert nicht mehr.

Kann mir jemand weiterhelfen?
 

Anhänge

  • Bildschirmfoto.png
    Bildschirmfoto.png
    6,7 KB · Aufrufe: 150
Habe das erste Prioblem gelöst: Es in meiner Klasse MyTreeTableModel noch die Übergabe der Spalten-Typen gefehlt. Hier die neue innere Klasse:

Code:
    public class MyTreeTableModel extends AbstractTreeTableModel {
        
        protected String[] spalten_namen = {"Eintrag","Bezeichnung"};
        protected Class[]  spalten_typen = {TreeTableModel.class, String.class};
        
        public MyTreeTableModel(Object root) {
            super(root);
        }
        
        public int getColumnCount() {
            return spalten_namen.length;
        }

        public boolean isLeaf(Object node) {
            return ((DefaultMutableTreeNode)node).getChildCount() == 0;
        }
        
        public Object getValueAt(Object node, int column) {
            DefaultMutableTreeNode treenode = (DefaultMutableTreeNode)node;
            TDatensatz ds = (TDatensatz) treenode.getUserObject();
            String ergebnis = "";
            switch (column) {
                case 0 : 
                    ergebnis = ds.toString(); 
                    break;
                case 1 : 
                    ergebnis = ds.getFeld().toString();
                    break;
            }
            return ergebnis;
        }

        public Object getChild(Object parent, int index) {
            DefaultMutableTreeNode treenode = (DefaultMutableTreeNode)parent;
            System.out.print(treenode.toString()+": getChild = ");
            System.out.println(index);
            return treenode.getChildAt(index);
        }

        public int getChildCount(Object parent) {
            DefaultMutableTreeNode treenode = (DefaultMutableTreeNode)parent;
            System.out.print(treenode.toString()+": Count = ");
            System.out.println(treenode.getChildCount());
            return treenode.getChildCount();
        }

        public String getColumnName(int column) {
            return spalten_namen[column];
        }

        public Class getColumnClass(int column) {
            return spalten_typen[column];
        }
        
    }

Jetzt zeigt er die TreeNodes richtig an. :D
 
Zurück