当user clicks Column header的时候, 我们都知道JTable会自动排序这个column。 现在我想在我的程序内部启用自动排序排某个column该怎么做? 我不想改变TableModel 里的数据,我只想排Jtable的view part(也就是只改变GUI). 我花了很多时间了。 也去看了下JTableHeader 的源码。 就是找不到到底Java是怎么处理 mouse click on header column。 谢谢!

解决方案 »

  1.   

    新建一个数据源,针对原有数据进行排序,传给JTable 显示。 也就是说,系统保存一个原始的数据。
      

  2.   

    通俗点:
    把 TableModel   里的数据备份一份,然后排序当前这份。
      

  3.   

    在TableModel 里的数据是row=2, col=n 的array. 楼上的紫竹朋友可不可以具体点,把这个数据传哪个JTable的哪个method用来该改变它的GUI??这中间有个棘手的问题。 我的JTable里最左边的column是数字, 就是从1-n的数字。在TableModel里的 2D aray(0,0到n-1)位置 就是储存这些数字的。 我很想知道Java内部实现这个功能是在哪个类里。 我的原意是知道了Java怎么实现后我只要照着做, 然后用JTable。convertColumnIndexToModel(int viewColumnIndex) 这个method 去update第一排column 里的数字。 然后我用JTable.validate() 这些changes就会自然update在JFrame里。谢谢帮忙
      

  4.   

    在TableModel   里的数据是row=2,   col=n   的array.   楼上的紫竹朋友可不可以具体点,把这个数据传JTable的哪个method用来该改变它的GUI?? 
      

  5.   

    顶上去。 问题还没解决啊。 我把问题简化一下。 谁只要告诉我当我点击column header的时候, Java处理这个事件的代码是在哪个哪个类里?我自己看就可以了。 50分不难拿吧
      

  6.   

            MouseAdapter listMouseListener = new MouseAdapter() {
                public void mouseClicked(MouseEvent e) {
                    TableColumnModel columnModel = tableView.getColumnModel();
                    int viewColumn = columnModel.getColumnIndexAtX(e.getX()); 
                    int column = tableView.convertColumnIndexToModel(viewColumn); 
                    if (e.getClickCount() == 1 && column != -1) {
                        ........
                    }
                }
            };
            JTableHeader th = tableView.getTableHeader(); 
            th.addMouseListener(listMouseListener); 以监听的方式去处理相应的事件。
      

  7.   

    问题已经解决了。 你们都误会我的意思了。我不是要去监听。 我要程序自动去排序啊。就是比如当我点击后, JAVA是怎么做的。但是我不是要人去点击。 我要程序自动会排序。 可能我没说清楚。 。 谢谢大家的帮忙。 结贴了, 分给大家分了
      

  8.   

    对了, 解决问题要用到RowSorter。 写留给将来有用的人