我有一个用于制作表格的代码,并对输入的数据进行排序。如果我想使用按钮添加行来添加行而不是填充数据,并且也可以删除行,该怎么办? 这是我的代码:
public class TableSortDemo extends JPanel {
private boolean DEBUG = false;
class MyTableModel extends AbstractTableModel {
private String[] columnNames = {"Nama",
"NIM",
"IPK"};
private Object[][] data = {
{"", new Integer(0),new Double(0)}
};
public boolean isCellEditable(int row, int col) {
if (col < 2) {
return false;
} else {
return true;
}
}
public void setValueAt(Object value, int row, int col) {
if (DEBUG) {
System.out.println("Setting value at " + row + "," + col
+ " to " + value
+ " (an instance of "
+ value.getClass() + ")");
}
data[row][col] = value;
}
private void printDebugData() {
int numRows = getRowCount();
int numCols = getColumnCount();
for (int i=0; i < numRows; i++) {
System.out.print(" row " + i + ":");
for (int j=0; j < numCols; j++) {
System.out.print(" " + data[i][j]);
}
}
}
}
答案 0 :(得分:1)
对于基于AbstractTableModel的JTable,需要覆盖
public void addRow(Object[] rowData)使用正确的通知程序(然后在JTables视图中显示新行)fireTableRowsInserted(int firstRow, int lastRow),
public void removeRow(int row)使用正确的通知程序(然后删除了从JTables视图中删除的行)fireTableRowsDeleted(int firstRow, int lastRow)
我将使用DefaultTableModel(see my post, how easy everything could be),强烈推荐newbee
一切都在JTable tutorial中描述,其余是(正确)在具体的API中
答案 1 :(得分:0)
首先,为什么不使用 ArrayList 来表示行中显示的实体。而不是:
private Object[][] data = {
{"", new Integer(0),new Double(0)}
};
有类似的东西:
private ArrayList<Thing> myThings;
它让事情变得简单得多。
如果要添加或删除行,则只需向表模型添加两个方法,例如:
public void addThing(Thing t) {..}
public void removeThing(Thing t) {..}
并使用 fireTableDateChanged()进行跟进;