我有一個使用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