(转载了完整的信息,示例和视频)
我在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中的第四个元素没有用棕色背景突出显示。