我有一个
JavaFX TreeView
TreeItems
有两种基本颜色,红色和白色。当他们被选中时,他们都有-fx-underline:true
,但我的问题是Red or White
我希望underline
始终为white
,在JavaFX中用css可以吗?
我已经尝试过以下但是它没有用。
.tree-cell-white:selected {
-fx-font-weight: bold ;
-fx-text-fill:white;
-fx-underline: true;
-fx-underline-fill: orange;
-fx-underline-color: blue;
}
.tree-cell-red:selected {
-fx-font-weight: bold ;
-fx-text-fill:firebrick;
-fx-underline: true;
}
答案 0 :(得分:4)
不幸的是我找不到JavaFX CSS如何做到这一点,但我找到了另一个解决方案。这就是我创建的MyTrack
类来自HBox
,并添加了ImageView
作为音乐/ mp3图标,Label
添加了文本。
这是一个小技巧,我通过设置其底部边框颜色并将MyTrack
设置为TreeItem
的图形来标记标签。
package underlined.treeview;
import javafx.application.Application;
import javafx.scene.Parent;
import javafx.scene.Scene;
import javafx.scene.control.TreeItem;
import javafx.scene.control.TreeView;
import javafx.stage.Stage;
import java.util.Arrays;
import java.util.List;
public class TreeViewApp extends Application {
public static void main(String[] args) {
launch(args);
}
private Parent createContent() {
TreeItem<String> treeRoot = new TreeItem<>("Root node");
List<TreeItem<String>> tracks = Arrays.asList(
new TreeItem<>(""),
new TreeItem<>(""),
new TreeItem<>(""));
for (TreeItem<String> track : tracks)
track.setGraphic(new MyTrack("Track"));
treeRoot.getChildren().addAll(tracks);
TreeView treeView = new TreeView();
treeView.setShowRoot(true);
treeView.setRoot(treeRoot);
treeRoot.setExpanded(true);
return treeView;
}
@Override
public void start(Stage primaryStage) throws Exception {
Scene scene = new Scene(createContent());
primaryStage.setScene(scene);
primaryStage.show();
}
}
和MyTrack
类:
package underlined.treeview;
import javafx.scene.control.Label;
import javafx.scene.image.Image;
import javafx.scene.image.ImageView;
import javafx.scene.layout.HBox;
public class MyTrack extends HBox {
public MyTrack(String text) {
Label label = new Label(text);
label.setStyle("-fx-border-color: aqua;" +
"-fx-border-width: 0 0 1 0;");
Image image = new Image(getClass().getResource("/img/icon/mp3.png")
.toExternalForm());
ImageView imageView = new ImageView(image);
imageView.setFitWidth(16);
imageView.setFitHeight(16);
getChildren().addAll(imageView, label);
}
}
和Voila !!!
在我的示例中,底部边框的颜色是浅绿色。请注意,TreeItem
应使用空String
进行实例化。这只是您需要自己优化它的一个例子。