在 JavaFX 的 TextFlow 中禁用项目之间的间距
Disable spacing between items in TextFlow in JavaFX
我正在尝试制作一行由名称和一串文本组成的文本。我希望名称是超链接,其余只是纯文本。
我认为 TextFlow 对此有好处,但问题是它会自动在超链接和文本之间放置一个 space。例如,如果我希望 TextFlow 是
怎么办?
Jane's awesome
TextFlow 将使
Jane 's awesome
是否有方法或 CSS 属性 来禁用此行为?
解决方案
您可以通过 CSS 样式删除填充:
.hyperlink {
-fx-padding: 0;
}
或者如果您愿意,您可以在代码中完成:
link.setPadding(new Insets(0));
背景
默认设置可以在 JRE 分发包中 jfxrt.jar
文件中的 modena.css
文件中找到,它是:
-fx-padding: 0.166667em 0.25em 0.166667em 0.25em; /* 2 3 2 3 */
示例应用程序
在示例屏幕截图中,第二个超链接具有焦点(因此具有虚线边框)。
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);
}
}
我正在尝试制作一行由名称和一串文本组成的文本。我希望名称是超链接,其余只是纯文本。
我认为 TextFlow 对此有好处,但问题是它会自动在超链接和文本之间放置一个 space。例如,如果我希望 TextFlow 是
怎么办?Jane's awesome
TextFlow 将使
Jane 's awesome
是否有方法或 CSS 属性 来禁用此行为?
解决方案
您可以通过 CSS 样式删除填充:
.hyperlink {
-fx-padding: 0;
}
或者如果您愿意,您可以在代码中完成:
link.setPadding(new Insets(0));
背景
默认设置可以在 JRE 分发包中 jfxrt.jar
文件中的 modena.css
文件中找到,它是:
-fx-padding: 0.166667em 0.25em 0.166667em 0.25em; /* 2 3 2 3 */
示例应用程序
在示例屏幕截图中,第二个超链接具有焦点(因此具有虚线边框)。
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);
}
}