加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

layout – JavaFX – 垂直居中TextFlow中的文本

发布时间:2020-12-15 02:18:37 所属栏目:Java 来源:网络整理
导读:我目前正在使用 JavaFX的Text和TextFlow布局,我需要弄清楚如何将Text节点置于TextFlow中心. 如下图所示,我添加了一些ImageView,以模拟我想要添加的表情符号. 问题是,它们的排列方式不同.当表情符号居中时,文本保持在底部. 绿色边框线代表TextFlow的边框,蓝色
我目前正在使用 JavaFX的Text和TextFlow布局,我需要弄清楚如何将Text节点置于TextFlow中心.
如下图所示,我添加了一些ImageView,以模拟我想要添加的表情符号.

问题是,它们的排列方式不同.当表情符号居中时,文本保持在底部.

绿色边框线代表TextFlow的边框,蓝色边框线代表Text的边框.

Preview

我已经尝试将Text的textOrigin属性设置为CENTER,但在我的情况下它不会改变任何内容.将textAlignment设置为CENTER也不起作用.

这是我的代码摘录:

public CChatMessage(String senderName,String messageText)
{
    this.sender = new Label(senderName);
    this.sender.setTextAlignment(TextAlignment.CENTER);
    this.sender.setFont(Font.font("Verdana",FontWeight.EXTRA_BOLD,14));

    this.message = new Text(messageText);
    this.message.setTextAlignment(TextAlignment.CENTER);
    this.message.setTextOrigin(VPos.CENTER);

    this.setEffect(new DropShadow());
    this.setAlignment(Pos.CENTER);
    this.setPadding(new Insets(0,10,10));

    TextFlow messagePane = new TextFlow();
    messagePane.setStyle("-fx-border-color: green");
    messagePane.setTextAlignment(TextAlignment.CENTER);
    Image smileyImage = new Image("/resources/smiley.png");

    messagePane.getChildren().addAll(this.message,new ImageView(smileyImage),new ImageView(smileyImage));

    if(!senderName.equals(""))
    {
        CChatMessage.setMargin(messagePane,new Insets(10,0));
        this.message.setFont(Font.font("Calibri",FontWeight.SEMI_BOLD,18));
        this.getChildren().addAll(this.sender,messagePane);
    }
    else
    {
        this.setPadding(new Insets(5,5,5));
        message.setFont(Font.font("Verdana",11));
        this.getChildren().add(messagePane);
    }
}

解决方法

编辑:我认为这是你正在寻找的答案: https://bugs.openjdk.java.net/browse/JDK-8098128

编辑2:
看来我在下面给出的解决方案存在问题. “文本”节点中的单词不会保留在HBox中.到目前为止,我还没弄清楚如何解决这个问题.但是当Text节点位于TextFlow容器中时,它确实保持在内部.

那里已经解决了这个问题.我不完全理解它,但我希望你这样做.

我会留下原来的答案,因为它包含了我处理问题的方式.

此解决方案可能有效.在没有像这样使Text节点居中之后,我已经解决了这个问题:我使用了一个HBox,而不是使用TextFlow.它为我完成了工作.行为足够相似,我能够以我想要的方式对齐Text节点.

但请注意,我只是一个新手.因此,如果您使用此方法,可能会出现问题.我不知道TextFlow和HBox的属性足以自信地回答.但我只是想我会告诉你我的解决方案,因为那就是我现在用于我的项目. (编辑:正如您在上面的编辑2中所读到的,我遇到了一个问题.可能会有更多问题.):)

快乐的编码.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读