JavaFX “缺少功能调查”中提到的“缺少功能”的第一件事就是能够自动调整表/树表中的列大小。 没错,没有公共API是正确的,但是当您密切关注时,您会注意到JavaFX内部一定有执行此操作的代码,因为用户可以通过双击分隔线自动调整列的大小。在该列与右侧的下一列之间。

但是像大多数人一样,我觉得这对我的代码还不够好。 我想要一个FlexGanttFX的API,该API允许用户自动调整甘特图内一列或所有列的大小。 因此,我搜索了隐藏在树表或树表皮肤某处(实际上不记得在哪里)的代码,并在类中进行了一些细微修改以重新使用它。

以下是这项工作的结果。 它以TreeTableView而不是TableView为目标,但是使它适用于标准表很简单。 只需将所有TreeTableColumn出现替换为TableColumn即可 。 请注意,调整所有行的大小可能会对性能产生严重影响,因此您可能必须通过maxRows参数来限制要用于计算的行

/*** This method will resize all columns in the tree table view to ensure that* the content of all cells will be completely visible. Note: this is a very* expensive operation and should only be used when the number of rows is* small.** @see #resizeColumn(TreeTableColumn, int)*/public final void resizeColumns() {resizeColumns(-1);}/*** This method will resize all columns in the tree table view to ensure that* the content of all cells will be completely visible. Note: this is a very* expensive operation and should only be used with a small number of rows.** @param maxRows*            the maximum number of rows that will be considered for the*            width calculations** @see #resizeColumn(TreeTableColumn, int)*/public final void resizeColumns(int maxRows) {for (TreeTableColumn<R, ?> column : getTreeTable().getColumns()) {resizeColumn(column, maxRows);}}/*** This method will resize the given column in the tree table view to ensure* that the content of the column cells will be completely visible. Note:* this is a very expensive operation and should only be used when the* number of rows is small.** @see #resizeColumn(TreeTableColumn, int)*/public final void resizeColumn(TreeTableColumn<R, ?> column) {resizeColumn(column, -1);}/*** This method will resize the given column in the tree table view to ensure* that the content of the column cells will be completely visible. Note:* this is a very expensive operation and should only be used when the* number of rows is small.** @see #resizeColumn(TreeTableColumn, int)*/public final void resizeColumn(TreeTableColumn<R, ?> tc, int maxRows) {final TreeTableColumn col = tc;List<?> items = getItems();if (items == null || items.isEmpty()) {return;}Callback cellFactory = tc.getCellFactory();if (cellFactory == null) {return;}TreeTableCell<R, ?> cell = (TreeTableCell<R, ?>) cellFactory.call(tc);if (cell == null) {return;}// set this property to tell the TableCell we want to know its actual// preferred width, not the width of the associated TableColumnBasecell.getProperties().put("deferToParentPrefWidth", Boolean.TRUE); //$NON-NLS-1$// determine cell paddingdouble padding = 10;Node n = cell.getSkin() == null ? null : cell.getSkin().getNode();if (n instanceof Region) {Region r = (Region) n;padding = r.snappedLeftInset() + r.snappedRightInset();}TreeTableRow<R> treeTableRow = new TreeTableRow<>();treeTableRow.updateTreeTableView(treeTableView);int rows = maxRows == -1 ? items.size(): Math.min(items.size(), maxRows);double maxWidth = 0;for (int row = 0; row < rows; row++) {treeTableRow.updateIndex(row);treeTableRow.updateTreeItem(treeTableView.getTreeItem(row));cell.updateTreeTableColumn(col);cell.updateTreeTableView(treeTableView);cell.updateTreeTableRow(treeTableRow);cell.updateIndex(row);if ((cell.getText() != null && !cell.getText().isEmpty())|| cell.getGraphic() != null) {getChildren().add(cell);cell.impl_processCSS(false);double w = cell.prefWidth(-1);maxWidth = Math.max(maxWidth, w);getChildren().remove(cell);}}// dispose of the cell to prevent it retaining listeners (see RT-31015)cell.updateIndex(-1);// RT-23486double widthMax = maxWidth + padding;if (treeTableView.getColumnResizePolicy() == TreeTableView.CONSTRAINED_RESIZE_POLICY) {widthMax = Math.max(widthMax, tc.getWidth());}tc.impl_setWidth(widthMax);}

翻译自: https://www.javacodegeeks.com/2015/12/javafx-tip-22-autosize-tree-table-columns.html

JavaFX技巧22:“自动调整大小(树)”表列相关推荐

  1. javafx 表格列拖拉_JavaFX技巧22:“自动调整大小(树)”表列

    javafx 表格列拖拉 JavaFX "缺少功能调查"中提到的"缺少功能"的第一件事就是能够自动调整表/树表中的列大小. 没错,没有公共API是正确的,但是当 ...

  2. excel一列求和_excel功能小技巧:自动求和的注意事项

    编按:哈喽,大家好!在EXCEL里有个非常方便的按钮,叫做自动求和.不需要输入公式,直接一点,即可得出求和结果.由于它操作上的便利,所以深受小白喜爱.不过看着简单的自动求和按钮,实际上却藏着不少暗坑, ...

  3. Html:小技巧:自动提交表单的实现方法

    Html:小技巧:自动提交表单的实现方法 方法一: <html> <head> <title>Untitled Document</title> (1) ...

  4. 怎样备份计算机注册表文件格式,小技巧:教你自动备份注册表!

    原标题:小技巧:教你自动备份注册表! 今天小A想来跟大家分享一下关于[注册表]的内容.作为Windows的核心组件,一旦注册表受损很容易导致系统崩溃.在Windows 10 1803版本之前,系统默认 ...

  5. JavaFX技巧9:请勿混用Swing / JavaFX

    JavaFX团队非常努力地说服我们,因为可以将Swing内容嵌入JavaFX UI中,因此可以很容易地从Swing迁移到JavaFX. 我必须承认,我从来没有亲自尝试过,但是根据我从客户那里得到的反馈 ...

  6. CATIA二次开发——自动导出BOM表

    一.引言 BOM物料清单称为产品结构表,用来表示产品是由那些零组件或素材原料所结合而成的,通常包括零件名称,零件编号,零件简图,零件尺寸,零件制造方法,零件质量,零件材质,BOM是后续项目进展的基础. ...

  7. EXCEL/WPS小技巧(自动填充排序,身份证生日号码的提取)

    EXCEL/WPS小技巧(自动填充排序,身份证生日号码的提取) Excel/wps的自动填充排序 方法一 方法二 身份证生日号码的提取 Excel/wps的自动填充排序 方法一 Excel和wps的操 ...

  8. excel怎么设置打印区域_这也太省心了吧!excel的打印区域竟然可以自动调整大小...

    转自:Excel精英培训 在excel中打印表格需要设置打印区域(页面布局 - 打印区域),一旦设置好是不会自动改变的.当表格区域大小改变时,如果想让打印区域也能自动调整大小,就需要使用兰色今天分享的 ...

  9. 实用算法题:excel表列序号与十进制数字的互相转化算法讲解!

    日常生活中excel的使用大家都不陌生,可能几列的表格我们还能脑海中参照A-Z来区分对应的数字应该是几.但有的表格列过多,或者鼠标一甩到了很后面的位置,好几个字母拼起来,一时间很难反映过来对应的数字是 ...

最新文章

  1. Lua生成Guid(uuid)
  2. WebServieces 部署到PocketPC上的问题(SystemNotSupportException)
  3. java断点续传 框架_java实现断点续传
  4. 百度地图 app 点击事件无效、不触发 解决方案
  5. Docker最佳实践-部署LNMP环境
  6. 2019-05-15 Java学习日记 day5
  7. Win7上Git安装及配置过程 [转]
  8. django前端模板循环多个list
  9. ubuntu ssh 登录日志_全球第一开源ERP Odoo操作手册 安装ssh服务和ssh客户端
  10. 如何解决xp进系统的时候需要按enter键
  11. 《程序员面试宝典》中的一些面试题
  12. 树莓派python 简介_树莓派与python语言概述
  13. c51语言串口,C51 语言编程:单片机与 PC 串口通信程序
  14. 轻量锁volatile
  15. 冯提莫与斗鱼“好聚好散”复制一个当红女主播要迈过多少难关?
  16. 1004: 三位数的数位分离 C语言
  17. linux clock_gettime函数详解
  18. Unity URP Shader Graph Unit 阴影 light Atten
  19. 经典例题——发工资(贪心)
  20. Codeforces Round 520 div2

热门文章

  1. 用turtle画皮卡丘
  2. C++描述杭电OJ 2016.数据的交换输出 ||
  3. 试编写算法,设任意n个整数存放于数组A[1...n]中,将所有正数排在所有负数前面(要求:算法时间复杂度为O(n))
  4. 2020蓝桥杯省赛---java---B---10(整数小拼接)
  5. 基本类型和字符串互相转换
  6. phone6s home键按不动了怎么办 苹果6s home键按不动解决方法
  7. springboot创建项目 编写dao serviece 和controller 持久层用mybatis
  8. c语言程序为什么运行一半就自动关闭了,C语言为什么程序运行一半就出现停止工作...
  9. 转: 虚拟IP(VIP)原理
  10. tomcat(15)Digester库