2012-10-28 51 views
2

我期待在jtable中更改单元格的数据。我怎样才能做到这一点?当我执行下面的代码时,我得到错误。Java JTable,如何更改单元格数据(写入文本)?

JFrame f= new JFrame(); 
final JTable table= new JTable(10,5); 

TableModelListener tl= new TableModelListener(){ 
    public void tableChanged(TableModelEvent e){ 

    table.setValueAt("hello world",2,2); 
    } 
}; 

table.getModel().addTableModelListener(tl); 
f.add(table); 
f.pack(); 
f.setVisible(true); 

我也在下面尝试过,但它仍然不起作用。是什么赋予了?

table.getModel().setValueAt("hello world",2,2); 
+0

你的意思是_doesn't work_? – kleopatra

+0

它不编译。我的问题很简单:当一个jtable单元格值发生变化时,我想编辑一个特定的单元格 – thecodefather

+0

然后先修复编译错误。 – kleopatra

回答

3

调用TableModelListenertable.setValueAt()使tableChanged()方法 被称为接着setValueAt()方法被再次和所谓的上循环往复,导致StackOverflowError

一种解决方案是使用CellEditorListener代替。请参阅example

+0

这并不能真正解决我的问题。当jtable出现问题时,我将如何写入单元格? – thecodefather

+1

我想你正在寻找'CellEditorListener'。请参阅上面示例的链接。 – Reimeus

+1

'tableChanged'告诉你已经发生了一些事情 – MadProgrammer

0

你可以使用Rob Camick的例子,帮助我很多,另外你也可以通过使用这个类获得新旧价值。 Example

另请参见博客的结尾以查看我的帖子,以将添加代码添加到表单加载事件以处理发生在表格上的最后更改。

MouseEvent me = new MouseEvent(tblDetailInfo, 0, 0, 0, 100, 100, 1, false); 
for(MouseListener ml: tblDetailInfo.getMouseListeners()){ 
ml.mouseClicked(me); } 
+0

对不起,但这不是我要找的无论是。我的问题很简单:当一个jtable单元格值被改变时,我想编辑一个特定的单元格。 – thecodefather