Как установить стиль для дочернего элемента первого уровня в дереве таблицы

Я хочу установить верхнюю границу только для всех первых детей, чтобы для одного ребенка данные выглядели в одной строке. но я не могу установить идентификатор для этих строк. Я попробовал следующий код, но это не помогло.

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;
    }
});

Что я должен использовать? пожалуйста, направьте меня.


person Harshita Sethi    schedule 21.05.2015    source источник
comment
Не могли бы вы предоставить сгенерированный образец разметки?   -  person jbutler483    schedule 21.05.2015
comment
Извините, не понял, о чем вы спрашиваете.   -  person Harshita Sethi    schedule 21.05.2015
comment
при запуске вашего проекта создается страница (html/etc). Не могли бы вы добавить это?   -  person jbutler483    schedule 21.05.2015
comment
Он применяет CSS только к одной строке, и стиль продолжает изменяться при расширении или сворачивании элемента дерева.   -  person Harshita Sethi    schedule 21.05.2015
comment
@Professor.CSS Это вопрос о JavaFX, а не о структуре веб-приложений.   -  person James_D    schedule 21.05.2015


Ответы (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;
    }
} );

Как я могу применить несколько псевдоклассов для разных уровней?

Вы можете получить valueProperty. из TreeItem и решить, какой класс CSS применить:

DevWorkTabBench bench = newValue.getValue();

row.pseudoClassStateChanged( thirdLevelClass, bench.getLevel() == 3 );
// or
row.pseudoClassStateChanged( MyCSSUtils.getClassByLevel(bench.getLevel()), true );
person Uluk Biy    schedule 21.05.2015
comment
Эй, спасибо за ваше решение. Это работало абсолютно нормально. :) Еще одну вещь, которую я хотел спросить, как я могу применить несколько псевдоклассов для разных уровней. Я пытался задать разные условия для выбора уровня, но в какой-то момент он просто применил CSS к одному уровню. - person Harshita Sethi; 22.05.2015
comment
Нет доступного метода getLevel(). - person Harshita Sethi; 27.05.2015