您可以尝试创建自己的渲染在this例子。
public void example(){
TableColumn tmpColum =table.getColumnModel().getColumn(1);
String[] DATA = { "Data 1", "Data 2", "Data 3", "Data 4" };
JComboBox comboBox = new JComboBox(DATA);
DefaultCellEditor defaultCellEditor=new DefaultCellEditor(comboBox);
tmpColum.setCellEditor(defaultCellEditor);
tmpColum.setCellRenderer(new CheckBoxCellRenderer(comboBox));
table.repaint();
}
/**
Custom class for adding elements in the JComboBox.
*/
class CheckBoxCellRenderer implements TableCellRenderer {
JComboBox combo;
public CheckBoxCellRenderer(JComboBox comboBox) {
this.combo = new JComboBox();
for (int i=0; i<comboBox.getItemCount(); i++){
combo.addItem(comboBox.getItemAt(i));
}
}
public Component getTableCellRendererComponent(JTable jtable,
Object value,
boolean isSelected,
boolean hasFocus,
int row, int column) {
combo.setSelectedItem(value);
return combo;
}
}
,或者你可以自定义的默认渲染就像this例子。
final JComboBox combo = new JComboBox(items);
TableColumn col = table.getColumnModel().getColumn(ITEM_COL);
col.setCellRenderer(new DefaultTableCellRenderer(){
@Override
public Component getTableCellRendererComponent(JTable table, Object value,
boolean isSelected, boolean hasFocus, int row, int column) {
JLabel label = (JLabel) super.getTableCellRendererComponent(table,
value, isSelected, hasFocus, row, column);
label.setIcon(UIManager.getIcon("Table.descendingSortIcon"));
return label;
}
});
第一个示例使单元看起来像点击后的JComboBox。第二个示例向JComboCox添加一个箭头图标,以显示JComboBox是可点击的。我用第二个例子,结果可以看到here。
所以你修改了工作代码,现在它不工作。也许问题是修改后的代码?既然你没有发布你的[SSCCE](http://sscce.org/),我们无法猜测你可能做了什么。 – camickr 2013-02-21 22:55:25
嗯,我想编辑很简单,它不会很难弄清楚...我基本上改变了'DefaultTableModel模型=新的DefaultTableModel(数据,columnNames);'到'DefaultTableModel模型=新的DefaultTableModel(columnNames); '然后做了'model.addRow();'在创建表之后将项目放入表格中。我不会想象它与以后用不同数据更新它们的方式创建表格的方式有很大的不同。 – DGolberg 2013-02-21 23:20:28
这也不例外。使用addRow()方法更新模型并不重要。 – camickr 2013-02-22 01:22:06