你的意思是不是读取完就刷新?那就在你的读取数据的程序里加一个fireTableDataChanged不就行了吗?

解决方案 »

  1.   

    我是想从我的数据库里将数据读出来,然后将他显示在jtable中。有哪个方法能实现呢?
      

  2.   

    用数据去创建MODEL,在通过MODEL的数据变化去刷新你的table把你从数据库读出来的数据做为数组,vector或者hashmap,然后在model上设置好你的表头对应的每个字段,然后把数据传进去就行了,给你相关代码你看~前段时间项目做的覆写JTable类/*
     * 创建日期 2004-8-18
     *
     * 更改所生成文件模板为
     * 窗口 > 首选项 > Java > 代码生成 > 代码和注释
     */
    package gui;
    import java.util.Vector;
    import javax.swing.ListSelectionModel;
    import javax.swing.table.TableColumnModel;
    import javax.swing.table.TableModel;
    /**
     * @author nijiang
     *
     * 更改所生成类型注释的模板为
     * 窗口 > 首选项 > Java > 代码生成 > 代码和注释
     */
    public class JTable extends javax.swing.JTable
    {
    /**
     * 
     */
    public JTable()
    {
    super();
    }
    /**
     * @param arg0
     * @param arg1
     */
    public JTable(int arg0, int arg1)
    {
    super(arg0, arg1);
    // TODO 自动生成构造函数存根
    }
    /**
     * @param arg0
     */
    public JTable(TableModel arg0)
    {
    super(arg0);
    // TODO 自动生成构造函数存根
    }
    /**
     * @param arg0
     * @param arg1
     */
    public JTable(Object[][] arg0, Object[] arg1)
    {
    super(arg0, arg1);
    // TODO 自动生成构造函数存根
    }
    /**
     * @param arg0
     * @param arg1
     */
    public JTable(Vector arg0, Vector arg1)
    {
    super(arg0, arg1);
    // TODO 自动生成构造函数存根
    }
    /**
     * @param arg0
     * @param arg1
     */
    public JTable(TableModel arg0, TableColumnModel arg1)
    {
    super(arg0, arg1);
    // TODO 自动生成构造函数存根
    }
    /**
     * @param arg0
     * @param arg1
     * @param arg2
     */
    public JTable(
    TableModel arg0,
    TableColumnModel arg1,
    ListSelectionModel arg2)
    {
    super(arg0, arg1, arg2);
    }
    public WbTableModel getDefaultModel()
    {
    TableModel tm = super.getModel();
    return (WbTableModel) tm;
    }
    /* (非 Javadoc)
     * @see javax.swing.JTable#setModel(javax.swing.table.TableModel)
     */
    public void setDefaultModel(WbTableModel arg0)
    {
    // TODO 自动生成方法存根
    super.setModel(arg0);
    this.getColumn("书名").setMinWidth(200);
    this.updateUI();
    }
    //将表格的值传给模式,并刷新UI
    public void setVector(Vector ve)
    {
    getDefaultModel().setTableValues(ve);
    this.updateUI();
    }
    //从表格中,将值传给模式
    public Vector getVector()
    {
    return getDefaultModel().getTableValues();
    }
    }然后是tableModel/*
     * 创建日期 2004-8-14
     *
     * 更改所生成文件模板为
     * 窗口 > 首选项 > Java > 代码生成 > 代码和注释
     */
    package gui;
    import java.util.Vector;
    import javax.swing.event.TableModelListener;
    /**
     * @author goodghost
     *
     * 更改所生成类型注释的模板为
     * 窗口 > 首选项 > Java > 代码生成 > 代码和注释
     */
    public class WbTableModel implements javax.swing.table.TableModel
    {
    String tableHeader[]; //表头 
    Vector tableValues= null; //表值,由类的对象完全转换过来的,
    /**
     * 
     */
    public WbTableModel(String[] tableHeader, Vector tableValues)
    {
    super();
    this.tableHeader= tableHeader;
    this.tableValues= tableValues;
    }
    /* (非 Javadoc)
     * @see javax.swing.table.TableModel#getColumnCount()
     */
    public int getColumnCount()
    {
    return tableHeader.length;
    }
    /* (非 Javadoc)
     * @see javax.swing.table.TableModel#getRowCount()
     */
    public int getRowCount()
    {
    if (tableValues != null)
    {
    return getTableValues().size();
    } else
    return 0;
    }
    /* (非 Javadoc)
     * @see javax.swing.table.TableModel#isCellEditable(int, int)
     */
    public boolean isCellEditable(int arg0, int arg1)
    {
    return false;
    }
    /* (非 Javadoc)
     * @see javax.swing.table.TableModel#getColumnClass(int)
     */
    public Class getColumnClass(int arg0)
    {
    return super.getClass();
    }
    /* (非 Javadoc)
     * @see javax.swing.table.TableModel#getValueAt(int, int)
     */
    public Object getValueAt(int arg0, int arg1)
    {
    if (getTableValues() != null)
    {
    String aaa[]= this.getTableValues().get(arg0).toString().split("__");
    return aaa[arg1];
    } else
    return null;
    }
    /* (非 Javadoc)
     * @see javax.swing.table.TableModel#getColumnName(int)
     */
    public String getColumnName(int arg0)
    {
    return tableHeader[arg0];
    }
    /* (非 Javadoc)
     * @see javax.swing.table.TableModel#addTableModelListener(javax.swing.event.TableModelListener)
     */
    public void addTableModelListener(TableModelListener arg0)
    {
    // TODO 自动生成方法存根
    }
    /* (非 Javadoc)
     * @see javax.swing.table.TableModel#removeTableModelListener(javax.swing.event.TableModelListener)
     */
    public void removeTableModelListener(TableModelListener arg0)
    {
    // TODO 自动生成方法存根
    }
    /**
     * @return
     */
    public Vector getTableValues()
    {
    if (tableValues == null)
    {
    tableValues= new Vector();
    }
    return tableValues;
    }
    /**
     * @param vector
     */
    public void setTableValues(Vector object)
    {
    tableValues= object;
    }
    /* (非 Javadoc)
     * @see javax.swing.table.TableModel#setValueAt(java.lang.Object, int, int)
     */
    public void setValueAt(Object aValue, int rowIndex, int columnIndex)
    {
    // TODO 自动生成方法存根
    }
    }
    最后是TableHeader/*
     * 创建日期 2004-8-16
     *
     * 更改所生成文件模板为
     * 窗口 > 首选项 > Java > 代码生成 > 代码和注释
     */
    package gui;
    /**
     * @author nijiang
     *
     * 更改所生成类型注释的模板为
     * 窗口 > 首选项 > Java > 代码生成 > 代码和注释
     */
    public class TableHeader
    {
    public static final String[] getUserHeader()
    {
    String[] header = {
    };
    return header;
    }
    public static final String[] getBookHeader()
    {
    String[] header = { "书名","ISBN", "作者", "出版社", "出版时间", "版次", "定价" };
    return header;
    }
    public static final String[] getOrderHeader()
    {
    String[] header = { "书名","ISBN",  "作者","出版社",  "出版时间", "定价", "本数" };
    return header;
    }
    public static final String[] getSumOrderHeader()
    {
    String[] header = { "书名","ISBN",  "作者", "出版社", "出版时间", "定价", "本数" };
    return header;
    }
    }
      

  3.   

    上述中就是讲数据库中的数据构造为vector后传递进去
      

  4.   

    可以用观察者模式来实现首先写一个Model类继承ObServable类
    然后写一个抽象类(一个view)继承Janel和实现ObServer接口
    放JTable的类继承这个抽象类
    最后用一个控制类来刷新Model来更新你的JTable
      

  5.   

    to lixiang823517(泥浆) 谢谢 JTable.setVector()的方法的确好用,可以改变JTable的数据还有一个问题就是:如何将JTable的Column显示和隐藏 ,
    是不是用removeColumn(TableColumn aColumn)  ,但怎么不行呀?
      

  6.   

    把column的宽度设为0就隐藏了,好像是perfenceWidth=0,具体的代码你自己查查去