在一些书上,看见表格中有多种选项,可以供使用者选择?那么在java中如何实现呢?今天通过查阅资料,终于实现了,嘿嘿,所以分享下。
关键例子代码:
String[] states = {"缺货","需要进货","不需要进货"};
String[] header = {"书名","状态"};
model = new DefaultTableModel();
model.setColumnIdentifiers(header); //设置表头
model.addRow(new Object[]{"java",states[0]});
model.addRow(new Object[]{"c++",states[0]});
table = new JTable(model); // 创建表格
// 获得表头,设置表头样式
JTableHeader head = table.getTableHeader();
head.setFont(new Font("微软雅黑", Font.PLAIN, 15));
head.setPreferredSize(new Dimension(head.getWidth(), 25));//设置表头长度和高度
// 设置表体样式
table.setFont(new Font("微软雅黑", Font.PLAIN, 15));
table.setRowHeight(20); // 设置高度
JComboBox combobox = new JComboBox(states);
combobox.setFont(new Font("微软雅黑", Font.PLAIN, 15));
DefaultCellEditor editor = new DefaultCellEditor(combobox);
TableColumnModel column = table.getColumnModel();
column.getColumn(1).setCellEditor(editor); // 这是编辑的第二列
column.getColumn(0).setPreferredWidth(100); //设置第一列的宽度为100
scrollPanel = new JScrollPane(table);
this.getContentPane().add(scrollPanel);
对于上面的代码,自己总结了一下步骤:
1、创建表格模型,
2、创建表格(当然第一二步其实也可以和在一起的,直接创建一个含有数据的表格)
3、创建单元编辑器 即,DefaultCellEditor。他的内容是JComboBox对象,当然也可以是JTextField(对于其他的好像不行,我试过了,另外这个类的构造函数也只支持这个两个,但是否还有其他办法,这我就不清楚了)
4、获得表格的 列模型。TableColumnModel,最后将这一列的CellEditor设置为刚才创建的那个就行了。
…………
运行结果为:
但是有一点,我还是不明白,就是:为什么不点击那单元格(这个单元格没有得到焦点)的时候,它的样子不是JComboBox样式,当失去焦点的时候,他显示的是被选中的Text。这样一来,就让人觉得那就是一般的表格,没有什么特殊的。