package de.zigapeda.flowspring.gui.treetable; import java.awt.Component; import java.awt.Graphics; import javax.swing.JTable; import javax.swing.JTree; import javax.swing.table.TableCellRenderer; import javax.swing.tree.DefaultTreeCellRenderer; import javax.swing.tree.TreeModel; public class TreeTableCellRenderer extends JTree implements TableCellRenderer { private static final long serialVersionUID = 4749467001645606833L; protected int visibleRow; private TreeTable treeTable; public TreeTableCellRenderer(TreeTable treeTable, TreeModel model) { super(model); DefaultTreeCellRenderer renderer = new DefaultTreeCellRenderer() { private static final long serialVersionUID = 1L; { setLeafIcon(null); setOpenIcon(null); setClosedIcon(null); } }; super.setCellRenderer(renderer); super.setRootVisible(false); this.treeTable = treeTable; // this.addTreeExpansionListener(new TreeExpansionListener() { // // @Override // public void treeExpanded(TreeExpansionEvent event) { // System.out.println("bla"); // } // // @Override // public void treeCollapsed(TreeExpansionEvent event) { // // TODO Auto-generated method stub // // } // }); // Setzen der Zeilenhoehe fuer die JTable // Muss explizit aufgerufen werden, weil treeTable noch // null ist, wenn super(model) setRowHeight aufruft! setRowHeight(getRowHeight()); } /** * Tree und Table muessen die gleiche Hoehe haben. */ public void setRowHeight(int rowHeight) { if (rowHeight > 0) { super.setRowHeight(rowHeight); if (treeTable != null && treeTable.getRowHeight() != rowHeight) { treeTable.setRowHeight(getRowHeight()); } } } /** * Tree muss die gleiche Hoehe haben wie Table. */ public void setBounds(int x, int y, int w, int h) { super.setBounds(x, 0, w, treeTable.getHeight()); } /** * Sorgt fuer die Einrueckung der Ordner. */ public void paint(Graphics g) { g.translate(0, -visibleRow * getRowHeight()); super.paint(g); } /** * Liefert den Renderer mit der passenden Hintergrundfarbe zurueck. */ public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) { if (isSelected) setBackground(table.getSelectionBackground()); else setBackground(table.getBackground()); visibleRow = row; return this; } }