我有一个使用AbstractTableModel的JTable。 基本上我的程序读取一个文件夹,并将文件夹中的文件添加到表中。 我已经设置了我的数据阵列像这样:为CheckBox添加动作侦听器AbstractTableModel
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和类似功能的不同实现.. 我该如何解决这个问题?
在此先感谢你们!
看看这里http://docs.oracle.com/javase/tutorial/uiswing/components/table.html#editor – keuleJ
你的模型实现是无效的:它必须在更改时触发相应的事件。另外,*不要*使模型成为一个监听器(什么,无论如何?) – kleopatra