简体   繁体   English

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

[英]How to change TreeItem's underline color in JavaFX?

I have a JavaFX TreeView which has TreeItems with two basic colors , red and white . 我有一个JavaFX TreeView ,其中有TreeItems具有两种基本颜色, 红色和白色 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 ? 选择它们时,它们都具有-fx-underline:true但是我对Red or White行有-fx-underline:true 我希望underline始终为white ,JavaFX中的css是否可能?

在此处输入图片说明

I have tried the below but it doesn't work . 我已经尝试了下面的方法,但是没有用。

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

Unfortunately I could not find how to do it by JavaFX CSS, but I found another solution. 不幸的是,我找不到JavaFX CSS的方法,但是找到了另一个解决方案。 That is I created MyTrack class that derives from HBox and added an ImageView as an music/mp3 icon and Label with text. 那就是我创建了从HBox派生的MyTrack类,并添加了一个ImageView作为音乐/ mp3图标和带有文本的Label Here is a little trick I underlined label by setting its bottom border color and set MyTrack as a graphic for TreeItem . 我通过设置标签底边框颜色并将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();
    }
}

and MyTrack class: 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);
    }
}

And Voila!!! 还有瞧!

In my example bottom border color is aqua here. 在我的示例中,此处的底部边框颜色是浅绿色。 Note that TreeItem should be instantiated with empty String . 注意TreeItem应该用空String实例化。 It was just an example you need to optimize it yourself. 这只是一个示例,您需要自己对其进行优化。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM