用一个jTable来显示不同的表?不太明白你的意思。试试jTable.setModel()行不行。

解决方案 »

  1.   

    DefaultTableMode是继承了AbstractTableModel的,也就是说DefaultTableMode比AbstractTableModel多添加了一些基本的jTable模式,即设定了一些方法的默认结构,比如jTable行的可选设置,改动设置等……
    至于你的需要,建议去这里看看有无你需要的例子:
    http://www2.gol.com/users/tame/swing/examples/SwingExamples.html
      

  2.   

    AbstractTableModel非常简单,只是用来得到Table的一些属性和对一些事件进行处理,并不能设置它的属性和对Table添加数据。因为他继承自TableModel,所以可以用它来接受JTable的TableModel对象,主要是对那些在JTable构造函数里已经添加了数据的表,而不是用TableModel来添加数据的表。
    DefaultTableMode是个比较复杂的TableMode,控制也复杂,可以构筑复杂的表格。
    更换Model(DefaultTableMode或者其子类):
    table.setModel(model);
    更新UI:
    table.upDateUI();package javax.swing.table;import java.io.Serializable;
    import java.util.EventListener;
    import javax.swing.event.*;public abstract class AbstractTableModel
        implements TableModel, Serializable
    {    public AbstractTableModel()
        {
            listenerList = new EventListenerList();
        }    public String getColumnName(int i)
        {
            String s = "";
            for(; i >= 0; i = i / 26 - 1)
                s = (char)((char)(i % 26) + 65) + s;        return s;
        }    public int findColumn(String s)
        {
            for(int i = 0; i < getColumnCount(); i++)
                if(s.equals(getColumnName(i)))
                    return i;        return -1;
        }    public Class getColumnClass(int i)
        {
            return java.lang.Object.class;
        }    public boolean isCellEditable(int i, int j)
        {
            return false;
        }    public void setValueAt(Object obj, int i, int j)
        {
        }    public void addTableModelListener(TableModelListener tablemodellistener)
        {
            listenerList.add(javax.swing.event.TableModelListener.class, tablemodellistener);
        }    public void removeTableModelListener(TableModelListener tablemodellistener)
        {
            listenerList.remove(javax.swing.event.TableModelListener.class, tablemodellistener);
        }    public void fireTableDataChanged()
        {
            fireTableChanged(new TableModelEvent(this));
        }    public void fireTableStructureChanged()
        {
            fireTableChanged(new TableModelEvent(this, -1));
        }    public void fireTableRowsInserted(int i, int j)
        {
            fireTableChanged(new TableModelEvent(this, i, j, -1, 1));
        }    public void fireTableRowsUpdated(int i, int j)
        {
            fireTableChanged(new TableModelEvent(this, i, j, -1, 0));
        }    public void fireTableRowsDeleted(int i, int j)
        {
            fireTableChanged(new TableModelEvent(this, i, j, -1, -1));
        }    public void fireTableCellUpdated(int i, int j)
        {
            fireTableChanged(new TableModelEvent(this, i, i, j));
        }    public void fireTableChanged(TableModelEvent tablemodelevent)
        {
            Object aobj[] = listenerList.getListenerList();
            for(int i = aobj.length - 2; i >= 0; i -= 2)
                if(aobj[i] == (javax.swing.event.TableModelListener.class))
                    ((TableModelListener)aobj[i + 1]).tableChanged(tablemodelevent);    }    public EventListener[] getListeners(Class class1)
        {
            return listenerList.getListeners(class1);
        }    public abstract Object getValueAt(int i, int j);    public abstract int getColumnCount();    public abstract int getRowCount();    protected EventListenerList listenerList;
    }
      

  3.   

    那么比如我要创建一个自己的TableModel时是从哪个继承下来比较好呢?我看到很多例子多是从AbstractTableModel继承的,但DefaultTableModel有很多方法挺好的能谈谈两中继承的差异和优劣吗?谢谢
      

  4.   

    如果你要继承AbstractTableModel则要求写的代码很多,看看DefaultTableModel的代码就知道了,但是功能扩充强大,如果继承DefaultTableModel则省事很多,一般应用继承后者就够了。
      

  5.   

    如果你想对你的JTable加入些特殊的处理,那使用AbstractTableModel会更灵活,不过你要写更多的代码,如果你的Jtable中只有些Lable,TextField,ComboBox等那就用DefaultTableModel,它已经实现了这些组件的基本的处理方法。