JTable的特定行中的Celleditor(JComboBox)

JTable的特定行中的Celleditor(JComboBox),第1张

JTable的特定行中的Celleditor(JComboBox)

更新:
在测试我的(可能是不完整的)答案时,我遇到了一个非常好的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

我认为主要的问题是您将列编辑器/渲染器的思想与将存储在每一行中的实际数据混合在一起。



欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5490247.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-12
下一篇 2022-12-12

发表评论

登录后才能评论

评论列表(0条)

保存