自定义 TableModel Swing 中的 removeRow() 方法
Posted
技术标签:
【中文标题】自定义 TableModel Swing 中的 removeRow() 方法【英文标题】:removeRow() method in custom TableModel Swing 【发布时间】:2011-03-07 16:34:18 【问题描述】:我有一个使用我创建的自定义 TableModel 填充的 JTable。我有另一个 JTable,可以从第一个 JTable 添加行。我可以将行添加到新的 JTable 没有问题,但是我需要在将第一个 JTable 添加到新的 JTable 时从第一个 JTable 中删除该行。不幸的是 removeRow() 只是 DefaultTableModel 的一种方法,我已经检查了它的源代码,它没有显示出来......
提前致谢!
这是我的自定义表格模型:
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package ttp;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.table.*;
import java.util.*;
/**
*
* @author ericrea
*/
/**creates the model for the accounts table*/
public class tableModel extends AbstractTableModel
//private int rowCount = 0;
private static final int COLUMN_COUNT = 3;
private Conceptual_Package pp;
Conceptual_Package j = GUIpos.i;
public tableModel(Conceptual_Package pp)
this.pp = pp;
/**sets the column headers*/
public String getColumnName(int i)
switch (i)
case 0:
return "Sec";
case 1:
return "Row";
case 2:
return "Seat";
default:
return null;
/**figures out how many rows the model needs*/
public int getRowCount()
int h = 0;
try
h = Physical_PackageDAO.getInstance().getByConceptual_Package(j.getId()).size();
catch (DataException ex)
Logger.getLogger(tableModel.class.getName()).log(Level.SEVERE, null, ex);
return h;
/**Figures out number of columns*/
public int getColumnCount()
return COLUMN_COUNT;
/**gets the account information from the Physical_Package*/
public Object getValueAt(int rowIndex, int columnIndex)
String a = null;
String b = null;
String c = null;
try
Physical_Package pp = Physical_PackageDAO.getInstance().getByConceptual_Package(j.getId()).get(rowIndex);
a = pp.getVenueSeat().getRowInVenue().getSectionInVenue().getSectionNumber();
b = pp.getVenueSeat().getRowInVenue().getRowNumber();
c = pp.getVenueSeat().getSeatNumber();
catch (DataException ex)
Logger.getLogger(tableModel.class.getName()).log(Level.SEVERE, null, ex);
switch (columnIndex)
case 0:
return a.trim();
case 1:
return b.trim();
case 2:
return c.trim();
default:
return null;
/**gets the right account for the Physical_Package*/
public Physical_Package getCPackage(int index)
Physical_Package d = null;
try
Physical_PackageDAO.getInstance().getByConceptual_Package(j.getId()).get(index);
catch (DataException ex)
Logger.getLogger(tableModel.class.getName()).log(Level.SEVERE, null, ex);
return d;
public void removeRow(int index)
//write in mainFrame, in panel
//ValueChanged
// get the selected name
// Physical_Packages.get()
// namefield.settext(pp.getname);
//
//
【问题讨论】:
【参考方案1】:不幸的是 removeRow() 只是 DefaultTableModel 的一种方法
查看 DefaultTableModel 的源代码。这两种方法都已实现,因此您可以使用代码和代码可能看起来的示例。关键是“fireXXX”方法。调用这些方法将通知表格模型已更改,以便表格可以重新绘制自己。
从您的旧问题(您刚刚删除)中,您声明“我可以将行添加到新的 jTable 没问题”,
通过查看您的代码(在您删除问题之前),我有以下评论:
在我看来,您正在创建一个全新的 TableModel。这与向现有模型添加行不同。这似乎不是一个很好的解决方案。相反,您需要创建一个 addRow(...)
如果您发现 DefaultTableModel 中的代码过于混乱,那么这里有一些代码展示了我如何实现 addRow(...) 和 removeRow(...) 方法。见Row Table Model。该类显示了用于每种方法的正确 fireXXX 方法。
【讨论】:
好的,非常感谢,我也明白您对添加部分的意思。我会告诉你进展如何。谢谢! 查看了您的 RowTableModel,我想我可能只是使用它而不是我自己的。谢谢! BeanTableModel 链接中的 JButtonTableModel 示例展示了创建自己的 TableModel 的最简单方法,并实现了 getValueAt() 和 setValueAt() 方法。以上是关于自定义 TableModel Swing 中的 removeRow() 方法的主要内容,如果未能解决你的问题,请参考以下文章