Natural

           

          JTable監聽列寬變動

          最近遇到個關于JTable列寬變動的需求:拖動改變JTable某一列的寬度后需要做一些業務處理。

          JTable的ColumnModel有個監聽列模型的方法(TableColumnModelListener),但這個是拖動時響應,且拿不到列信息,這不符合我想要的。

          那只能從鼠標事件的語義去分析了,在拖動列的響應事件中判斷是否是目標列,在結束拖動時鼠標的釋放事件中去完成業務工作。

          查看了下JTable的API,可以給JTableHeader加上鼠標監聽。

          下面代碼即監聽“C2”列的demo:

           1 public class JTableTest extends JFrame{
           2     JScrollPane sp1 = new JScrollPane();
           3     JTable table = new JTable();
           4     DefaultTableModel tm = new DefaultTableModel();
           5     enum ColumnName {
           6         C1,C2,C3
           7     }
           8 
           9     void doSomething(){
          10         int colNum = tm.getColumnCount();
          11         forint i = 0; i < colNum; i++ ){
          12             if( ColumnName.C2.name().equals( table.getColumnName( i ) ) ){
          13                 TableColumn tc = table.getColumnModel().getColumn( i );
          14                 System.out.println( "width: " + tc.getWidth() );
          15                 // TODO : do something what you wanna 
          16             }
          17         }
          18     }
          19 
          20     public JTableTest(){
          21         this.setSize( 400300 );
          22         this.getContentPane().add( sp1, BorderLayout.CENTER );
          23         sp1.getViewport().add( table );
          24         for( ColumnName col : ColumnName.values() ){
          25             tm.addColumn( col );
          26         }
          27         table.setModel( tm );
          28         class ChangedColumn{
          29             boolean changed = false;
          30             boolean isChanged(){
          31                 return changed;
          32             }
          33             void setChanged( boolean changed ){
          34                 this.changed = changed;
          35             }
          36         }
          37         final ChangedColumn c2 = new ChangedColumn();
          38         table.getTableHeader().addMouseListener( new MouseListener(){
          39             @Override
          40             public void mouseReleased( MouseEvent e ){
          41                 System.out.println( "released" );
          42                 if( c2.isChanged() ){
          43                     doSomething();
          44                     c2.setChanged( false );
          45                 }
          46             }
          47             @Override
          48             public void mousePressed( MouseEvent e ){}
          49             @Override
          50             public void mouseExited( MouseEvent e ){}
          51             @Override
          52             public void mouseEntered( MouseEvent e ){}
          53             @Override
          54             public void mouseClicked( MouseEvent e ){}
          55         } );
          56         table.getTableHeader().addMouseMotionListener(    new MouseMotionListener(){
          57             @Override
          58             public void mouseMoved( MouseEvent e ){}
          59             @Override
          60             public void mouseDragged( MouseEvent e ){
          61                 System.out.println( "dragging" );
          62                 TableColumn changedColumn = ( (JTableHeader)e.getSource() ).getResizingColumn();
          63                 if( changedColumn != null 
          64                         && ColumnName.C2.name().equals( changedColumn.getHeaderValue() ) ){
          65                     c2.setChanged( true );
          66                 }
          67             }
          68         } );
          69         addWindowListener( new WindowAdapter(){
          70             public void windowClosing( WindowEvent e ){
          71                 System.exit( 0 );
          72             }
          73         } );
          74         setVisible( true );
          75     }
          76 
          77     public static void main( String[] args ){
          78         new JTableTest();
          79     }
          80 }

          posted on 2012-10-15 11:15 此號已被刪 閱讀(911) 評論(0)  編輯  收藏 所屬分類: JAVA

          導航

          統計

          常用鏈接

          留言簿(8)

          隨筆分類(83)

          隨筆檔案(78)

          文章檔案(2)

          相冊

          收藏夾(7)

          最新隨筆

          搜索

          積分與排名

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 福贡县| 台北县| 元朗区| 澎湖县| 新郑市| 海南省| 彰化县| 温宿县| 邵阳市| 衡南县| 清流县| 宜兴市| 贡山| 玉林市| 海淀区| 蕉岭县| 平遥县| 襄樊市| 深水埗区| 通山县| 哈尔滨市| 柳州市| 保定市| 明光市| 渭源县| 祁连县| 内黄县| 鹿邑县| 株洲县| 金堂县| 潮安县| 稻城县| 鄄城县| 封丘县| 濮阳县| 鄂尔多斯市| 溧阳市| 辽阳市| 海晏县| 凭祥市| 健康|