在表格单元格中显示组合框

        在一些书上,看见表格中有多种选项,可以供使用者选择?那么在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。这样一来,就让人觉得那就是一般的表格,没有什么特殊的。

你可能感兴趣的:(在表格单元格中显示组合框)