JavaFX-TreeView-以编程方式选择元素时CSS不适用

时间:2018-08-09 14:23:08

标签: css javafx treeview selected

(转载了完整的信息,示例和视频)

我在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

This is an example video

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

0 个答案:

没有答案