css - 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 中的第四个元素没有以棕色背景突出显示。
解决方案
推荐阅读
- flutter - 构建器在 Flutter 上更新 ChangeNotifierProxyProvider
- javascript - Leaflet bindPopup 坐标
- javascript - 当我的 python 脚本在服务器上运行时,如何访问我的本地网络摄像头?(实时人脸识别)
- amazon-web-services - 使用 Apache Kafka 代替 SQS
- android - 垂直方向的 Recyclerview 在屏幕的水平滚动上上下滚动
- apache-kafka - Kafka SSL 连接被拒绝:没有更多信息
- .net-core - RuntimeIdentifiers 和 SelfContained
- excel - 由于合并列单元格而导致复制粘贴错误
- api - 有没有办法将 Dynamics CRM 联系人同步到surveymonkey?
- github - 使用多个 id_rsa 文件(SSH-KEYGEN)推送到 github