无法使用在JTable UI编程中扩展AbstractTableModel的类中声明的方法

时间:2014-04-29 20:31:29

标签: java swing jtable abstracttablemodel

在我实施"method is never used locally"方法后,我收到了removeRow消息。我也无法使用/访问此方法。

class TableModel extends AbstractTableModel {

    private String[] columnNames = {"ID", "Name"};

         ArrayList<Entry> list;

         public TableModel(Entry[] entries) {
              // assigns entries to list
         }

         public int getColumnCount() {
              return columnNames.length;
         }

         public String getColumnName(int col)
         {
             return columnNames[col];
         }

         public int getRowCount() {
              return list.size();
         }

             // this method gives a "never used locally" message
         public void removeRow(int row)
         {
             list.remove(row);
             fireTableRowsDeleted(row, row);
         }

         public Object getValueAt(int row, int col) {
              Entry entry = list.get(row);
              if(entry != null)
              {
                  switch (col) {
                  case 0:
                       return entry.getId();
                  case 1:
                       return entry.getName();
                  default:
                       return "";
                  }
              }
         }
     }

然后,当按下removeRow(int row)按钮时,我尝试通过以下方式访问delete

public void actionPerformed(ActionEvent event)
{
          int i =1;
      table.getModel().removeRow(i); // removeRow not recognised
}

2 个答案:

答案 0 :(得分:5)

class TableModel extends AbstractTableModel {

TableModel是一个界面。为您的班级使用更好的名字。 (我不知道当你尝试使类名与接口名相同时会发生什么)。相反,你应该使用类似的东西:

class EntryTableModel extends AbstractTableModel {

由于您的模型用于包含“Entry”对象。

table.getModel().removeRow(i);

上面的代码令人困惑,因为getModel()方法返回TableModel,但这实际上是TableModel接口还是TableModel类?

要使用您的自定义模型,您的代码应该是:

TableModel model = table.getModel();
EntryTableModel entryModel = (EntryTableModel)model;
entryModel.removeRow(i);

答案 1 :(得分:4)

你应该投你的班级。执行table.getModel后,您获得AbstractTableModel,其中不包含名为removeRow的方法

((TableModel)table.getModel()).removeRow(i)