向从 CSV 生成的 JTable 添加复选框
Add a checkbox to a JTable which has been generated from a CSV
我有一个循环遍历 CSV 文件并生成数据的 DefaultTableModel 的函数(然后显示在 JTable 中)。这个函数是:
public DefaultTableModel createTableModel(Reader in, Vector<Object> headers) {
DefaultTableModel model = null;
Scanner s = null;
Vector<Object> c;
try {
Vector<Vector<Object>> rows = new Vector<Vector<Object>>();
s = new Scanner(in);
while (s.hasNextLine()) {
rows.add(new Vector<Object>(
Arrays.asList(s.nextLine().split("\s*,\s*", -1))));
}
if (headers == null) {
headers = rows.remove(0);
model = new DefaultTableModel(rows, headers);
} else {
model = new DefaultTableModel(rows, headers);
}
return model;
} finally {
s.close();
}
}
但是,我想修改此代码以在第一列数据中添加一个复选框(我在生成 CSV 文件时将其作为模板添加为带有 header [=22 的列) =]),它为每一行填充布尔值 false
。
问题是,我不知道像下面这样的代码应该放在哪里(在线阅读后我发现这是通过设置 class 到 Boolean
)。注意,这里的 "Selected" 列是第 1 列硬编码:
{
public Class getColumnClass(int column) {
if(column==1){
return Boolean.class;
}else return String.class;
}
};
应该定义(我假设它应该在上面的函数中)。
无需编写创建 DefaultTableModel 的函数,您可以子类化 DefaultTableModel 并添加覆盖您需要的函数..
如果您想要第一列,它应该是 0,而不是 1。您可能还需要重写 getValueAt() 以便实际 return 一个布尔值。
我有一个循环遍历 CSV 文件并生成数据的 DefaultTableModel 的函数(然后显示在 JTable 中)。这个函数是:
public DefaultTableModel createTableModel(Reader in, Vector<Object> headers) {
DefaultTableModel model = null;
Scanner s = null;
Vector<Object> c;
try {
Vector<Vector<Object>> rows = new Vector<Vector<Object>>();
s = new Scanner(in);
while (s.hasNextLine()) {
rows.add(new Vector<Object>(
Arrays.asList(s.nextLine().split("\s*,\s*", -1))));
}
if (headers == null) {
headers = rows.remove(0);
model = new DefaultTableModel(rows, headers);
} else {
model = new DefaultTableModel(rows, headers);
}
return model;
} finally {
s.close();
}
}
但是,我想修改此代码以在第一列数据中添加一个复选框(我在生成 CSV 文件时将其作为模板添加为带有 header [=22 的列) =]),它为每一行填充布尔值 false
。
问题是,我不知道像下面这样的代码应该放在哪里(在线阅读后我发现这是通过设置 class 到 Boolean
)。注意,这里的 "Selected" 列是第 1 列硬编码:
{
public Class getColumnClass(int column) {
if(column==1){
return Boolean.class;
}else return String.class;
}
};
应该定义(我假设它应该在上面的函数中)。
无需编写创建 DefaultTableModel 的函数,您可以子类化 DefaultTableModel 并添加覆盖您需要的函数..
如果您想要第一列,它应该是 0,而不是 1。您可能还需要重写 getValueAt() 以便实际 return 一个布尔值。