【问题标题】:How to set style for first level child in treetableview如何在treetableview中为第一级孩子设置样式
【发布时间】:2015-08-03 00:41:15
【问题描述】:

我想为所有第一个孩子设置顶部边框,以便一个孩子的数据在一行中显示。 但我无法为这些行设置 id。我尝试了以下代码,但没有帮助。

final PseudoClass firstRowClass = PseudoClass.getPseudoClass("first-child");

devWorkTabBenchtable.setRowFactory(new Callback<TreeTableView<DevWorkTabBench>, TreeTableRow<DevWorkTabBench>>() {

    @Override
    public TreeTableRow<DevWorkTabBench> call(TreeTableView<DevWorkTabBench> param) {
        TreeTableRow<DevWorkTabBench> row = new TreeTableRow<>();
        row.treeItemProperty().addListener(new ChangeListener<TreeItem<DevWorkTabBench>>() {
            int i = 0;

            @Override
            public void changed(ObservableValue<? extends TreeItem<DevWorkTabBench>> observable, TreeItem<DevWorkTabBench> oldValue, TreeItem<DevWorkTabBench> newValue) {
                if (i < param.getRoot().getChildren().size()) {
                    row.pseudoClassStateChanged(firstRowClass, newValue == param.getRoot().getChildren().get(i));
                }
                i++;
            }
        });
        return row;
    }
});

我应该使用什么?请指导我。

【问题讨论】:

  • 您能提供生成的示例标记吗?
  • 抱歉,没有得到您的要求。
  • 运行项目时,会生成一个页面(html/etc)。你能把这个加进去吗?
  • 它只将 CSS 应用到一行,并且样式不断扩展或折叠树项。
  • @Professor.CSS 这是一个 JavaFX 问题,而不是 Web 应用程序框架问题。

标签: javafx treetableview javafx-css


【解决方案1】:

试试这个

treeTableView.setRowFactory( new Callback<TreeTableView<DevWorkTabBench>, TreeTableRow<DevWorkTabBench>>()
{
    @Override
    public TreeTableRow<DevWorkTabBench> call( TreeTableView<DevWorkTabBench> param )
    {
        TreeTableRow<DevWorkTabBench> row = new TreeTableRow<>();
        row.treeItemProperty().addListener( new ChangeListener<TreeItem<DevWorkTabBench>>()
        {
            @Override
            public void changed( ObservableValue<? extends TreeItem<DevWorkTabBench>> observable, TreeItem<DevWorkTabBench> oldValue, TreeItem<DevWorkTabBench> newValue )
            {
                row.pseudoClassStateChanged( firstRowClass, param.getRoot().getChildren().contains( newValue ) );
            }
        } );
        return row;
    }
} );

如何为不同级别应用多个伪类?

您可以获取TreeItemvalueProperty 并决定应用哪个css 类:

DevWorkTabBench bench = newValue.getValue();

row.pseudoClassStateChanged( thirdLevelClass, bench.getLevel() == 3 );
// or
row.pseudoClassStateChanged( MyCSSUtils.getClassByLevel(bench.getLevel()), true );

【讨论】:

  • 您好,感谢您的解决方案。它工作得非常好。 :) 我还想问一件事,如何为不同的级别应用多个伪类。我尝试给出不同的条件来选择关卡,但一次它只是将 css 应用到一个关卡。
  • 没有可用的 getLevel() 方法。
猜你喜欢
  • 2022-10-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-09-20
  • 2013-12-11
  • 1970-01-01
  • 1970-01-01
  • 2019-08-15
相关资源
最近更新 更多