0
希望有一個簡單的問題,但我正在努力繼承。子類foo擴展了JTable。 TableModelListener.getSource返回JTable不是foo
最終目標是檢測單元格在JTable中何時發生更改,然後運行涉及獲取與該表關聯的額外特定屬性的操作。
我有一個擴展了JTable的類,這樣我就可以在表中添加一些額外的屬性。擴展JTable的意義在於,當TableModelListener被激活時,我可以獲得額外的屬性。
public class dataTable extends JTable implements TableModelListener{
private final PowerpointTable extraProperty;
public dataTable(String[][] tableArray, String[] colNames, PowerpointTable extraProperty) {
super(tableArray, colNames);
this.extraProperty= extraProperty;
}
public PowerpointTable getExtraProperty() {
return this.extraProperty;
}
}
然後,我會像對待這個類像一個JTable和其他類創建表,並添加當細胞被改變的觸發聽者表。
public secondClass {
public secondClass() {}
public void createTable() {
dataTable newdataTable= new dataTable(tableArray, columnNames, currentTable);
newdataTable.getModel().addTableModelListener(new TableModelListener() {
@Override
public void tableChanged(TableModelEvent tme) {
PowerpointTable pptT = tme.getSource().getExtraProperty;
});
}
但是,getSource只返回一個不能轉換爲dataTable的JTable。
請讓我知道我該如何訪問此屬性,或者是否有更好的方法來實現此功能。
'PowerpointTable pptT =((數據表)tme.getSource())getExtraProperty;'只要確信'應工作newdataTable'是一個'DataTable'。小心括號。可能有更優雅的方式。 – bradimus
這是我第一次嘗試的方式,但它拋出java.lang.ClassCastException – emmistar
我不知道它爲什麼返回'JTable',但我檢查了源代碼'TableModelEvent'。 'getSource()'方法似乎返回'TableModel',它不是'JTable'的父類。也許你可以與我們分享關於這個事件如何發生的更多信息。 – rdonuk