我正在尝试从Array插入动态行。我正在使用Oracle网站上提供的以下代码:
class mYModel extends AbstractTableModel
{
Object rowData[][] = { {Boolean.TRUE ,"11","OMF","C++","Jhon Doe",22}};
Object[] arr = new Object[5];
String columnNames[] = {
"Action",
"Pages",
"Name",
"Title",
"Author",
"TimeStamp"
};
public int getColumnCount() {
return columnNames.length;
}
public String getColumnName(int column) {
return columnNames[column];
}
public int getRowCount() {
return rowData.length;
}
public Object getValueAt(int row, int column) {
return rowData[row][column];
}
public Class getColumnClass(int column) {
return (getValueAt(0, column).getClass());
}
@Override
public void setValueAt(Object value, int row, int column) {
rowData[row][column] = value;
}
@Override
public boolean isCellEditable(int row, int column) {
return (column == 0);
}
}
我希望 rowData [] [] 动态获取值而不是初始化它。我不习惯Java,所以无法理解这样做。
我对使用AbstractModel不是特别感兴趣,如果还有其他方法,那么最欢迎指导我。
答案 0 :(得分:3)
而不是使用固定大小的数组,您可以使用类似列表的内容:
Object rowData[][] = { {Boolean.TRUE ,"11","OMF","C++","Jhon Doe",22}};
到
ArrayList<Object[]> rowData;
等。然后添加一行你要做rowData.add(stuff)。你必须转换所有方法来引用行的大小等。
但更有可能的是,使用DefaultTableModel
(或其他一些tablemodel实现)而不是像这样的数组,而不是使用它:
http://docs.oracle.com/javase/6/docs/api/javax/swing/table/DefaultTableModel.html
答案 1 :(得分:1)
您的AbstractTableModel
实施没有什么特别之处。只需使用已实施的DefaultTableModel
String columnNames[] = {
"Action",
"Pages",
"Name",
"Title",
"Author",
"TimeStamp"
};
DefualtTableModel model = new DefaultTableModel(columnNames, 0); <-- 0 is row count
JTable table = new JTable(model);
然后从DefaultTableModel
public void addRow(Object[] rowData)
- 在模型末尾添加一行。除非指定rowData
,否则新行将包含空值。将生成正在添加的行的通知。所以每当你想添加一行时,就这样做
Object[] row = { data1, data2, data2, data4, data5, data6 };
model.addRow(row);
如果您需要额外的功能,可以随时对其进行扩展,或者如果您只想覆盖getColumnClass()
以获取复选框,则可以执行此操作
DefaultTableModel model = new DefaultTableModel(columnNames, 0) {
@Override
public Class getColumnClass(int column) {
return (getValueAt(0, column).getClass());
}
};