为什么在JTable的tableChanged(TableModelEvent e),用model.setValueAt()会出现 异常?

sourceid 2004-12-05 01:03:30
想在表改变时修改某一行列的数值,结果出现异常,怎样对付这异常?

Exception in thread "main" java.lang.StackOverflowError
at javax.swing.table.DefaultTableModel.getRowCount(DefaultTableModel.java:567)
at TableTest1.tableChanged(TableTest1.java:91)
at javax.swing.table.AbstractTableModel.fireTableChanged(AbstractTableModel.java:280)
at javax.swing.table.AbstractTableModel.fireTableCellUpdated(AbstractTableModel.java:259)
at javax.swing.table.DefaultTableModel.setValueAt(DefaultTableModel.java:639)
at TableTest1.tableChanged(TableTest1.java:99)
...
.....
......


源代码:

import java.awt.*;
import java.awt.event.*;

import javax.swing.*;
import javax.swing.table.*;
import javax.swing.event.*;

public class TableTest1 extends JFrame implements TableModelListener{

private DefaultTableModel model;
private JTable table;
private JScrollPane scroll;
private DefaultCellEditor cellEditor;
private JTextField textField;

public TableTest1()
{
super("Table test");

model=new DefaultTableModel();
model.addTableModelListener(this);
model.addColumn("Name");
model.addColumn("Age");
model.addColumn("Birth");

String[] john={"","",""};
model.addRow(john);

String[] tom={"","",""};
model.addRow(tom);

String[] jack={"","",""};
model.addRow(jack);



table=new JTable(model);

textField=new JTextField();


cellEditor=new DefaultCellEditor(textField);
cellEditor.setClickCountToStart(1);

TableColumn column=null;
for(int i=0;i<2;i++)
{
column=table.getColumnModel().getColumn(i);
column.setCellEditor(cellEditor);
}



JButton addButton=new JButton("Add ");

addButton.addActionListener(new ActionListener(){

public void actionPerformed(ActionEvent e)
{
String[] name={"","",""};
model.addRow(name);

}
});

JButton removeButton=new JButton("Remove ");
removeButton.addActionListener(new ActionListener(){

public void actionPerformed(ActionEvent e)
{
model.removeRow(table.getSelectedRow());
}
});

JPanel inputPanel=new JPanel();
inputPanel.add(addButton);
inputPanel.add(removeButton);

Container container=getContentPane();
scroll=new JScrollPane(table);

container.add(scroll,BorderLayout.CENTER);
container.add(inputPanel,BorderLayout.NORTH);

setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setSize(400,300);
setVisible(true);
}
public void tableChanged(TableModelEvent e)
{
int row=model.getRowCount();
if(row==0)
{
return;
}
for(int i=0;i<row;i++)
{

model.setValueAt(new String("123"),i,1);//这里
System.out.println("1");
}
}

public static void main(String args[])
{
TableTest1 test=new TableTest1();
}
}
...全文
344 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
sourceid 2004-12-07
  • 打赏
  • 举报
回复
还没有人回的话,我要结帐了.
zh_baiyu 2004-12-05
  • 打赏
  • 举报
回复
努力顶

67,513

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧