Statistics
| Revision:

root / trunk / libraries / libUI / src / org / gvsig / gui / beans / swing / treeTable / TreeTable.java @ 8238

History | View | Annotate | Download (4.93 KB)

1
package org.gvsig.gui.beans.swing.treeTable;
2

    
3
import java.awt.Component;
4
import java.awt.Dimension;
5

    
6
import javax.swing.Icon;
7
import javax.swing.JTable;
8
import javax.swing.table.TableCellEditor;
9
import javax.swing.table.TableModel;
10
import javax.swing.tree.DefaultTreeCellRenderer;
11
import javax.swing.tree.DefaultTreeSelectionModel;
12
import javax.swing.tree.TreeModel;
13

    
14
/* gvSIG. Sistema de Informaci?n Geogr?fica de la Generalitat Valenciana
15
 *
16
 * Copyright (C) 2004 IVER T.I. and Generalitat Valenciana.
17
 *
18
 * This program is free software; you can redistribute it and/or
19
 * modify it under the terms of the GNU General Public License
20
 * as published by the Free Software Foundation; either version 2
21
 * of the License, or (at your option) any later version.
22
 *
23
 * This program is distributed in the hope that it will be useful,
24
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
25
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
26
 * GNU General Public License for more details.
27
 *
28
 * You should have received a copy of the GNU General Public License
29
 * along with this program; if not, write to the Free Software
30
 * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
31
 *
32
 * For more information, contact:
33
 *
34
 *  Generalitat Valenciana
35
 *   Conselleria d'Infraestructures i Transport
36
 *   Av. Blasco Ib??ez, 50
37
 *   46010 VALENCIA
38
 *   SPAIN
39
 *
40
 *      +34 963862235
41
 *   gvsig@gva.es
42
 *      www.gvsig.gva.es
43
 *
44
 *    or
45
 *
46
 *   IVER T.I. S.A
47
 *   Salamanca 50
48
 *   46005 Valencia
49
 *   Spain
50
 *
51
 *   +34 963163400
52
 *   dac@iver.es
53
 */
54
/* CVS MESSAGES:
55
 *
56
 * $Id: TreeTable.java 8238 2006-10-23 11:13:55Z jorpiell $
57
 * $Log$
58
 * Revision 1.2  2006-10-23 11:13:55  jorpiell
59
 * A?adida la posibilidad de recargar el ?rbol tantas veces como queramos
60
 *
61
 * Revision 1.1  2006/10/23 08:18:39  jorpiell
62
 * A?adida la clase treetable
63
 *
64
 *
65
 */
66
/**
67
 * To create a new tree table it is necessary to create a new
68
 * treetablemodel. See the ExampleModel.java.
69
 * @author Jorge Piera Llodr? (piera_jor@gva.es)
70
 */
71

    
72
public class TreeTable extends JTable {
73
        protected TreeTableCellRenderer tree;
74
        
75
        public TreeTable(TreeTableModel treeTableModel) {
76
                super();
77
            setModel(treeTableModel);  
78
        }
79
        
80
        public void setModel(TreeTableModel treeTableModel){
81
                // Create the tree. It will be used as a renderer and editor. 
82
                tree = new TreeTableCellRenderer(treeTableModel,this); 
83
                
84
                // Install a tableModel representing the visible rows in the tree. 
85
                super.setModel(new TreeTableModelAdapter(treeTableModel, tree));
86
                
87
                // Force the JTable and JTree to share their row selection models. 
88
                tree.setSelectionModel(new DefaultTreeSelectionModel() { 
89
                        // Extend the implementation of the constructor, as if: 
90
                        /* public this() */ {
91
                                setSelectionModel(listSelectionModel); 
92
                        } 
93
                }); 
94
                // Make the tree and table row heights the same. 
95
                tree.setRowHeight(getRowHeight());
96
                
97
                // Install the tree editor renderer and editor. 
98
                setDefaultRenderer(TreeTableModel.class, tree); 
99
                setDefaultEditor(TreeTableModel.class, new TreeTableCellEditor());  
100
                
101
                setShowGrid(false);
102
                setIntercellSpacing(new Dimension(0, 0)); 
103
        }
104
        
105
        /* Workaround for BasicTableUI anomaly. Make sure the UI never tries to 
106
         * paint the editor. The UI currently uses different techniques to 
107
         * paint the renderers and editors and overriding setBounds() below 
108
         * is not the right thing to do for an editor. Returning -1 for the 
109
         * editing row in this case, ensures the editor is never painted. 
110
         */
111
        public int getEditingRow() {
112
                return (getColumnClass(editingColumn) == TreeTableModel.class) ? -1 : editingRow;  
113
        }
114

    
115
        
116
        public class TreeTableCellEditor extends AbstractCellEditor implements TableCellEditor {
117
                public Component getTableCellEditorComponent(JTable table, Object value,
118
                                boolean isSelected, int r, int c) {
119
                        return tree;
120
                }
121
        }
122
        
123
        /**
124
         * Deletes all the tree icons
125
         *
126
         */
127
        public void deleteIcons(){
128
                setLeafIcon(null);
129
            setClosedIcon(null);
130
            setOpenIcon(null);
131
        }
132
        
133
        /**
134
         * Sets the root visible
135
         */
136
        public void setRootVisible(boolean rootVisible){
137
                tree.setRootVisible(rootVisible);
138
        }
139
        
140
        /**
141
         * Sets the leaftIcon
142
         * @param newIcon
143
         */
144
        public void setLeafIcon(Icon newIcon){
145
                TreeTableCellRenderer renderer = (TreeTableCellRenderer)getTree();
146
                DefaultTreeCellRenderer treeRenderer = (DefaultTreeCellRenderer)renderer.getCellRenderer();
147
                treeRenderer.setLeafIcon(newIcon);
148
        }
149
        
150
        /**
151
         * Sets the open icon
152
         * @param newIcon
153
         */
154
        public void setOpenIcon(Icon newIcon){
155
                TreeTableCellRenderer renderer = (TreeTableCellRenderer)getTree();
156
                DefaultTreeCellRenderer treeRenderer = (DefaultTreeCellRenderer)renderer.getCellRenderer();
157
                treeRenderer.setOpenIcon(newIcon);
158
        }
159
        
160
        /**
161
         * Sets the close icon
162
         * @param newIcon
163
         */
164
        public void setClosedIcon(Icon newIcon){
165
                TreeTableCellRenderer renderer = (TreeTableCellRenderer)getTree();
166
                DefaultTreeCellRenderer treeRenderer = (DefaultTreeCellRenderer)renderer.getCellRenderer();
167
                treeRenderer.setClosedIcon(newIcon);
168
        }
169

    
170
        public Component getTree() {
171
                return tree;
172
        }
173
        
174
}
175