首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >使JTable中的单元格可编辑-单元格的默认值

使JTable中的单元格可编辑-单元格的默认值
EN

Stack Overflow用户
提问于 2009-01-25 18:51:15
回答 2查看 23.1K关注 0票数 3

我正在使用Java,并且我正在尝试在JTable中创建一个可编辑的单元格。我的类实现了TableModel并扩展了AbstractTableModel (这样我就可以使用fireTableCellUpdated(rowIndex, columnIndex))方法了,我还实现了isCellEditable()setValueAt()方法。我将表中的一个单元格表示为Cell类的对象。

现在我的问题来了:单元格已经是可编辑的,当我单击它时,光标出现在单元格中,但是,单元格中还出现了一个字符串,如:Cell@1e63e3d。我删除了这个字符串,并在单元格中输入了我想要放入的值,然后单击Enter,它就可以正常工作了。但我希望当我单击那里的单元格时,什么也不会出现,是一个空字符串,而不是Cell@1e63e3d。我不知道如何将这个空字符串设置为默认值,以及在何处设置。

我的cell类存储关于单元格的信息(特征),比如单元格的颜色,以及它的值作为实例变量。

如果您需要更多信息,请告诉我。

EN

回答 2

Stack Overflow用户

发布于 2009-01-25 19:38:49

您是否为JTable设置了TableCellRendererTableCellEditor

用于显示单元格TableCellRenderer用于呈现TableModel中某个位置的内容。默认情况下,它将在该位置使用ObjecttoString方法,这样就可以解释单元格中显示的Cell@1e63e3d --这是在Cell对象上调用toString方法的结果。

通过编写自定义单元格呈现器(实现TableCellRenderer的类),您将能够使用getTableCellRendererComponent方法返回要用来显示Cell对象的Component。在您的示例中,您可能希望对实现TableCellRendererJLabel进行子类化,并将标签的内容设置为反映Cell对象的内容。

与编辑单元格一样,当您要使用编辑JTable中的单元格时,JTable将接收来自Object的you。TableCellEditor将返回一个Component,该cell用于使用getTableCellEditorComponent方法编辑单元格内容( Object)。

在您提供的情况下,我认为创建一个实现TableCellEditor接口的JTextField将能够为您完成这项工作。在覆盖getTableCellEditorComponent时,请检查是否有Cell对象的实例(即object instanceof Cell),如果是这样,请初始化JTextField以包含要显示或编辑的Cell对象的内容。

推荐阅读: IBM发现来自 developerWorks的Rendering cells in Swing's JTable component文章在学习如何处理JTable及其单元格呈现和编辑特性方面非常有帮助。特别是,Creating custom renderersEditiing table cells部分可能是您感兴趣的。

票数 7
EN

Stack Overflow用户

发布于 2009-01-25 19:32:27

您是否使用适当的TableCellEditor来显示要编辑的组件?

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
class MyTableCellEditor
        extends DefaultCellEditor
{
    @Override
    public Component getTableCellEditorComponent(
            JTable table,
            Object value,
            boolean isSelected,
            int row,
            int column)
    {
        final JTextField c = (JTextField) super.getTableCellEditorComponent(
            table,
            ((Cell) value).text, // edit the text field of Cell
            isSelected,
            row,
            column);

        c.selectAll(); // automatically select the whole string in the cell
        return c;
    }
}

除了自定义单元格呈现器之外,您还需要告诉您的表使用此自定义单元格编辑器。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
myTable.setDefaultEditor(Cell.class, new MyTableCellEditor());
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/478726

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文