我想在运行时将数据添加到我自己的 JTable 模型中。我的界面上有表格和添加按钮。据我了解,我无法使用二维数组来做到这一点,并且想在我的定制表模型中使用 Arraylist,但如果我使用这种类型的数据,我不知道如何创建构造函数。
static String[] columnNames = {"A", "B", "C"};
static Object data[][] = new Object[15][3];
public MyTableModel() {
super(data, columnNames);
}
这是数据作为二维数组的构造函数,但我想使用:
ArrayList<Object[]> data = new ArrayList<Object[]>();
制作方法
最佳答案
一种方法是使用 AbstractTableModel
。这是一个例子:
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.SwingUtilities;
import javax.swing.table.AbstractTableModel;
public class TestTable {
public static class MyModel extends AbstractTableModel {
private List<Object[]> data;
private List<String> columnNames;
public MyModel(List<String> columnNames, List<Object[]> data) {
super();
this.columnNames = columnNames;
this.data = data;
}
@Override
public int getRowCount() {
return data.size();
}
@Override
public int getColumnCount() {
return columnNames.size();
}
@Override
public String getColumnName(int column) {
return columnNames.get(column);
}
@Override
public Object getValueAt(int rowIndex, int columnIndex) {
return data.get(rowIndex)[columnIndex];
}
}
protected void initUI() {
JFrame frame = new JFrame(TestTable.class.getSimpleName());
List<String> columns = Arrays.asList("Name", "Age");
List<Object[]> data = new ArrayList<Object[]>();
for (int i = 0; i < 50; i++) {
Object[] value = new Object[2];
value[0] = "Name-" + i;
value[1] = 12 + i;
data.add(value);
}
JTable table = new JTable(new MyModel(columns, data));
frame.add(new JScrollPane(table));
frame.pack();
frame.setVisible(true);
}
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
new TestTable().initUI();
}
});
}
}
如果您需要修改您的data
List<Object[]>
,不要忘记触发适当的表事件。 AbstractTableModel
已经包含它们了。
关于java - 如何使用 arraylist 将数据存储在 JTable 的预定义默认表模型中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13274644/