更新:
在测试我的(可能是不完整的)答案时,我遇到了一个非常好的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
我认为主要的问题是您将列编辑器/渲染器的思想与将存储在每一行中的实际数据混合在一起。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)