当前位置: 首页 > 知识库问答 >
问题:

如何防止TableView在javaFX 8中进行TableCol的重新排序?

严信瑞
2023-03-14

我读了这个https://bugs.openjdk.java.net/browse/JDK-8102128,但我还没有在JavaFX 8的Api中找到一些东西。在TableView中没有防止重新排序的方法吗?

共有3个答案

吴谦
2023-03-14

我喜欢亚历山大·钦加列夫的想法,但我认为代码会产生内存泄漏!每次宽度属性发生变化时,都会注册一个新的侦听器,而旧的侦听器永远不会被垃圾收集!因此,您可以存储对侦听器的引用,并确保在添加新侦听器之前将其从可观察值(在本例中为重新排序属性)中删除,或者确保侦听器仅添加一次到重新排序属性。

我使用了只改变一次的皮肤属性(如果我没弄错的话)来添加我的侦听器:

tableView.skinProperty().addListener((obs, oldSkin, newSkin) -> {
    final TableHeaderRow header = (TableHeaderRow) lookup("TableHeaderRow");
    header.reorderingProperty().addListener((o, oldVal, newVal) -> header.setReordering(false));
});
柳星晖
2023-03-14

我知道这个问题被标记为<code>java-8</code>,但对于那些漫不经心的人来说,在<code>Java9</code>中,所有上述代码都会因为模块化而中断,这使得<code>。sun包不可访问,并删除impl_。尽管有这些变化,它还是引入了方便的公共方法,您可以使用这些方法:

  • 设置可重新排序(布尔值)
  • 获取可重新排序()

对于TablecolnBase,例如TableCol用于set Reorderable,

冀翰翮
2023-03-14

花了半天时间试图解决这个问题。也许我的调查对其他人有用。可以使用一些黑客来禁用列重新排序。以下是步骤:

  1. 获取表头。这可以按如下所述完成:https://stackoverflow.com/a/12465155
  2. 将更改事件侦听器添加到重新排序属性,这会将重新排序设置回 false。

完整代码在这里:

tableView.widthProperty().addListener(new ChangeListener<Number>()
{
    @Override
    public void changed(ObservableValue<? extends Number> source, Number oldWidth, Number newWidth)
    {
        TableHeaderRow header = (TableHeaderRow) tableView.lookup("TableHeaderRow");
        header.reorderingProperty().addListener(new ChangeListener<Boolean>() {
            @Override
            public void changed(ObservableValue<? extends Boolean> observable, Boolean oldValue, Boolean newValue) {
                header.setReordering(false);
            }
        });
    }
});

我不确定这种解决方案的副作用,但是快速测试表明这种解决方案效果很好。

 类似资料:
  • 问题内容: JavaFX2的TableView具有“用户在运行时重新排序列”的功能。我想为我的应用程序中的一个特定表禁用此功能。 查看API文档,没有明显的API挂钩。但是,有-property。根据文档,它代表 属于此TableView的TableColumns。当用户重新排序TableView列时,此列表将更新以反映当前的视觉顺序。 希望我至少能够在发生更改后重置更改,所以我尝试添加一个侦听器

  • 问题内容: 我目前正在使用以下查询来使用php获取mysql中的值: 该代码正在运行,但是现在我担心sql注入。 如何防止SQL注入? 这样安全吗? 问题答案: 来自WordPress Codex,关于保护查询免受SQL注入攻击 : 如果进一步向下滚动,则有一些示例。 您还应该阅读数据库验证文档 ,以更全面地了解WordPress中的SQL转义。

  • 问题内容: 如果将用户输入未经修改地插入到SQL查询中,则应用程序容易受到SQL注入的攻击,如以下示例所示: 这是因为用户可以输入类似的内容value’); DROP TABLE table;–,并且查询变为: 可以采取什么措施来防止这种情况的发生? 问题答案: Use prepared statements and parameterized queries. These are SQL sta

  • 问题内容: 我有一个简单的表格,我不想多次意外提交。 当他们第一次看到该页面时,我可以轻松地阻止他们进行多次单击,但是我无法控制他们单击“后退”按钮。 因此,在与Struts合作之后,我决定采用表单提交令牌。 有更容易的方法吗?Seam中已经有此功能吗?如果没有,我应该如何在Seam中构建此功能? //编辑//这里只是澄清一下,我不需要某些东西可以防止用户双击。已经解决了。 具体用例如下:用户单击

  • 我用JavaFX2.1创建了我的应用程序,最近用JavaFX8升级到JDK 8。 当我更改ComboBox的值时,TableView会中断,但如果我在表中选择某些内容,则可以。 Netbeans显示: javafx。场景CssStyleHelper calculateValue警告:在解析规则“*”中的“-fx文本填充”查找时,无法解析“-fx文本背景色”。在样式表jar:file:/C:/Pro

  • 我在我的应用程序中使用导航栏,每次我选择一个项目时,它都会加载一个片段。 我能够使用相同的文本字段和按钮保存片段的状态,但有一个片段可以加载地图、添加标记、集群并执行。 每次我转到另一个菜单项并返回时,它都会重新加载所有内容,例如AsyncTask、Cluster、Markers。我如何停止此片段以不再重新创建地图并在返回时保存状态: Udate 1:我更新了代码,但问题仍然存在 主要活动: 主片