首页 > 解决方案 > JavaFX - TreeView - CSS 在以编程方式选择元素时不适用

问题描述

(以完整信息、示例和视频重新发布)

我在 JavaFX 8 中有一个工作 TreeView 有两个级别。我想扩展第一级并从第二级中选择一个 TreeItem。要选择一个项目,我目前使用:

treeView.getSelectionModel().setSelectedItem(itemToSelect)

这非常有效,因为如果之后我打印

treeView.getSelectionModel().getSelectedItem()

打印的项目是正确的。

我的问题是这种风格不适用于它:

.treeView .tree-cell:selected {
    -fx-font-weight: bold;
    -fx-background-color: #993300;
}

treeView 是 treeView 的正确样式类,正常使用时效果很好。换句话说:当我用鼠标选择一个元素时,它会变粗并且背景颜色会发生变化。当我通过代码选择元素时,不会应用 CSS。

我能做什么?

这是 TreeViewSample.java (实际上我使用的是 Groovy,但我认为这并不重要)类:

import javafx.application.Application;
import javafx.scene.Node;
import javafx.scene.Scene;
import javafx.scene.control.TreeItem;
import javafx.scene.control.TreeView;
import javafx.scene.image.Image;
import javafx.scene.image.ImageView;
import javafx.scene.layout.StackPane;
import javafx.stage.Stage;

public class TreeViewSample extends Application {

    private final Node rootIcon = new ImageView(
        new Image(getClass().getResourceAsStream("folder_16.png"))
    );

    public static void main(String[] args) {
        launch(TreeViewSample,args);
    }

    @Override
    public void start(Stage primaryStage) {
        primaryStage.setTitle("Tree View Sample");

        TreeItem<String> rootItem = new TreeItem<String> ("Inbox", rootIcon);
        rootItem.setExpanded(true);
        for (int i = 1; i < 6; i++) {
            TreeItem<String> item = new TreeItem<String> ("Message" + i);
            rootItem.getChildren().add(item);

        }
        TreeView<String> tree = new TreeView<String> (rootItem);
        StackPane root = new StackPane();
        root.getChildren().add(tree);
        tree.getSelectionModel().setSelectedIndex(3);
        tree.getStylesheets().add("style.css")
        primaryStage.setScene(new Scene(root, 300, 250));
        primaryStage.show();
    }
}

这是 style.css:

.tree-view {
    -fx-background-color: transparent;
    -fx-border-color: #993300;
}
.tree-view .tree-cell {
    -fx-background-color: transparent;
    -fx-text-fill: #ffcc00;
    -fx-font-size: 16;
}
.tree-view .tree-cell:selected {
    -fx-font-weight: bold;
    -fx-background-color: #993300;
}

.tree-view .tree-cell:filled:hover {
    -fx-background-color: #5e1f00;
}

.tree-view .tree-cell > .tree-disclosure-node > .arrow  {
    -fx-background-color: red;
}

同样,问题是当我使用 setSelectedIndex 方法或 setSelectedItem 方法选择第四个项目时,CSS 中的 :selected 属性不适用。

在 Windows 8.1 上使用 JDK 1.8.0_181

这是一个示例视频

正如您从视频中看到的那样,数字 3 被打印(这意味着所选元素是数字 3)但 treeView 中的第四个元素没有以棕色背景突出显示。

标签: cssjavafxtreeviewselected

解决方案


推荐阅读