2011-03-07 83 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