zoukankan      html  css  js  c++  java
  • JavaFX:禁止TableView的列拖拽功能

    JavaFX中,TableView的列在默认情况下是可拖拽的,但是却没有方法去禁止这个拖拽功能。

    在网上看过一段代码,大致功能是:

    1. 监听TableView中列变化;

    2. 列顺序发生改变,重置为原始顺序。

    1. tblView.getColumns().addListener(new ListChangeListener() {  
    2.         @Override  
    3.         public void onChanged(Change change) {  
    4.           change.next();  
    5.           if(change.wasReplaced()) {  
    6.               tblView.getColumns().clear();  
    7.               tblView.getColumns().addAll(column1,column2...);  
    8.           }  
    9.         }  
    10.     });  

    这个办法需要在匿名类里面保持原始的列顺序。

    可以有更简便的方法做到这一点,如下:

    1.       tableView.getColumns().addListener(new ListChangeListener() {  
    2.     boolean isturnback = false;  
    3.   
    4.     @Override  
    5.     public void onChanged(Change c) {  
    6.           
    7.         if (!isturnback) {  
    8.             while (c.next()) {  
    9.                 if (!c.wasPermutated() && !c.wasUpdated()) {  
    10.                     isturnback = true;  
    11.                     tableView.getColumns().setAll(c.getRemoved());  
    12.                 }  
    13.             }  
    14.         }  
    15.         else {  
    16.             isturnback = false;  
    17.         }  
    18.     }  
    19. });   


    其中:

    1. c.next() 用来接受当前的改变,如果没有这一句,后面的语句将报错;

    2. c.wasPermutated(),判断当前改变是不是置换;

    3. c.wasUpdated(),判断当前改变是不是更新;

    4. 列拖曳的实现并不是被拖曳列的插入删除,而是删除全部列,再按拖曳后的顺序重新插入。c.getRemoved() 可以得到的List是拖曳前的顺序。

    5. 执行setAll(..) 会触发新的Change,所以用istureback 做开关,防止死循环。

    Change 类中还有的下面三个判定方法:

    1. wasAdded(): 判断是否增加新的item;

    2. wasRemoved(): 判断是否删除了item;

    3. wasReplaced(): 判断是否有新的item替换了旧的item;

    在本例中,以上三个方法返回值为true 。

    按照API中的字面上的意思,reset()方法可以取消当前的改变,但测试发现此功能还没有实现。

  • 相关阅读:
    js 递归获取多层树的某个节点
    layui table 打印表格
    tp6 使用queue
    url带参数生成二维码
    redis的常用配置
    《TensorFlow实战》中AlexNet卷积神经网络的训练中
    JavaScript之闭包
    JavaScript之map与parseInt的陷阱
    JavaScript方法中this关键字使用注意
    什么是深度学习?
  • 原文地址:https://www.cnblogs.com/lngrvr/p/javafx_tableview_imdragable.html
Copyright © 2011-2022 走看看