css - 如何在JavaFX中更改TreeItem的下划线颜色?

标签 css javafx treeview

I have a JavaFX TreeView which has TreeItems with two basic colors , red and white . When they are selected they both have -fx-underline:true but i have a problem with the line being Red or White i want the underline to be always white , is that possible with css in JavaFX ?

enter image description here

我已经尝试过以下方法,但不起作用。

.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;
}

最佳答案

不幸的是,我找不到如何通过 JavaFX CSS 做到这一点,但我找到了另一个解决方案。也就是说,我创建了从 HBox 派生的 MyTrack 类,并添加了 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);
    }
}

瞧!

在我的示例中,底部边框颜色为浅绿色。请注意,TreeItem 应使用空的String 进行实例化。这只是一个例子,你需要自己优化它。

关于css - 如何在JavaFX中更改TreeItem的下划线颜色?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47463877/

相关文章:

html - CSS - 为什么我的跨度需要 float 来显示具有固定宽度和高度的图像?

javascript - 使用 Javascript 删除主题标签

java - 如何为 TableView 使用自定义 cellFactories

treeview - 删除 JavaFX TreeView 滚动 Pane

jquery - 更改 TreeView 控件的渲染 html 以创建标签而不是跨度

java - Scala:在 TreeView 中显示 systemDrive

jquery - 为什么我的 DIV 叠加层不起作用?

javascript - 如何在输入数字元素中将输入显示为元素符号?

JavaFX 复选框不遵循绑定(bind)属性的值

javafx - 检测节点何时在场景中可见