比如:首先单击客户按钮,在JScrollPanel(sp)中显示一张客户表,
再单击供货商按钮,在sp中也确实可以显示出供货商表,但当单击表列名那一行时,整个表又变回客户表的内容。就是当单击表列名或试图改变某单元格宽度时,整个表变回显示打开的第一张表的内容。
这怎么解决?

解决方案 »

  1.   

    LZ的问题总结是想在JTable发生某些特定事件的时候,整个Table做出一些变化响应
    建议你去重写AbstractTableModel里面的fireTableChanged(TableModelEvent e)方法TableModelEvent可以匹配各种发生在JTable上的事件,任何一个事件都会触发此函数,
    你先判断发生的是否是你试图监视的改变列宽等,然后就可以通过Event得到Source产生响应 
      

  2.   

    谢谢,我是一下。
    还有就是,如果JTable没有设置setEnable(),单击某一个单元格,这一行也会显示第一次显示的表的内容,则应该遇上一个问题是一个毛病吧???
      

  3.   

    我显示表格的源代码,每次显示一个表都调用这个//在MainFrame资料显示滚动区内显示要求的表
    public static void showTable(MainFrame mf, AbstractTableModel tableModel) {
    JScrollPane sp =  mf.getScrollPane();  //获取编辑区
    //移除旧表
    if(sp != null) {
    mf.validate();      //
    sp.removeAll();     //不知道哪个有用,
    sp.updateUI();      //  索性全用上了
    mf.remove(sp);     //
    }

    JTable table = new JTable();
    table.setModel(tableModel); tableModel.fireTableStructureChanged();//   JTable刷新结构   
    tableModel.fireTableDataChanged();//   刷新JTable数据 //添加显示新表
    sp = new JScrollPane(table);
    mf.add(sp,BorderLayout.CENTER);
    mf.validate();
    }实际用时,我传入的是一个 DefaultTableModel
      

  4.   

    太复杂了吧。
    建议楼主
    new 两个不同的table 一个存放客户表table1,一个存放供货商表table2。
    sp.removeAll();
    sp.add(table1 or table2, BorderLayout.CENTER);
    sp.updateUI();你不要拿JFrame做文章。
      

  5.   

    补充一下,sp只需创建一个。button消息处理函数中,执行以上三行代码即可。
      

  6.   

    我最近也在做类似的。但我是通过点击树状结构改变表内容。。每点击一次就调用sql语句拼接类和数据封装类。。存储在vector数组进行调用。如果你建表模型这边没错(没有其他事件监听)我估计是你的sql拼串那出问题了。。
      

  7.   

    谢谢。
    我觉得我的SQL那里应该没问题,也是用Vector保存的,我验证过,数据是没错的,
    主要是显示问题,每次更换表时就出现那种情况:单击某一单元格,就显示出显示的第一张表的该位置行的内容,
    好象是第一张表出现后就没有删掉,我企图找寻一下显示第一张表时的代码有什么问题,但那代码也是和显示以后的表一样的呀。
    天啊~~,这问题我都研究好几天了,没有搞头,所以到这里来求助,解大家的力量帮我一把,同时我继续往下写其他代码。大家来帮忙啊,我知道高手很多啊,不要吝啬呀,哈哈。