2011-03-07 85 views
0

我有一個使用我創建的自定義TableModel填充的JTable。我有另一個JTable可以從第一個JTable添加行。我可以添加行到新的JTable沒有問題,但我需要從第一個JTable中刪除該行,將其添加到新的JTable。不幸的是,removeRow()只是DefaultTableModel的一種方法,並且我已經檢查了源代碼並且它不顯示出來...自定義TableModel Swing中的removeRow()方法

在此先感謝!

,這裏是我的自定義表型號:

/* 
* To change this template, choose Tools | Templates 
* and open the template in the editor. 
*/ 
package ttp; 

import java.util.logging.Level; 
import java.util.logging.Logger; 
import javax.swing.table.*; 
import java.util.*; 

/** 
* 
* @author ericrea 
*/ 

/**creates the model for the accounts table*/ 
public class tableModel extends AbstractTableModel { 

    //private int rowCount = 0; 
    private static final int COLUMN_COUNT = 3; 
    private Conceptual_Package pp; 
    Conceptual_Package j = GUIpos.i; 



    public tableModel(Conceptual_Package pp) { 
     this.pp = pp; 

    } 

    /**sets the column headers*/ 
    public String getColumnName(int i){ 
     switch (i) { 
      case 0: 
       return "Sec"; 
      case 1: 
       return "Row"; 
      case 2: 
       return "Seat"; 
      default: 
       return null; 
     } 
    } 

    /**figures out how many rows the model needs*/ 
    public int getRowCount() { 
     int h = 0; 
     try { 
      h = Physical_PackageDAO.getInstance().getByConceptual_Package(j.getId()).size(); 
     } catch (DataException ex) { 
      Logger.getLogger(tableModel.class.getName()).log(Level.SEVERE, null, ex); 
     } 

     return h; 
    } 

    /**Figures out number of columns*/ 
    public int getColumnCount() { 
     return COLUMN_COUNT; 

    } 

    /**gets the account information from the Physical_Package*/ 
    public Object getValueAt(int rowIndex, int columnIndex) { 
     String a = null; 
     String b = null; 
     String c = null; 

     try { 
      Physical_Package pp = Physical_PackageDAO.getInstance().getByConceptual_Package(j.getId()).get(rowIndex); 
      a = pp.getVenueSeat().getRowInVenue().getSectionInVenue().getSectionNumber(); 
      b = pp.getVenueSeat().getRowInVenue().getRowNumber(); 
      c = pp.getVenueSeat().getSeatNumber(); 

      } catch (DataException ex) { 
      Logger.getLogger(tableModel.class.getName()).log(Level.SEVERE, null, ex); 
     } 
      switch (columnIndex) { 
       case 0: 
        return a.trim(); 
       case 1: 
        return b.trim(); 
       case 2: 
        return c.trim(); 
       default: 
        return null; 
      } 

    } 

    /**gets the right account for the Physical_Package*/ 
    public Physical_Package getCPackage(int index){ 
     Physical_Package d = null; 
     try { 
      Physical_PackageDAO.getInstance().getByConceptual_Package(j.getId()).get(index); 
     } catch (DataException ex) { 
      Logger.getLogger(tableModel.class.getName()).log(Level.SEVERE, null, ex); 
     } 

     return d; 
    } 

    public void removeRow(int index){ 

    } 
//write in mainFrame, in panel 
//ValueChanged{ 
// get the selected name 
// Physical_Packages.get() 
// namefield.settext(pp.getname); 
// 
//} 
} 

回答

1

不幸的是removeRow()只對的DefaultTableModel

的方法看看對的DefaultTableModel的源代碼。這兩種方法都已經實現,所以你可以使用代碼和你的代碼可能看起來像什麼樣的例子。關鍵是「fireXXX」方法。調用這些方法將通知表格模型已經改變,所以表格可以重新繪製自己。

從舊的問題(你只是刪除)你的國家,「我行添加到新的JTable沒有問題,」

從你的代碼看(已刪除的問題之前)我有以下評論:

它看起來像我一樣創建一個全新的TableModel。這與向現有模型添加行是不同的。這似乎不是一個很好的解決方案。相反,你需要創建一個addRow(...)

如果你發現代碼太混亂的DefaultTableModel,那麼這裏是一些代碼,顯示了我已經實現了addRow(...)和removeRow(.. 。) 方法。見Row Table Model。該類顯示適用於每種方法的fireXXX方法。

+0

好的非常感謝你,我也明白你的意思。我會盡快回復你。謝謝! – novicePrgrmr 2011-03-07 17:01:05

+0

看看你的RowTableModel,我想我可能只是使用它而不是我自己的。謝謝! – novicePrgrmr 2011-03-07 17:06:16

+0

BeanTableModel鏈接的JButtonTableModel示例顯示了實現getValueAt()和setValueAt()方法創建自己的TableModel的最簡單方法。 – camickr 2011-03-07 17:22:10