JavaFX文本选择背景

JavaFX文本选择背景,javafx,Javafx,可以在javafx.scene.text.text中设置选择区域的填充 setFill(RED); 但是,似乎没有等效的挫折背景(蓝色) 默认情况下,文本选择的填充为白色。将文本设置为白色可能是为了为不同的背景(如蓝色)做准备 如何实现所选文本的背景?如果您使用的是JavaFX 9+,则可以使用以下属性: 在局部坐标中选择的形状 该属性为您提供了一个PathElement[],可与用于为选定文本实现背景色的。以下是概念证明: 导入javafx.application.application;

可以在
javafx.scene.text.text
中设置选择区域的填充

setFill(RED);
但是,似乎没有等效的
挫折背景(蓝色)

默认情况下,文本选择的填充为白色。将文本设置为白色可能是为了为不同的背景(如蓝色)做准备


如何实现所选文本的背景?

如果您使用的是JavaFX 9+,则可以使用以下属性:

在局部坐标中选择的形状

该属性为您提供了一个
PathElement[]
,可与用于为选定文本实现背景色的。以下是概念证明:

导入javafx.application.application;
导入javafx.geometry.VPos;
导入javafx.scene.scene;
导入javafx.scene.layout.Pane;
导入javafx.scene.paint.Color;
导入javafx.scene.shape.Path;
导入javafx.scene.text.Font;
导入javafx.scene.text.text;
导入javafx.stage.stage;
公共最终类应用程序扩展应用程序{
@凌驾
公共无效开始(阶段primaryStage){
var text=新文本(“用于演示选择形状属性的一些文本”);
text.setTextOrigin(VPos.TOP);
text.setFont(Font.Font(“单间距”,24));
text.setSelectionStart(5);
文本。设置选项结束(24);
text.setSelectionFill(Color.WHITE);//选中时实际文本的填充
var path=新路径(text.getSelectionShape());
路径设置行程宽度(0);
setFill(颜色为绿色);
//首先添加“路径”,使其呈现在“文本”下
setScene(新场景(新窗格(路径、文本));
primaryStage.show();
}
}
注意:在实际应用程序中,如果选定的文本可以更改,则需要观察
selectionShape
属性并根据需要更新
路径

还请注意,如文档所述,
PathElement[]
文本的局部坐标空间中给出。这意味着,如果希望正确对齐,则应用于
文本
(不影响其在本地的边界)的任何转换也需要应用于
路径

public class Main extends Application {

    public static void main(String[] args) {
        launch(args);
    }

    @Override
    public void start(Stage primaryStage) throws Exception {
        Pane p = new Pane();
        Scene s = new Scene(p);
        s.getStylesheets().add("main.css");
        primaryStage.setScene(s);
        primaryStage.show();

        addTextWithSelection(p);
    }

    private void addTextWithSelection(Pane p) {
        Text t = new Text(20,20, "Some Text selection some more text");
        t.setSelectionStart(11);
        t.setSelectionEnd(18);
        t.setSelectionFill(GREEN);
        p.getChildren().add(t);
    }
}