【问题标题】:Bolding specific text加粗特定文本
【发布时间】:2017-10-05 22:06:29
【问题描述】:

我试图在 setter 中加粗一些文本,但是当它显示时,它不起作用。我将直接跳入一些代码,这样才有意义...

private static class Spell {
    private final String name;
    private final String school;
    private final String display_class;
    //etc.

.

Text t = new Text("TEST: ");
        t.setStyle("-fx-font-weight: bold;");

        this.name = name + "\n\n";
        this.school = school + "\n";
        this.display_class = t + display_class + " " + spell_level + "\n";
//etc.

显示列表:

if (!newValue.isHeader()) {
            tooltip.setText(newValue.getName() + newValue.getSchool() + newValue.getDisplay_Class() //etc.

文本在 ScrollPane 中显示为 Text 对象:Text tooltip = new Text();

列表显示Level: 0 Range: 25ft 等值。使用此设置,是否可以仅将"Level:""Range:" 部分加粗?目前,打印t时显示的是Text[text="TEST: ",x=0.0,y=0.0, alignment=LEFT, origin=BASELINE, boundsType=LOGICAL...等。等等,但是当将t 添加到窗格并以这种方式显示时,它会正确显示为粗体。我现在不知道该怎么办。

【问题讨论】:

  • 我能想到的唯一方法是这样的:stackoverflow.com/a/34230669/4167500 另外,如果你不喜欢 css,你可以设置 text Font like :setFont(Font.font("Aria", FontWeight.BOLD, 20));
  • TextFlow 显示与以前相同的额外垃圾,但仍然没有粗体。至于设置字体,那不就是为整个列表设置它而不是能够指定一个单词吗?编辑:我也必须在几分钟后到达某个地方,所以当我回来时,我会回复你和其他看到这个的人。提前致谢!
  • 您必须将您的文本分成较小的部分,例如分成两部分,第一部分是粗体,第二部分是常规。之后,当您指定它们的字体(或只是粗体样式)时,您需要将它们显示为一个实体,当然您可以通过使用 FlowPane、HBox 等任何布局来实现这一点,但 TextFlow 是此类工作的最佳选择。正如您将在链接的示例中看到的那样,样式被设置为每个文本部分,而不是整个 TextFlow。这就是它将显示的内容:prntscr.com/gtt3xt
  • Tooltip 的所有文本都必须是粗体或没有。我猜你可以创建一个自定义 Tooltip 并覆盖此行为。
  • @JKostikiadis 这实际上为我修复了它。最初,当我不得不离开时,我花了大约 2 分钟的时间,这让我无处可去。现在,在有时间再玩它之后,它奏效了。我将 TextFlow 设置在 ScrollPane 中,并将文本分成 2 个 Text 对象,一个不加粗,最后看起来我想要的样子。非常感谢你做的这些。如此看似简单的事情竟然花了这么长时间才完成,真烦人……

标签: java javafx text


【解决方案1】:
Text t = new Text("TEST: ");
...
this.display_class = t + display_class + " " + spell_level + "\n";

在上面的行中,您将 Text 对象实例 (t) 的 toString() 的输出与您的 extra junk 来自的其他字符串连接起来,而不是可能是你想做的。

很遗憾,Text 不支持多样式文本字符串。

【讨论】:

  • 注意:t.getText() 获取文本节点的实际当前值字符串,而不是您当前隐式使用的t 上的toString(),因此您可能希望使用t.getText()
  • 没有意义,因为 Text 无论如何都不支持不同样式的文本片段。
  • 是的,它本身并不能解决他原来的问题,但可能会解决他注意到的“显示与以前相同的额外垃圾”的一些辅助问题。也许他所说的“额外垃圾”是文本对象上的 toString,我不知道,但这是我猜的。
  • 那么,有没有办法真正做到这一点,即使我现在必须重做所有的东西?即使我不连接它们,只尝试粗体部分并将类型本身更改为文本,它仍然显示“垃圾”、toString 内容,而不是我所期望的。
  • 您可以通过创建几个 Texts 的实例(每个都有自己的样式)来重新编写代码,然后使用此类例如 docs.oracle.com/javase/8/javafx/api/javafx/scene/text/… 来布局它们
猜你喜欢
  • 2012-12-24
  • 1970-01-01
  • 2022-07-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-05-23
  • 1970-01-01
  • 2022-11-24
相关资源
最近更新 更多