【发布时间】:2014-01-15 15:01:39
【问题描述】:
我有一个使用 AbstractTableModel 的 JTable。 基本上我的程序读取一个文件夹并将文件夹中的文件添加到表中。 我已经像这样设置了我的数据数组:
public void buildPluginSheet(){
String[] files= Files.getAvailableFiles();
data.clear();
for(int i=0; i<files.length; i++)
{
Object[] tmp = {files[i], version, new Boolean(isAvailable(files[i]))};
data.add(tmp);
}
}
数据的类型为 ArrayList
当您在表格中有一个布尔值时,它就像一个复选框,对吗?我需要的是能够在选中复选框时执行一个功能,而在未选中复选框时执行另一个功能。此外,我必须能够传递复选框所在的行,以便获取与复选框关联的文件名。
我的 AbstractTableModel 如下所示:
class MyTableModel extends AbstractTableModel{
private static final long serialVersionUID = 4567658160237952337L;
@Override
public boolean isCellEditable(int row, int col){
if(col == 2){
return true;
}
return false;
}
@Override
public int getColumnCount() {
return columnNames.length;
}
@Override
public int getRowCount() {
return data.size();
}
public void setValueAt(Object value, int row, int col) {
data.get(row)[col] = value;
}
@SuppressWarnings({ "unchecked", "rawtypes" })
public Class getColumnClass(int column) {
return (getValueAt(0, column).getClass());
}
public String getColumnName(int col) {
return columnNames[col];
}
@Override
public Object getValueAt(int row, int col) {
return data.get(row)[col];
}
}
这是创建我的 JTable 的代码:
filesTable = new JTable(model);
filesTable.setRowSorter(sorter);
filesTable.setPreferredScrollableViewportSize(new Dimension(550, 260));
filesTable.setFillsViewportHeight(true);
filesTable.getTableHeader().setReorderingAllowed(false);
pluginsTable.getModel().addTableModelListener(new TableModelListener() {
@Override
public void tableChanged(TableModelEvent e) {
if(true){
System.out.println("Hello");
}
}
});
我在这里和其他地方查看了许多不同的解决方案,但没有运气.. 我尝试过 tableChanged 和类似功能的不同实现.. 我该如何解决这个问题?
提前谢谢大家!
【问题讨论】:
-
您的模型实现无效:它必须在更改时触发相应的事件。另外,不要让模型成为监听器(不管怎样?)
标签: java swing checkbox jtable actionlistener