我正在使用Java,并且我正在尝试在JTable中创建一个可编辑的单元格。我的类实现了TableModel并扩展了AbstractTableModel (这样我就可以使用fireTableCellUpdated(rowIndex, columnIndex))
方法了,我还实现了isCellEditable()
和setValueAt()
方法。我将表中的一个单元格表示为Cell类的对象。
现在我的问题来了:单元格已经是可编辑的,当我单击它时,光标出现在单元格中,但是,单元格中还出现了一个字符串,如:Cell@1e63e3d
。我删除了这个字符串,并在单元格中输入了我想要放入的值,然后单击Enter,它就可以正常工作了。但我希望当我单击那里的单元格时,什么也不会出现,是一个空字符串,而不是Cell@1e63e3d
。我不知道如何将这个空字符串设置为默认值,以及在何处设置。
我的cell类存储关于单元格的信息(特征),比如单元格的颜色,以及它的值作为实例变量。
如果您需要更多信息,请告诉我。
发布于 2009-01-25 19:38:49
您是否为JTable
设置了TableCellRenderer
和TableCellEditor
用于显示单元格,TableCellRenderer
用于呈现TableModel
中某个位置的内容。默认情况下,它将在该位置使用Object
的toString
方法,这样就可以解释单元格中显示的Cell@1e63e3d
--这是在Cell
对象上调用toString
方法的结果。
通过编写自定义单元格呈现器(实现TableCellRenderer
的类),您将能够使用getTableCellRendererComponent
方法返回要用来显示Cell
对象的Component
。在您的示例中,您可能希望对实现TableCellRenderer
的JLabel
进行子类化,并将标签的内容设置为反映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 renderers和Editiing table cells部分可能是您感兴趣的。
发布于 2009-01-25 19:32:27
您是否使用适当的TableCellEditor
来显示要编辑的组件?
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;
}
}
除了自定义单元格呈现器之外,您还需要告诉您的表使用此自定义单元格编辑器。
myTable.setDefaultEditor(Cell.class, new MyTableCellEditor());
https://stackoverflow.com/questions/478726
复制相似问题