root / trunk / applications / appgvSIG / src / com / iver / cit / gvsig / project / documents / view / legend / gui / FSymbolTable.java @ 7738
History | View | Annotate | Download (12.8 KB)
1 | 7304 | caballero | /*
|
---|---|---|---|
2 | * Created on 27-abr-2004
|
||
3 | *
|
||
4 | * To change the template for this generated file go to
|
||
5 | * Window>Preferences>Java>Code Generation>Code and Comments
|
||
6 | */
|
||
7 | /* gvSIG. Sistema de Informaci?n Geogr?fica de la Generalitat Valenciana
|
||
8 | *
|
||
9 | * Copyright (C) 2004 IVER T.I. and Generalitat Valenciana.
|
||
10 | *
|
||
11 | * This program is free software; you can redistribute it and/or
|
||
12 | * modify it under the terms of the GNU General Public License
|
||
13 | * as published by the Free Software Foundation; either version 2
|
||
14 | * of the License, or (at your option) any later version.
|
||
15 | *
|
||
16 | * This program is distributed in the hope that it will be useful,
|
||
17 | * but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||
18 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||
19 | * GNU General Public License for more details.
|
||
20 | *
|
||
21 | * You should have received a copy of the GNU General Public License
|
||
22 | * along with this program; if not, write to the Free Software
|
||
23 | * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,USA.
|
||
24 | *
|
||
25 | * For more information, contact:
|
||
26 | *
|
||
27 | * Generalitat Valenciana
|
||
28 | * Conselleria d'Infraestructures i Transport
|
||
29 | * Av. Blasco Ib??ez, 50
|
||
30 | * 46010 VALENCIA
|
||
31 | * SPAIN
|
||
32 | *
|
||
33 | * +34 963862235
|
||
34 | * gvsig@gva.es
|
||
35 | * www.gvsig.gva.es
|
||
36 | *
|
||
37 | * or
|
||
38 | *
|
||
39 | * IVER T.I. S.A
|
||
40 | * Salamanca 50
|
||
41 | * 46005 Valencia
|
||
42 | * Spain
|
||
43 | *
|
||
44 | * +34 963163400
|
||
45 | * dac@iver.es
|
||
46 | */
|
||
47 | package com.iver.cit.gvsig.project.documents.view.legend.gui; |
||
48 | |||
49 | 7738 | jaume | import java.awt.Dimension; |
50 | import java.awt.GridLayout; |
||
51 | 7304 | caballero | |
52 | 7738 | jaume | import javax.swing.JPanel; |
53 | import javax.swing.JScrollPane; |
||
54 | import javax.swing.table.DefaultTableModel; |
||
55 | import javax.swing.table.TableColumn; |
||
56 | 7304 | caballero | |
57 | 7738 | jaume | import com.hardcode.gdbms.engine.values.NullValue; |
58 | import com.iver.andami.PluginServices; |
||
59 | 7659 | fjp | import com.iver.cit.gvsig.fmap.core.ISymbol; |
60 | 7304 | caballero | import com.iver.cit.gvsig.fmap.core.v02.FSymbol; |
61 | import com.iver.cit.gvsig.fmap.rendering.NullIntervalValue; |
||
62 | import com.iver.cit.gvsig.fmap.rendering.NullUniqueValue; |
||
63 | import com.iver.cit.gvsig.project.documents.view.legend.edition.gui.FCellSymbolRenderer; |
||
64 | import com.iver.cit.gvsig.project.documents.view.legend.edition.gui.IntervalCellEditor; |
||
65 | import com.iver.cit.gvsig.project.documents.view.legend.edition.gui.SymbolCellEditor; |
||
66 | import com.iver.cit.gvsig.project.documents.view.legend.edition.gui.ValueCellEditor; |
||
67 | import com.iver.utiles.swing.jtable.JTable; |
||
68 | import com.iver.utiles.swing.jtable.TextFieldCellEditor; |
||
69 | |||
70 | |||
71 | /**
|
||
72 | * JPanel que contiene la tabla con los s?mbolos intervalos o valores y
|
||
73 | * etiquetado de estos valores.
|
||
74 | *
|
||
75 | * @author Vicente Caballero Navarro
|
||
76 | */
|
||
77 | public class FSymbolTable extends JPanel { |
||
78 | private static final long serialVersionUID = 1L; |
||
79 | |||
80 | // private boolean DEBUG = true;
|
||
81 | // private MyTableModel m_TableModel;
|
||
82 | private JTable table; |
||
83 | private String type; |
||
84 | |||
85 | /**
|
||
86 | * Crea un nuevo FSymbolTable.
|
||
87 | *
|
||
88 | * @param type tipo de valor si es intervalo: "intervals" y si es por
|
||
89 | * valores: "values".
|
||
90 | */
|
||
91 | public FSymbolTable(String type) { |
||
92 | super(new GridLayout(1, 0)); |
||
93 | this.type = type;
|
||
94 | table = new JTable(); |
||
95 | table.setModel(new MyTableModel());
|
||
96 | table.setPreferredScrollableViewportSize(new Dimension(480, 110)); |
||
97 | |||
98 | //Create the scroll pane and add the table to it.
|
||
99 | JScrollPane scrollPane = new JScrollPane(table); |
||
100 | |||
101 | //Set up column sizes.
|
||
102 | //initColumnSizes(table);
|
||
103 | setUpSymbolColumn(table, table.getColumnModel().getColumn(0));
|
||
104 | setUpValueColumn(table, table.getColumnModel().getColumn(1));
|
||
105 | setUpLabelColumn(table, table.getColumnModel().getColumn(2));
|
||
106 | |||
107 | //Add the scroll pane to this panel.
|
||
108 | add(scrollPane); |
||
109 | table.setRowSelectionAllowed(true);
|
||
110 | } |
||
111 | |||
112 | /**
|
||
113 | * A?ade una fila al modelo.
|
||
114 | *
|
||
115 | * @param vector Fila en forma de vector de Object para a?adir al modelo.
|
||
116 | */
|
||
117 | public void addRow(Object[] vector) { |
||
118 | MyTableModel m = (MyTableModel) table.getModel(); |
||
119 | m.addRow(vector); |
||
120 | } |
||
121 | |||
122 | /**
|
||
123 | * Elimina la fila que tiene como clave el objeto que se pasa como
|
||
124 | * par?metro.
|
||
125 | *
|
||
126 | * @param obj clave del objeto a eliminar.
|
||
127 | */
|
||
128 | public void removeRow(Object obj) { |
||
129 | MyTableModel m = (MyTableModel) table.getModel(); |
||
130 | |||
131 | for (int i = 0; i < m.getRowCount(); i++) { |
||
132 | if (m.getValueAt(i, 1) instanceof NullUniqueValue || |
||
133 | m.getValueAt(i, 1) instanceof NullIntervalValue) { |
||
134 | m.removeRow(i); |
||
135 | } |
||
136 | } |
||
137 | } |
||
138 | |||
139 | /**
|
||
140 | * Elimina las filas que est?n seleccionadas.
|
||
141 | */
|
||
142 | public void removeSelectedRows() { |
||
143 | if (table.getCellEditor() != null) { |
||
144 | table.getCellEditor().cancelCellEditing(); |
||
145 | } |
||
146 | |||
147 | MyTableModel m = (MyTableModel) table.getModel(); |
||
148 | int[] selectedRows = table.getSelectedRows(); |
||
149 | |||
150 | for (int i = selectedRows.length - 1; i >= 0; i--) { |
||
151 | m.removeRow(selectedRows[i]); |
||
152 | } |
||
153 | } |
||
154 | |||
155 | /**
|
||
156 | * Rellena la tabla con los s?mbolos valores y descripciones que se pasan
|
||
157 | * como par?metro.
|
||
158 | *
|
||
159 | * @param symbols Array de s?mbolos
|
||
160 | * @param values Array de valores.
|
||
161 | * @param descriptions Array de descripciones.
|
||
162 | */
|
||
163 | 7659 | fjp | public void fillTableFromSymbolList(ISymbol[] symbols, Object[] values, |
164 | 7304 | caballero | String[] descriptions) { |
165 | FSymbol theSymbol; |
||
166 | |||
167 | for (int i = 0; i < symbols.length; i++) { |
||
168 | 7659 | fjp | theSymbol = (FSymbol) symbols[i]; |
169 | 7304 | caballero | addTableRecord(theSymbol, values[i], descriptions[i]); |
170 | } |
||
171 | } |
||
172 | |||
173 | /**
|
||
174 | * A?ade una fila con los objetos que se pasan como par?metros.
|
||
175 | *
|
||
176 | * @param symbol s?mbolo de la fila.
|
||
177 | * @param value Valor de la fila.
|
||
178 | * @param description Descripci?n.
|
||
179 | */
|
||
180 | 7659 | fjp | public void addTableRecord(ISymbol symbol, Object value, String description) { |
181 | 7304 | caballero | Object[] theRow = new Object[3]; |
182 | theRow[0] = symbol;
|
||
183 | theRow[1] = value;
|
||
184 | theRow[2] = description;
|
||
185 | addRow(theRow); |
||
186 | } |
||
187 | |||
188 | /**
|
||
189 | * Devuelve el valor a partie del n?mero de fila y columna.
|
||
190 | *
|
||
191 | * @param row n?mero de fila.
|
||
192 | * @param col n?mero de columna.
|
||
193 | *
|
||
194 | * @return Objeto.
|
||
195 | */
|
||
196 | public Object getFieldValue(int row, int col) { |
||
197 | MyTableModel m = (MyTableModel) table.getModel(); |
||
198 | |||
199 | return m.getValueAt(row, col);
|
||
200 | } |
||
201 | |||
202 | /**
|
||
203 | * Devuelve el n?mero total de filas que contiene el modelo.
|
||
204 | *
|
||
205 | * @return N?mero de filas.
|
||
206 | */
|
||
207 | public int getRowCount() { |
||
208 | MyTableModel m = (MyTableModel) table.getModel(); |
||
209 | |||
210 | return m.getRowCount();
|
||
211 | } |
||
212 | |||
213 | /**
|
||
214 | * Elimina todas las filas del modelo.
|
||
215 | */
|
||
216 | public void removeAllItems() { |
||
217 | table.setModel(new MyTableModel());
|
||
218 | setUpSymbolColumn(table, table.getColumnModel().getColumn(0));
|
||
219 | setUpValueColumn(table, table.getColumnModel().getColumn(1));
|
||
220 | setUpLabelColumn(table, table.getColumnModel().getColumn(2));
|
||
221 | } |
||
222 | |||
223 | /**
|
||
224 | * Inicializa el cell editor de tipo descripci?n de la columna que se pasa
|
||
225 | * como par?metro.
|
||
226 | *
|
||
227 | * @param table2 Tabla.
|
||
228 | * @param column Columna.
|
||
229 | */
|
||
230 | public void setUpLabelColumn(JTable table2, TableColumn column) { |
||
231 | TextFieldCellEditor labeleditor = new TextFieldCellEditor();
|
||
232 | column.setCellEditor(labeleditor); |
||
233 | } |
||
234 | |||
235 | /**
|
||
236 | * Inicializa el cell editor de tipo valor de la columna que se pasa como
|
||
237 | * par?metro.
|
||
238 | *
|
||
239 | * @param table2 Tabla.
|
||
240 | * @param column Columna.
|
||
241 | */
|
||
242 | public void setUpValueColumn(JTable table2, TableColumn column) { |
||
243 | if (type.equals("intervals")) { |
||
244 | //FIntervalCellEditor intervaleditor = new FIntervalCellEditor();
|
||
245 | IntervalCellEditor intervaleditor = new IntervalCellEditor();
|
||
246 | column.setCellEditor(intervaleditor); |
||
247 | |||
248 | ///FCellIntervalRenderer renderer = new FCellIntervalRenderer(true);
|
||
249 | ///column.setCellRenderer(renderer);
|
||
250 | } else {
|
||
251 | ///FValueCellEditor valueeditor = new FValueCellEditor();
|
||
252 | ///TextFieldCellEditor valueeditor = new TextFieldCellEditor();
|
||
253 | ValueCellEditor valueeditor = new ValueCellEditor();
|
||
254 | column.setCellEditor(valueeditor); |
||
255 | } |
||
256 | } |
||
257 | |||
258 | /*
|
||
259 | * This method picks good column sizes.
|
||
260 | * If all column heads are wider than the column's cells'
|
||
261 | * contents, then you can just use column.sizeWidthToFit().
|
||
262 | */
|
||
263 | |||
264 | //private void initColumnSizes(JTable table) {
|
||
265 | //MyTableModel model = (MyTableModel) table.getModel();
|
||
266 | //TableColumn column = null;
|
||
267 | //Component comp = null;
|
||
268 | //int headerWidth = 0;
|
||
269 | //int cellWidth = 0;
|
||
270 | //TableCellRenderer headerRenderer = table.getTableHeader()
|
||
271 | // .getDefaultRenderer();
|
||
272 | //}
|
||
273 | |||
274 | /**
|
||
275 | * Inicializa el cell editor de tipo s?mbolo de la columna que se pasa como
|
||
276 | * par?metro.
|
||
277 | *
|
||
278 | * @param table2 Tabla.
|
||
279 | * @param column Columna.
|
||
280 | */
|
||
281 | public void setUpSymbolColumn(JTable table2, TableColumn column) { |
||
282 | //Set up the editor
|
||
283 | column.setMaxWidth(100);
|
||
284 | column.setWidth(60);
|
||
285 | column.setPreferredWidth(60);
|
||
286 | column.setMinWidth(50);
|
||
287 | |||
288 | //FSymbolCellEditor symboleditor = new FSymbolCellEditor();
|
||
289 | SymbolCellEditor symboleditor = new SymbolCellEditor();
|
||
290 | column.setCellEditor(symboleditor); |
||
291 | |||
292 | FCellSymbolRenderer renderer = new FCellSymbolRenderer(true); |
||
293 | column.setCellRenderer(renderer); |
||
294 | } |
||
295 | |||
296 | /**
|
||
297 | * Modelo que propio que se aplica a la tabla.
|
||
298 | *
|
||
299 | * @author Vicente Caballero Navarro
|
||
300 | */
|
||
301 | class MyTableModel extends DefaultTableModel { /** |
||
302 | *
|
||
303 | */
|
||
304 | |||
305 | private static final long serialVersionUID = 1L; |
||
306 | |||
307 | // AbstractTableModel {
|
||
308 | private String[] columnNames = { |
||
309 | PluginServices.getText(this, "Simbolo"), |
||
310 | PluginServices.getText(this, "Valor"), |
||
311 | PluginServices.getText(this, "Etiqueta") |
||
312 | }; |
||
313 | |||
314 | /**
|
||
315 | * Devuelve el n?mero de columnas.
|
||
316 | *
|
||
317 | * @return N?mero de columnas.
|
||
318 | */
|
||
319 | public int getColumnCount() { |
||
320 | return columnNames.length;
|
||
321 | } |
||
322 | |||
323 | /**
|
||
324 | * Devuelve el String del valor de la columna.
|
||
325 | *
|
||
326 | * @param col N?mero de columna.
|
||
327 | *
|
||
328 | * @return Nombre de la columna.
|
||
329 | */
|
||
330 | public String getColumnName(int col) { |
||
331 | return columnNames[col];
|
||
332 | } |
||
333 | |||
334 | /*
|
||
335 | * JTable uses this method to determine the default renderer/
|
||
336 | * editor for each cell. If we didn't implement this method,
|
||
337 | * then the last column would contain text ("true"/"false"),
|
||
338 | * rather than a check box.
|
||
339 | */
|
||
340 | public Class getColumnClass(int c) { |
||
341 | if (getValueAt(0, c) == null) { |
||
342 | return NullValue.class;
|
||
343 | } |
||
344 | |||
345 | return getValueAt(0, c).getClass(); |
||
346 | } |
||
347 | |||
348 | /*
|
||
349 | * Don't need to implement this method unless your table's
|
||
350 | * editable.
|
||
351 | */
|
||
352 | public boolean isCellEditable(int row, int col) { |
||
353 | //Note that the data/cell address is constant,
|
||
354 | //no matter where the cell appears onscreen.
|
||
355 | //if (col > 0) {
|
||
356 | return true; |
||
357 | |||
358 | /* } else {
|
||
359 | return false;
|
||
360 | } */
|
||
361 | } |
||
362 | |||
363 | /*
|
||
364 | * Don't need to implement this method unless your table's
|
||
365 | * data can change.
|
||
366 | */
|
||
367 | /* public void setValueAt(Object value, int row, int col) {
|
||
368 | if (DEBUG) {
|
||
369 | System.out.println("Setting value at " + row + "," + col
|
||
370 | + " to " + value
|
||
371 | + " (an instance of "
|
||
372 | + value.getClass() + ")");
|
||
373 | }
|
||
374 | // FSymbol theSymbol;
|
||
375 | switch (col)
|
||
376 | {
|
||
377 | case 0: // Simbolo
|
||
378 | // m_FRenderer.setValueSymbol(row,(FSymbol) value);
|
||
379 | break;
|
||
380 | case 1: // Clave
|
||
381 | FInterval newInterval = FInterval.parseString((String) value);
|
||
382 | this.setValueAt(newInterval,row,col);
|
||
383 | break;
|
||
384 | case 2: // Etiqueta
|
||
385 | // theSymbol = m_FRenderer.getSymbolByID(row);
|
||
386 | // theSymbol.m_Descrip = (String) value;
|
||
387 | |||
388 | }
|
||
389 | // data[row][col] = value;
|
||
390 | fireTableCellUpdated(row, col);
|
||
391 | } */
|
||
392 | /* private void printDebugData() {
|
||
393 | int numRows = getRowCount();
|
||
394 | int numCols = getColumnCount();
|
||
395 | for (int i=0; i < numRows; i++) {
|
||
396 | System.out.print(" row " + i + ":");
|
||
397 | for (int j=0; j < numCols; j++) {
|
||
398 | System.out.print(" " + data[i][j]);
|
||
399 | }
|
||
400 | System.out.println();
|
||
401 | }
|
||
402 | System.out.println("--------------------------");
|
||
403 | } */
|
||
404 | } |
||
405 | } |