JTable中我用数据库的内容显示可以!,我要通过JTable割除数据库的一行,可以割除但是,当时显示不出来,要全部退出,再编译执行,才可以显示少拉一行,请问怎么解决可以变成动态的时时显示啊
分没拉 今天用光拉 谢谢大家帮我看看

解决方案 »

  1.   

    你看这个例子
    // Created on 2005-4-24
    package Control.ViewControl;import javax.swing.table.*;
    import java.util.*;public class InnerTableModel extends AbstractTableModel {
    private String colName[];
    private Class colClass[];
    private ArrayList cellData = new ArrayList(1000);
    private boolean colEditable[]; public void resetTable() {
    colName = null;
    colClass = null;
    cellData.clear();
    colEditable = null;
    }
    public InnerTableModel() {
    resetTable();
    }
    public void addColumns(String colName[], Class colClass[], boolean editable) {
    assert colName.length == colClass.length;
    this.colName = colName;
    this.colClass = colClass;
    int col = colName.length;
    colEditable = new boolean[col];
    for (int i = 0; i < col; i++)
    colEditable[i] = editable;
    }
    public int getRowCount() {
    return cellData.size();
    }
    public int getColumnCount() {
    return colName.length;
    }
    public Class getColumnClass(int col) {
    return colClass[col];
    }
    public void setColumnEditable(int col, boolean access) {
    colEditable[col] = access;
    }
    public Object getValueAt(int row, int col) {
    Object[] line = (Object[]) cellData.get(row);
    return line[col];
    }
    public String getColumnName(int col) {
    return colName[col];
    }
    public boolean isCellEditable(int row, int col) {
    return colEditable[col];
    }
    public void setValueAt(Object val, int row, int col) {
    Object line[] = (Object [])cellData.get(row);
    line[col] = val;
    cellData.set(row, line);
    fireTableDataChanged();
    }
    public void insertBlankRow(int index) {
    Object line[] = new Object[colName.length];
    cellData.add(index, line);
    fireTableDataChanged();
    }
    public void addBlankRow() {
    Object line[] = new Object[colName.length];
    cellData.add(line);
    fireTableDataChanged();
    }
    public void insertBlankRow(int index, int lines) {
    Object line[] = new Object[colName.length];
    for (int i = 0; i < lines; i++)
    cellData.add(index, line);
    fireTableDataChanged();
    }
    public void addBlankRow(int lines) {
    Object line[] = new Object[colName.length];
    for (int i = 0; i < lines; i++)
    cellData.add(line);
    fireTableDataChanged();
    }
    public void addSpecificRow(Object line[]) {
    assert line.length == colName.length;
    cellData.add(line);
    }
    public void addSpecificRow(ArrayList lines) {
    Object[] line = (Object[])lines.get(0);
    assert line.length == colName.length;
    cellData.addAll(lines);
    }
    public void removeRow(int index) {
    cellData.remove(index);
    fireTableDataChanged();
    }
    }
    // Created on 2005-4-24
    package Control.ViewControl;import javax.swing.JFrame;
    import javax.swing.JTable;
    public class ab extends JFrame { private javax.swing.JPanel jContentPane = null;
    private JTable jTable = null;
    /**
     * This method initializes jTable
     * 
     * @return javax.swing.JTable
     */    
    private JTable getJTable() {
    if (jTable == null) {
    InnerTableModel ar= new InnerTableModel();
    String n[]={"name","age","abroad"};
    Class c[] = {String.class,Integer.class,Boolean.class };
    ar.addColumns(n,c,true);
    Object d[]={"chen",new Integer(23),new Boolean(true)};
    ar.addSpecificRow(d);
    jTable = new JTable(ar);
    ar.addBlankRow();
    ar.insertBlankRow(0);
    ar.removeRow(1);
    }
    return jTable;
    }
      public static void main(String[] args) {
      ab dd = new ab();
       }
    /**
     * This is the default constructor
     */
    public ab() {
    super();
    initialize();
    }
    /**
     * This method initializes this
     * 
     * @return void
     */
    private void initialize() {
    this.setSize(300,200);
    this.setTitle("JFrame");
    this.setContentPane(getJContentPane());
    this.setVisible(true);
    }
    /**
     * This method initializes jContentPane
     * 
     * @return javax.swing.JPanel
     */
    private javax.swing.JPanel getJContentPane() {
    if(jContentPane == null) {
    jContentPane = new javax.swing.JPanel();
    jContentPane.setLayout(new java.awt.BorderLayout());
    jContentPane.add(getJTable(), java.awt.BorderLayout.NORTH);
    }
    return jContentPane;
    }
    }
    这样是可以动态处理表格的,但是也有问题,就是表头没有显示,不知道是什么问题。
    问了也没有人回答。csdn现在好像没什么厉害的人了
      

  2.   

    private javax.swing.JPanel getJContentPane() {
    if(jContentPane == null) {
    jContentPane = new javax.swing.JPanel();
    jContentPane.setLayout(new java.awt.BorderLayout());
    jContentPane.add(new JScrollPane(getJTable()), java.awt.BorderLayout.NORTH);
    }
    return jContentPane;
    }
    }
    看文档把问题解决了
    这个table是可以动态改变内容的,当然还要改,把改变内容的代码放到一个并行线程去执行
      

  3.   

    因该是你没有动态更新table,更新treemodel中的数组之后,再调用treemodle.fireTableDataChanged();这样就可以动态更新了。