Java 将行插入JTable时重复的值
我在将行插入Java 将行插入JTable时重复的值,java,swing,jtable,Java,Swing,Jtable,我在将行插入JTable时遇到问题,我不知道问题出在哪里 我就是这样做的: ((DefaultTableModel)myJTable.getModel()).insertRow(0,webSiteDownloader.getWebSites().toArray()); DefaultTableModel dtm = (DefaultTableModel)myJTable.getModel(); for (MyRowObject row : webSiteDownloader.getWebSit
JTable
时遇到问题,我不知道问题出在哪里
我就是这样做的:
((DefaultTableModel)myJTable.getModel()).insertRow(0,webSiteDownloader.getWebSites().toArray());
DefaultTableModel dtm = (DefaultTableModel)myJTable.getModel();
for (MyRowObject row : webSiteDownloader.getWebSites()) {
dtm.insertRow(0, row.toArray());
}
webSiteDownloader
是一个具有ArrayList
的对象。我可以通过调用方法getWebSites
获得该数组
问题是,当我插入一行并添加第二行时,JTable
只显示第一行,但重复了两次。我够清楚了吗
Thks:D我将在黑暗中拍摄,并猜测您希望完成以下任务:
((DefaultTableModel)myJTable.getModel()).insertRow(0,webSiteDownloader.getWebSites().toArray());
DefaultTableModel dtm = (DefaultTableModel)myJTable.getModel();
for (MyRowObject row : webSiteDownloader.getWebSites()) {
dtm.insertRow(0, row.toArray());
}
使用insertRow而不是addRow有什么特殊原因吗
此外,我还建议您通过扩展AbstractTableModel来滚动自己的特殊用途TableModel。未经测试的基本示例:
public class MyTableModel extends AbstractTableModel
{
protected List<MyObject> rows;
public MyTableModel()
{
rows = new ArrayList<MyObject>();
}
public void add(MyObject obj)
{
rows.add(obj);
}
@Override
public int getRowCount()
{
return rows.size();
}
@Override
public int getColumnCount()
{
// This value will be constant, but generally you'd also
// want to override getColumnName to return column names
// from an array, and in that case you can return the length
// of the array with column names instead
return 2;
}
@Override
public Object getValueAt(int row, int column)
{
MyObject obj = rows.get(row);
// Change this to match your columns
switch(column) {
case 0: return obj.getId();
case 1: return obj.getName();
}
return null;
}
}
公共类MyTableModel扩展了AbstractTableModel
{
受保护的列表行;
公共MyTableModel()
{
行=新的ArrayList();
}
公共无效添加(MyObject对象)
{
行。添加(obj);
}
@凌驾
public int getRowCount()
{
返回rows.size();
}
@凌驾
public int getColumnCount()
{
//该值将是常量,但通常您还需要
//要覆盖getColumnName以返回列名吗
//从数组中,在这种情况下,可以返回长度
//使用列名替换数组的名称
返回2;
}
@凌驾
公共对象getValueAt(int行,int列)
{
MyObject obj=行。获取(行);
//更改此选项以匹配您的列
开关(列){
案例0:返回obj.getId();
案例1:返回obj.getName();
}
返回null;
}
}
Icky代码。非标准格式。受保护的。错过决赛。当可以在声明行上进行初始化时,在构造函数中进行初始化。一些返回,一些未在交换机中处理。返回随机(null
)值,而不是引发异常。缺少@Override。如果不从AbstractTableModel调用继承的FirexxEvent()方法,则TableModel无法工作!对add()的任何调用都不会刷新JTable!也是这样。我为所有愚蠢的失误感到抱歉,这里。这只是为了作为一个基本的例子来说明这个原则,作为一个基本的帮助开始,所以我不是一个彻底的,因为我应该。