JavaFX:如何在按钮中显示富文本?
在JavaFX-8中(Edit:我意识到我使用的是jdk-9.0.1,可能有什么不同?),我想要一个具有按钮功能的组件,但其标签可以设置为富文本。到目前为止,我已经尝试:JavaFX:如何在按钮中显示富文本?,java,javafx,javafx-8,Java,Javafx,Javafx 8,在JavaFX-8中(Edit:我意识到我使用的是jdk-9.0.1,可能有什么不同?),我想要一个具有按钮功能的组件,但其标签可以设置为富文本。到目前为止,我已经尝试: 单独使用TextFlow和其他组件(窗格、堆栈窗格) 和CSS样式添加背景色和边框。这不起作用 因为我无法使文本在视图中垂直居中 当我设置了组件的首选宽度和高度时 同上,但使用垂直填充将文本居中。这不起作用,因为我无法设置按钮的高度。如果我设置了一个最大宽度,文本将进行换行,但在换行时,由于填充的大小是恒定的,因此组件的总体高
- 能够像按钮一样使用组件
- 在组件中显示富文本(可选垂直居中)
- 轻松设置和更改富文本或其部分内容
- 允许在富格文本不再适合时对其进行剪裁
- 以某种方式设置组件大小,以便在文本变大时不会调整其大小
根据请求,3不适合我的MCVE:
import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.layout.VBox;
import javafx.scene.text.Text;
import javafx.scene.text.TextFlow;
import javafx.stage.Stage;
public class TestWindow extends Application {
public static void main(String[] args) {
launch(args);
}
@Override
public void start(Stage primaryStage) throws Exception {
VBox mainLayout = new VBox();
Text t = new Text(
"Lorem ipsum dolor sit amet, consectetur adipiscing elit. Duis blandit dolor non dui porttitor, sit amet commodo ipsum condimentum. Proin quis tincidunt massa.");
TextFlow a = new TextFlow(t);
a.setTextAlignment(TextAlignment.CENTER);
Button b = new Button();
b.setGraphic(a);
b.setAlignment(Pos.CENTER);
b.setPrefSize(300, 100);
mainLayout.getChildren().addAll(b);
Scene scene = new Scene(mainLayout);
primaryStage.setScene(scene);
primaryStage.show();
}
}
此代码生成以下结果
如果按钮有一些文本,例如,如果它是使用单个空格创建的
Button b = new Button(" ");
部分溶液 我还没有找到一个解决方案,既可以居中的文字和剪辑,如果它太大。目前,我的解决方法是只将文本居中
通过将文本流的最大高度设置为较小的值,可以使文本流垂直居中。将MCVE用于问题中的#3,添加
a.setMaxHeight(0)就足够了代码>。这将使文本居中,因为文本流将不再扩展以占用所有可用空间。将按钮的图形设置为文本流应该可以工作。发布一篇关于你的尝试的文章。@James_D经过编辑,包括MVCE和我看到的图片。我根本无法复制使图形垂直居中的效果,所以我以前可能弄错了。这意味着这个选项的效果甚至更低。我还意识到我实际上在使用jdk-9.0.1,也许这会有所不同?我已经用我的编辑更新了帖子。