论坛首页 Java企业应用论坛

关于如何更换JTable里的TableModel问题?

浏览 6280 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2007-04-14  
OO
大家好,我的程序是功能是这样的:用户点击一次Button,用JTable显示内容的TableModel就改变一次,我是通过 setTableModel(TableModel newtablemodel)来做的,但发现调用setTableModel()并未将新的TabelModel替换掉旧的TableModel,而 JTable展示的时候是将新旧TableModel的内容都展示出来,不知道是什么原因?请各位赐教。
源程序如下:
这是analy按钮的事件响应函数:
score和newword均为JTable。
analy.addActionListener(new ActionListener(){
      public void actionPerformed(ActionEvent arg0)
      {
        String shopname=shoptoanalyze.getText();
        String sql="SELECT * FROM customerreviews WHERE shopname='"+shopname+"'";
        ArrayList<CustomerReview> cr=mysqloperator.getCustomerReviews(sql);
        Analyzer analyzer=Analyzer.getInstance();
        analyzer.beginAnalyze(cr);
        
        score.setModel(new MyTableModel(analyzer.getresultcolumnnames().toArray(), analyzer.getResultdata()));
        newword.setModel(new MyTableModel(analyzer.getNewwordsdatacolumnnames().toArray(), analyzer.getNewwordsdata()));
        ((MyTableModel)score.getModel()).fireTableStructureChanged();
        ((MyTableModel)score.getModel()).fireTableDataChanged();
        ((MyTableModel)newword.getModel()).fireTableStructureChanged();
        ((MyTableModel)newword.getModel()).fireTableDataChanged();
      }
    });

以下是MyTableModel的代码:
public class MyTableModel extends AbstractTableModel{
    private Object[] columnNames;
    private Object[][] data;
    
    public MyTableModel(Object[] c, Object[][] d)
    {
      columnNames=c;
      data=d;
    }
    
    public int getColumnCount()
    {
      return columnNames.length;
    }
    
    public int getRowCount()
    {
      return data.length;
    }
    
    public String getColumnName(int col)
    {
      if(col>=0&&col<columnNames.length)
        return (String)columnNames[col];
      else
        return "";
    }
    
    public Object getValueAt(int row, int col)
    {
      if(row>=0&&row<data.length)
      {
        if(data.length>0&&col>=0&&col<data[0].length)
          return data[row][col];
        else
          return "";
      }
      return "";
    }
    
    public void setColumnName(Object[] c)
    {
      columnNames=c;
    }
    
    public void setData(Object[][] d)
    {
      data=d;
    }
  }
   发表时间:2007-04-15  
这个要用DefaultTableModel 才能换,而且要repaint下才能显示
0 请登录后投票
   发表时间:2007-04-15  
当你更新Model中的数据后,效果是可以立即显示在view中..不知道LZ的意思是想刷新数据还是怎么样?
0 请登录后投票
   发表时间:2007-04-16  
        ((MyTableModel)score.getModel()).fireTableStructureChanged();  
        ((MyTableModel)score.getModel()).fireTableDataChanged();  
        ((MyTableModel)newword.getModel()).fireTableStructureChanged();  
        ((MyTableModel)newword.getModel()).fireTableDataChanged();
............................
看这个就晕,不需要
modle数据更新后界面就更新了的
0 请登录后投票
   发表时间:2007-04-16  
哎,下个星期开始,也要去做Swing的开发了,头痛~~~~
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics