public class SjwTable extends AbstractTableModel
{
/**
 * 
 */
private static final long serialVersionUID = 1L;
@SuppressWarnings("unchecked")
public static Vector sjwVec = new Vector();
public static String title[] = { "MMS_TRANID", "MMS_VASPID", "MMS_VASID",
"MMS_SERVICECODE", "MMS_SENDERADD", "MMS_CHARGEDPARTYID",
"MMS_MESSAGEID", "MMS_MMCLASS", "MMS_TIMESTAMP", "MMS_EXPIRYDATE",
"MMS_EARLIESTDELIVERYTIME", "MMS_DELIVERYREPORT", "MMS_READREPLY",
"MMS_REPLYCHARGING", "MMS_REPLYDEADLINE", "MMS_REPLYCHARGINGSIZE",
"MMS_PRIORITY", "MMS_SUBJECT", "MMS_ALLOWADAPTATIONS",
"MMS_CHARGEDPARTY", "MMS_MMSCONTENT", "MMS_DISTRIBUTIONINDICATOR",
"MMS_TO", "MMS_CC", "MMS_FLAG", "MMS_CONTENTTYPE", "MMS_CONTENTID",
"MMS_RECOUNT", "MMS_GROUPFLAG" };
public int getColumnCount()
{
return title.length;
}
public int getRowCount()
{
return sjwVec.size();
}
public String getColumnName(int col)
{
return title[col];
}
@SuppressWarnings("unchecked")
public Object getValueAt(int row, int column)
{
if (!sjwVec.isEmpty())
return ((Vector) sjwVec.elementAt(row)).elementAt(column);
else
return null;
}
@SuppressWarnings("unchecked")
public Class getColumnClass(int c)
{
// 这里要对空数据集进行检验
if (getValueAt(0, c) != null)
{
return getValueAt(0, c).getClass();
} else
{
return Object.class;
}
}
public boolean isCellEditable(int row, int col)
{
/*
if (col == 0)
{
return false;
} else
{
return true;
}*/
return false;
}
public void setValueAt(Object aValue, int row, int column)
{
// body[row][column] = aValue;
}
}
上面是我的AbstractTableModel,我在程序使用的时候,有的时候会报异常呢 ?下面就是我在程序使用的原代码:
SjwTable.fireTableStructureChanged();//
String sjwSql = "select * from mms_submit where (mms_flag=10 or mms_flag=11) and rownum <=10";
ResultSet rs = db.DbExecuteQuery(sjwSql);
while (rs.next())
{
Vector rec_vector=new Vector(); 
for (int z = 1; z <= 29; z++)
{
rec_vector.addElement(rs.getString(z));
}
aSjwTable.sjwVec.addElement(rec_vector);
i = i + 1;
}
aSjwTable.fireTableDataChanged();下面出现异常信息:
Exception in thread "AWT-EventQueue-0" java.lang.ArrayIndexOutOfBoundsException: 8 >= 3
at java.util.Vector.elementAt(Unknown Source)
at javax.swing.table.DefaultTableColumnModel.getColumn(Unknown Source)
at javax.swing.plaf.basic.BasicTableHeaderUI.paint(Unknown Source)
at javax.swing.plaf.ComponentUI.update(Unknown Source)
at javax.swing.JComponent.paintComponent(Unknown Source)
at javax.swing.JComponent.paint(Unknown Source)
at javax.swing.JComponent.paintChildren(Unknown Source)
at javax.swing.JComponent.paint(Unknown Source)
at javax.swing.JViewport.paint(Unknown Source)
at javax.swing.JComponent.paintChildren(Unknown Source)
at javax.swing.JComponent.paint(Unknown Source)
at javax.swing.JComponent.paintToOffscreen(Unknown Source)
at javax.swing.BufferStrategyPaintManager.paint(Unknown Source)
at javax.swing.RepaintManager.paint(Unknown Source)
at javax.swing.JComponent._paintImmediately(Unknown Source)
at javax.swing.JComponent.paintImmediately(Unknown Source)
at javax.swing.RepaintManager.paintDirtyRegions(Unknown Source)
at javax.swing.RepaintManager.paintDirtyRegions(Unknown Source)
at javax.swing.RepaintManager.seqPaintDirtyRegions(Unknown Source)
at javax.swing.SystemEventQueueUtilities$ComponentWorkRequest.run(Unknown Source)
at java.awt.event.InvocationEvent.dispatch(Unknown Source)
at java.awt.EventQueue.dispatchEvent(Unknown Source)
at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.run(Unknown Source)

解决方案 »

  1.   

    很明显的一个数组越界的问题。好好看看下面的模型数据构造,是不是会有错误
    while (rs.next()) 

    Vector rec_vector=new Vector(); 
    for (int z = 1; z <= 29; z++) 

    rec_vector.addElement(rs.getString(z)); 

    aSjwTable.sjwVec.addElement(rec_vector); 
    i = i + 1; 
      

  2.   

    我也遇到相关的问题怎么获得table中某一个字段呢? 获得表格的 用vectrvor存数据的表格某一单元格,
    然后获得它的数值,比如弹出相关的信息,对话框之类的 
       DefaultTabletModel dtm=new DefaultTableModel();
       Table table=new JTable(dtm);
        scp.getViewport().add(table);
    table.addMouseListener(new MouseAdapter(){
          public void mouseClicked(MouseEvent e){ 
            if(e.getClickCount() == 2){ 
              JOptionPane.showMessageDialog(null,"doubleClicked!");
              System.out.println("table 的双击事件");
              new AddDe();//窗口
            } 
    我写了这个,但是它不是每次点击都能弹出窗口的 你懂吗? 
    qq 34544503 谢谢我也很关注你的这个问题