Swing JTable small test (add two or more drop-down boxes to one cell)

\

View Code

 1 package com.copy;
  2 
  3 import java.awt.BorderLayout;
  4 import java.awt.Color;
  5 import java.awt.Component;
  6 import java.awt.event.ActionEvent;
  7 import java.awt.event.ActionListener;
  8 import java.util.Vector;
  9 
 10 import javax.swing.DefaultCellEditor;
 11 import javax.swing.JButton;
 12 import javax.swing.JComboBox;
 13 import javax.swing.JFrame;
 14 import javax.swing.JPanel;
 15 import javax.swing.JScrollPane;
 16 import javax.swing.JTable;
 17 import javax.swing.ListSelectionModel;
 18 import javax.swing.event.ListSelectionEvent;
 19 import javax.swing.event.ListSelectionListener;
 20 import javax.swing.table.AbstractTableModel;
 21 import javax.swing.table.DefaultTableCellRenderer;
 22 import javax.swing.table.TableColumnModel;
 twenty three 
 twenty four /**
 25*
 26 * @Project name: TestTable
 27 * @Class name: Test
 28 * @Class description: Swing three-layer demonstration and Jtable small test
 29 * @Creator: wangyongfei
 30 * @Creation time: 2012-9-18 10:57:40 am
 31 * @Modifier: wangyongfei
 32 * @Modification time: 2012-9-18 10:57:40 am
 33 * @Modification remarks:
 34 * @version
 35 */
 36 public class TestTable {
 37
 38 private JFrame frame;
 39 private JTable table;
 40 private Table_Model model;
 41 private JScrollPane s_pan;
 42 private JButton btnDelete;
 43 private JButton btnAdd;
 44 private JButton btnSave;
 45 private JPanel pane;
 46 private JComboBox sexBox;
 47 private JBoxTestCell jc;
 48
 49 public TestTable() {
 50 frame = new JFrame("JTable Test");
 51 pane = new JPanel();
 52 btnDelete = new JButton("Delete");
 53 btnDelete.addActionListener(new ActionListener() {
 54 public void actionPerformed(ActionEvent e) {
 55 int row = table.getSelectedRow();
 56 removeData(row);
 57 }
 58 });
 59 btnAdd = new JButton("Add");
 60 btnAdd.addActionListener(new ActionListener() {
 61 public void actionPerformed(ActionEvent e) {
 62 addData();
 63}
 64 });
 65 btnSave = new JButton("Save");
 66 btnSave.addActionListener(new ActionListener() {
 67 public void actionPerformed(ActionEvent e) {
 68 saveData();
 69 }
 70 });
 71 pane.add(btnDelete);
 72 pane.add(btnAdd);
 73pane.add(btnSave);
 74 model = new Table_Model(20);
 75 table = new JTable(model);
 76
 77 //Get the selected line number
 78 ListSelectionModel model = table.getSelectionModel();
 79 model.addListSelectionListener(new ListSelectionListener() {
 80 @Override
 81 public void valueChanged(ListSelectionEvent e) {
 82 if(table.getSelectedRowCount() > 0)
 83 System.out.println(table.getSelectedRow());
 84}
 85 });
 86 table.setRowHeight(30);
 87 table.setGridColor(Color.red);
 88 table.setBackground(Color.white);
 89 try {
 90 table.setDefaultRenderer(Class.forName("java.lang.Object"), new TableRender());
 91 } catch (ClassNotFoundException e1) {
 92 e1.printStackTrace();
 93}
 94
 95 jc = new JBoxTestCell();
 96 TableColumnModel tcm = table.getColumnModel();
 97 tcm.getColumn(3).setCellEditor(jc);
 98 tcm.getColumn(0).setPreferredWidth(50);
 99 tcm.getColumn(1).setPreferredWidth(100);
100
101 String[] sex = { "Female", "Male", "Unknown" };
102 sexBox = new JComboBox(sex);
103 sexBox.setSelectedIndex(0);
104 TableColumnModel sexT = table.getColumnModel();
105 sexT.getColumn(2).setCellEditor(new DefaultCellEditor(sexBox));
106
107 s_pan = new JScrollPane(table);
108 frame.getContentPane().add(s_pan, BorderLayout.CENTER);
109 frame.getContentPane().add(pane, BorderLayout.NORTH);
110 frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
111 frame.setSize(300, 200);
112 frame.setVisible(true);
113
114 }
115
116 private void addData() {
117 Object[] str = {"Xiao Zhang", "", ""};
118 model.addRow(str);
119 table.updateUI();
120 }
121
122/**
123 * Clear selected rows
124 * @param row
125 */
126 private void removeData(int row) {
127 model.removeRows(row);
128 table.updateUI();
129 }
130
131/**
132 * Print to console
133 */
134 private void saveData() {
135
136 int col = model.getColumnCount();
137 int row = model.getRowCount();
138 int i = 0;
139 while(i < col){
140 System.out.print(model.getColumnName(i) + "\t");
141i++;
142 }
143 System.out.print("\r\\
");
144 int k = 0, j = 0;
145 while(k < row){
146 while(j < col){
147 System.out.print(model.getValueAt(k, j) + "\t");
148 j + + ;
149 }
150k++;
151 }
152 System.out.print("\r\\
");
153 }
154
155 public static void main(String args[]) {
156 new TestTable();
157 }
158
159 }
160
161
162/**
163 *Model
164 */
165 class Table_Model extends AbstractTableModel {
166 private Vector vector = null;
167 private String[] titleName = { "number", "name", "gender", "hobby" };
168 public Table_Model() {
169 vector = new Vector();
170 }
171 public Table_Model(int count) {
172 vector = new Vector(count);
173}
174
175 public void addRow(Object[] str) {
176
177 Vector v = new Vector(titleName.length);
178 v.add(0, new Integer(vector.size()));
179 for(int i = 1; i <= str.length; i + + ){
180 v.add(i, str[i-1]);
181
182 }
183 vector.add(v);
184}
185
186/**
187 * Delete selected rows
188 * @param row
189 */
190 public void removeRows(int row) {
191 vector.remove(row);
192 }
193
194/**
195 * Whether it is editable
196 */
197 public boolean isCellEditable(int rowIndex, int columnIndex) {
198 if (columnIndex == 0) {
199 return false;
200 }
201 return true;
202 }
203
204/**
205 * Make the modified content effective
206 */
207 public void setValueAt(Object value, int row, int col) {
208 ((Vector) vector.get(row)).remove(col);
209 ((Vector) vector.get(row)).add(col, value);
210 this.fireTableCellUpdated(row, col); //Notify all listeners that the cell value at [row, column] has been updated.
211 }
212
213 public String getColumnName(int col) {
214 return titleName[col];
215 }
216
217 public int getColumnCount() {
218 return titleName.length;
219 }
220
221 public int getRowCount() {
222 return vector.size();
223 }
224
225/**
226 * Returns the cell value at col and row positions.
227 */
228 public Object getValueAt(int row, int col) {
229 return ((Vector) vector.get(row)).get(col);
230 }
231
232/**
233 * Return the most specific superclass for all cell values in the column
234 * Return data type
235 */
236 public Class getColumnClass(int col) {
237 return getValueAt(0, col).getClass();
238 }
239
240 }
241/**
242 * View processing
243 */
244 class TableRender extends DefaultTableCellRenderer{
245 private int row;
246 private int column;
247 private String value;
248 public Component getTableCellRendererComponent(JTable table, Object value,
249 boolean isSelected, boolean hasFocus, int row, int column) {
250 Component cell = super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column);
251 if(hasFocus){
252 this.row = row;
253 this.column = column;
254 this.value = value.toString();
255 // cell.setBackground(Color.RED);
256 // cell.setForeground(Color.BLACK);
257 }
258 return cell;
259 }
260 public int getSelectedRow(){
261 return row;
262 }
263 public int getSelectedColumn(){
264 return column;
265 }
266 public String getSelectedValue(){
267 return value;
268 }
269
270}

View Code

 1 package com.copy;
 2 
 3 import java.awt.BorderLayout;
 4 import java.awt.Component;
 5 import java.awt.Dimension;
 6 import java.util.EventObject;
 7
 8 import javax.swing.AbstractCellEditor;
 9 import javax.swing.JComboBox;
10 import javax.swing.JPanel;
11 import javax.swing.JTable;
12 import javax.swing.table.TableCellEditor;
13
14 public class JBoxTestCell extends AbstractCellEditor implements
15 TableCellEditor {
16 int row;
17 private JTable table;
18 private JPanel p1;
19 private JComboBox jbxType1;
20 private JComboBox jbxType2;
21 private Object val = null;
22 public JBoxTestCell() {
23 p1 = new JPanel(new BorderLayout());
24 p1.setPreferredSize(new Dimension(300, 30));
25 String[] interest1 = { "Football 1", "Swimming 1", "Latin Dance 1", "Fencing 1", "Equestrian 1", "Reading 1", "Travel 1" };
26 jbxType1 = new JComboBox(interest1);
27 jbxType1.setPreferredSize(new Dimension(80,25));
28
29 String[] interest2 = { "Football 2", "Swimming 2", "Latin Dance 2", "Fencing 2", "Equestrian 2", "Reading 2", "Travel 2" };
30 jbxType2 = new JComboBox(interest2);
31 jbxType2.setPreferredSize(new Dimension(80,25));
32 jbxType1.setSelectedIndex(0);
33 jbxType2.setSelectedIndex(0);
34 p1.add(jbxType1, BorderLayout.WEST);
35 p1.add(jbxType2, BorderLayout.EAST);
36}
37
38 @Override
39 public boolean isCellEditable(EventObject anEvent) {
40 return true;
41 }
42 public void showSave() {
43 jbxType1.setVisible(true);
44 jbxType2.setVisible(true);
45 }
46
47 public Object getCellEditorValue() {
48 String v1 = jbxType1.getSelectedItem().toString();
49 String v2 = jbxType2.getSelectedItem().toString();
50 return v1 + ", " + v2;
51
52 }
53
54 public Component getTableCellEditorComponent(JTable table, Object value,
55 boolean isSelected, int row, int column) {
56 this.table = table;
57 this.row = row;
58 val = value;
59 return this.p1;
60 }
61}

Interface display: