JTable的特定行中的Celleditor(JComboBox)
问题内容:
我不知道如何在特定行中设置一个jcombobox …现在我已经为所有行设置了这个jcombobox,但是我只希望在一行中设置它:
JComboBox cc = new JComboBox();
cc.addItem(jComboBox5.getSelectedItem()+"/"+jComboBox6.getSelectedItem()+"/"+jComboBox7.getSelectedItem()+" "+jComboBox1.getSelectedItem()+"."+jComboBox2.getSelectedItem());
jTable1.getColumnModel().getColumn(3).setCellEditor(new DefaultCellEditor(cc));
DefaultTableCellRenderer renderer = new DefaultTableCellRenderer();
renderer.setToolTipText("CLICCA PER LE DATE");
jTable1.getColumnModel().getColumn(3).setCellRenderer(renderer);
问题答案:
更新:
在测试我的(可能是不完整的)答案时,我遇到了一个非常好的SO问题,我认为它将比我能提供的更好:将JComboBox放入JTable
另一个更新: 我再次阅读了您的问题,并且意识到您要求输入 特定的行 。我能想到的唯一方法是创建一个自定义CellEditor,如下所示:
private static class MyCellEditor extends AbstractCellEditor implements TableCellEditor {
DefaultCellEditor other = new DefaultCellEditor(new JTextField());
DefaultCellEditor checkbox = new DefaultCellEditor(new JComboBox(new Object[] {"abc"}));
private DefaultCellEditor lastSelected;
@Override
public Object getCellEditorValue() {
return lastSelected.getCellEditorValue();
}
@Override
public Component getTableCellEditorComponent(JTable table,
Object value, boolean isSelected, int row, int column) {
if(row == 0) {
lastSelected = checkbox;
return checkbox.getTableCellEditorComponent(table, value, isSelected, row, column);
}
lastSelected = other;
return other.getTableCellEditorComponent(table, value, isSelected, row, column);
}
}
在此示例中,自定义CellEditor实际上是两个Editor,并且根据选择的行,特定的Editor将获得调用(无论是图形上还是字面上)。我承认这lastSelected
似乎有点骗人,但老实说,我找不到一种更简单的方法来知道要返回哪个Editor值(因为getCellEditorValue
没有参数)。
为了使您的表“正确”显示,您可能还需要对Renderer进行一些操作(因为Renderer可能会或可能不知道将JComboBox的选定值显示为初始值)。这取决于您如何初始化实际表中的数据。
为了完整起见,我的原始答案如下:
您可以在TableModel上使用JComboBox组件添加到该
行addRow
,如下所示:如何在JTable中添加行?
另请参阅:http
:
//docs.oracle.com/javase/tutorial/uiswing/components/table.html
我认为主要的问题是您将列编辑器/渲染器的思想与将存储在每一行中的实际数据混合在一起。