我试图在IntelliJ中创建一个带有两列的JTable:一列是复选框,另一列是字符串。用户可以通过按JButton向表中添加任意字符串,每次按下该按钮时,新行将添加到表中,其中第一列是复选框,第二列是任意字符串。这可以进行任意次数向表中添加任意数量的行。通过单击复选框并按下删除按钮,该行将从表中删除。整个过程工作正常,但不是我遇到的麻烦。
每次用户按下向表中添加字符串的按钮时,我想将该字符串添加到一致的对象/容器中。所以在初始化时对象是空的,
Object[][] tableData;
但是当按下按钮时,对象现在包含"复选框"由布尔值和字符串表示。
Object[][] tableData = {
{false, "String"}
}
这可能会持续一段时间。
Object[][] tableData = {
{false, "String"},
{false, "String"},
{false, "String"},
{false, "String"},
{false, "String"},
{false, "String"}
}
如果任何布尔值变为true(通过复选框),并按下删除按钮,那么该特定的"行"或部分对象被删除。我将如何创建此对象或容器并进行维护?没有对象,有更好的方法吗?
现在简单概述我现在的情况如下。
String colNames = {" ", "String"};
DefaultTableModel tableModel = new DefaultTableModel(colNames, 0);
importTable = new JTable(tableModel) {
@Override
public Class getColumnClass(int column) {
switch(column) {
case 0:
return Boolean.class;
default:
return String.class;
}
}
};
importButton.addActionListener(new ActionListener() {
public void actionPerofrmed(ActionEvent e) {
Object[][] newData = {
{false, "String"}
};
tableModel.addRow(newData[0]);
}
});
removeButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
for (int i = 0; i < tableModel.getRowCount(); i++) {
Boolean checked = (Boolean) tableModel.getValueAt(i, 0);
if (checked) {
tableModel.removeRow(i);
i--;
}
}
}
});
答案 0 :(得分:1)
这不正是你的桌子模型的用途吗?如果您需要不同的数据&#34; nucleus&#34;对于你的表模型,一个说使用ArrayList<CustomType>
,其中CustomType是一个包含Boolean和String的类,表示JTable中的每一行数据,然后扩展AbstractTableModel,给它上面的ArrayList,覆盖必要的方法,请务必在需要时调用相应的fireXxxx(...)
方法,然后开展业务。
或者坚持使用DefaultTableModel,并编写代码以简单地将其转换为您需要的对象。
请注意,您的部分帖子让我感到困惑 - 您使用了不灵活且面向对象的2D对象阵列 - 为什么?