禁用JavaFX中TextFlow中项之间的间距

时间:2017-09-13 21:48:19

标签: javafx textflow

我正在尝试制作一行文字,其中包含一个名称和一串文字。我希望名称是一个超链接,其余的只是纯文本。

我认为TextFlow对此有好处,但问题是它会自动在超链接和文本之间放置一个空格。如果我想要TextFlow例如

,该怎么办?
  

Jane太棒了

TextFlow将使其成为

  

Jane太棒了

是否有方法或CSS属性来禁用此行为?

1 个答案:

答案 0 :(得分:2)

解决方案

您可以通过CSS样式删除填充:

.hyperlink {
    -fx-padding: 0;
}

如果您愿意,也可以在代码中执行此操作:

link.setPadding(new Insets(0));

背景

默认设置可以在随JRE发行版打包的modena.css文件中的jfxrt.jar文件中找到,它是:

-fx-padding: 0.166667em 0.25em 0.166667em 0.25em; /* 2 3 2 3 */

示例应用

sample application

在示例屏幕截图中,第二个超链接具有焦点(因此其虚线边框)。

import javafx.application.Application;
import javafx.geometry.Insets;
import javafx.scene.Scene;
import javafx.scene.control.Hyperlink;
import javafx.scene.layout.Pane;
import javafx.scene.text.Text;
import javafx.scene.text.TextFlow;
import javafx.stage.Stage;

public class HyperSpace extends Application {

    @Override
    public void start(Stage stage) {
        TextFlow textFlow = new TextFlow(
            unstyle(new Hyperlink("Jane")), 
            new Text("'s awesome "), 
            unstyle(new Hyperlink("links"))
        );
        stage.setScene(new Scene(new Pane(textFlow)));
        stage.show();
    }

    private Hyperlink unstyle(Hyperlink link) {
        link.setPadding(new Insets(0));
        return link;
    }

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