![](/img/trans.png)
[英]TableModelListener and addRow interference in JTable/DefaultTableModel
[英]Subclass foo extends JTable. TableModelListener.getSource returns JTable not 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僅返回一個JTable,該JTable無法轉換為dataTable。
請讓我知道如何訪問此屬性,或者是否有更好的方法來實現此功能。
解決了
正如rdonuk指出的那樣,getSource返回一個TableModel,
因此,我更改了第一類以擴展DefaultTableModel並添加了額外的屬性。
public class TryingTableModel extends DefaultTableModel {
public TryingTableModel(PowerpointTable pptRef, Object[][] os, Object[] os1) {
super(os, os1);
this.pptRef = pptRef;
}
private final PowerpointTable pptRef;
public PowerpointTable getPPTTable() {
return this.pptRef;
}
public String testAccess() {
return "it worked";
}
JTable現在在第二類中初始化
TryingTableModel tableModel = new TryingTableModel(currentTable, tableArray, columnNames);
tableModel.addTableModelListener(new TableModelListener() {
@Override
public void tableChanged(TableModelEvent tme) {
TryingTableModel tableModel = (TryingTableModel) tme.getSource();
System.out.println(tableModel.testAccess());
}
});
JTable newJTable = new JTable(tableModel);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.