子类foo扩展了JTable。 TableModelListener.getSource返回JTable而不是foo

时间:2016-03-15 15:37:06

标签: java swing inheritance

希望这是一个简单的问题,但我正在努力继承。

最终目标是检测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,它不能转换为dataTable。

请告诉我如何访问此媒体资源,或者是否有更好的方法来实现此功能。

1 个答案:

答案 0 :(得分:0)

解决了它,

正如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);
相关问题