Statistics
| Revision:

gvsig-geoprocess / org.gvsig.geoprocess / trunk / org.gvsig.geoprocess / org.gvsig.geoprocess.algorithm / org.gvsig.geoprocess.algorithm.groupby / src / test / java / org / gvsig / geoprocess / algorithm / groupby / TestTableModel.java @ 356

History | View | Annotate | Download (4.84 KB)

1
package org.gvsig.geoprocess.algorithm.groupby;
2
import java.awt.BorderLayout;
3
import java.awt.Component;
4
import java.awt.event.ActionEvent;
5
import java.awt.event.ActionListener;
6
import java.util.ArrayList;
7
import java.util.List;
8

    
9
import javax.swing.JButton;
10
import javax.swing.JComboBox;
11
import javax.swing.JFrame;
12
import javax.swing.JTable;
13
import javax.swing.event.TableModelEvent;
14
import javax.swing.event.TableModelListener;
15
import javax.swing.table.DefaultTableModel;
16
import javax.swing.table.TableCellEditor;
17
import javax.swing.table.TableCellRenderer;
18
import javax.swing.table.TableColumn;
19

    
20
import org.gvsig.gui.beans.swing.treeTable.AbstractCellEditor;
21

    
22
public class TestTableModel extends JFrame implements TableModelListener, ActionListener {
23
        private static final long serialVersionUID = -7971006561681605303L;
24
        private int            w                   = 400;
25
        private int            h                   = 200;
26
        private JTable         table               = null;
27
        private final String[] opList              = { "first", "sum", "average", "max", "min", "last"};
28
        private final String[] columnNames         = { "Field", "Function" };
29
        private JButton        but                 = null;
30
        
31
        public class GroupByTableModel extends DefaultTableModel {
32
                final private static long       serialVersionUID   = -3370601314380922368L;
33
                private List<JComboBox>         combos             = null;
34
                
35
                public GroupByTableModel(String[] columnNames, List<JComboBox> c) {
36
                        super(new Object[0][columnNames.length], columnNames);
37
                        this.combos = c;
38
                }
39

    
40
                public Object[] getNewLine() {
41
                        return new Object[] { "", new Integer(0)};
42
                }
43
                
44
                public boolean isCellEditable(int row, int col) {
45
                        return (col == 1) ? true : false;
46
                }
47
                
48
                public void addRow(Object[] list) {
49
                        if(list.length <= 2 && list[1] instanceof Integer && list[0] instanceof String) {
50
                                super.addRow(list);
51
                        }
52
                }
53

    
54
                public Object getValueAt(int row, int column) {
55
                        Object obj = super.getValueAt(row, column);
56
                        if(column == 1)
57
                                if(row < combos.size())
58
                                        return combos.get(row).getSelectedIndex();
59
                        return obj;
60
                }
61
        }
62
        
63
        class GroupByEditor extends AbstractCellEditor implements TableCellEditor {
64
                private List<JComboBox>         combos             = null;
65
                
66
                public GroupByEditor(List<JComboBox> c) {
67
                        combos = c;
68
                }
69
                
70
                private void loadCombo(JComboBox combo) {
71
                        for (int i = 0; i < opList.length; i++) {
72
                                combo.addItem(opList[i]);
73
                        }
74
                }
75
                
76
                public Component getTableCellEditorComponent(JTable table,
77
                                Object value, boolean isSelected, int row, int column) {
78
                        if(value instanceof Integer) {
79
                                if(row < combos.size()) {
80
                                        JComboBox c = combos.get(row);
81
                                        c.setSelectedIndex((Integer)value);
82
                                        return c;
83
                                } else {
84
                                        for (int i = combos.size(); i <= row; i++) {
85
                                                JComboBox c = new JComboBox();
86
                                                loadCombo(c);
87
                                                combos.add(c);
88
                                                c.setSelectedIndex((Integer)value);
89
                                        }
90
                                        JComboBox c = combos.get(row);
91
                                        c.setSelectedIndex((Integer)value);
92
                                        return c;
93
                                }
94
                        }
95
                        return null;
96
                }
97
                
98
        }
99
        
100
        class GroupByRenderer extends JComboBox implements TableCellRenderer {
101
                private static final long            serialVersionUID   = 1L;
102
                
103
                public GroupByRenderer() {
104
                        for (int i = 0; i < opList.length; i++) {
105
                                this.addItem(opList[i]);
106
                        }
107
                }
108
                
109
                public Component getTableCellRendererComponent(JTable table,
110
                                Object value, boolean isSelected, boolean hasFocus, int row,
111
                                int column) {
112
                        return this;
113
                }
114
        }
115
        
116
        public TestTableModel() {
117
                super("TestValidationTableModel");
118
                
119
                List<JComboBox> combos = new ArrayList<JComboBox>();
120
                GroupByTableModel model = new GroupByTableModel(columnNames, combos);
121
                
122
                table = new JTable(model);
123
                table.setRowHeight(24);
124
                TableColumn column = table.getColumnModel().getColumn(1);
125
                GroupByRenderer render = new GroupByRenderer();
126
                column.setCellRenderer(render);
127
                column.setCellEditor(new GroupByEditor(combos));
128
        
129
                loadData();
130
                
131
                table.getModel().addTableModelListener(this);
132
                getContentPane().setLayout(new BorderLayout());
133
                getContentPane().add(table, BorderLayout.CENTER);
134
                but = new JButton();
135
                but.addActionListener(this);
136
                getContentPane().add(but, BorderLayout.SOUTH);
137
                setSize(w, h);
138
                setVisible(true);
139
        }
140
        
141
        private void loadData() {
142
                Object row[] = new Object[2];
143
                row[0] = "Line 1";
144
                row[1] = 1;
145
                ((GroupByTableModel)table.getModel()).addRow(row);
146
                
147
                row[0] = "Line 2";
148
                row[1] = 2;
149
                ((GroupByTableModel)table.getModel()).addRow(row);
150
        }
151

    
152
        public static void main(String[] args) {
153
                new TestTableModel();
154
        }
155

    
156
        public void tableChanged(TableModelEvent e) {
157
                System.out.println("Ha cambiado");
158
        }
159

    
160
        public void actionPerformed(ActionEvent e) {
161
                for (int i = 0; i < ((GroupByTableModel)table.getModel()).getRowCount(); i++) {
162
                        Object v1 = ((GroupByTableModel)table.getModel()).getValueAt(i, 0);
163
                        Object v2 = ((GroupByTableModel)table.getModel()).getValueAt(i, 1);
164
                        System.out.println(v1 + "..." + v2);
165
                }
166
                
167
        }
168
}