gpt4 book ai didi

java - 为标签定义自定义溢出样式

转载 作者:行者123 更新时间:2023-11-30 08:00:33 24 4
gpt4 key购买 nike

我为 JavaFX 8 创建了一个自定义颜色选择器控件。它由 GridPane 中的六个 Slider 组成,分别为 Labels在他们之上。

<GridPane vgap="10" hgap="10">
<Label labelFor="${redSlider}" text="Red"
GridPane.rowIndex="0" GridPane.columnIndex="0" GridPane.halignment="CENTER"/>
<!-- 5 more labels -->
<Slider max="255" orientation="VERTICAL" fx:id="redSlider" id="redSlider"
GridPane.rowIndex="1" GridPane.columnIndex="0" GridPane.vgrow="ALWAYS"
GridPane.hgrow="ALWAYS" GridPane.halignment="CENTER"/>
<!-- 5 more Sliders -->
</GridPane>

color picker

现在,当我缩小选择器时,标签的文本会溢出。

narrowed color picker

我想在这里发生的是文本将更改为它们的第一个字母 RGBHSL 而不是带有省略号的剪辑版本。

标签textOverrun属性允许将溢出模式设置为 OverrunStyle 中定义的七个值,但这些都不符合我要查找的内容。

查看 Label 类内部,显示的文本由 Skin 计算得出.在我的 JDK 中,这会直接转到 com.sun.javafx.scene.control.skin.LabeledSkinBase.updateDisplayedText(),然后调用 com.sun.javafx.scene.control.skin。 Utils.computeClippedText()。确实没有简单的方法可以通过扩展 Label 来修改这些东西,因为它是不可移植的;必须重新实现整个 Skin,这基本上是 Label 的 UI 的完整实现。

除了实现您自己的Skin 之外,是否有一种便携方法可以使Label 的文本在溢出时收缩为单个字符?

更新:我实现了@VGRanswer作为一个可重用的类。你可以在这里得到它:https://bitbucket.org/snippets/Pietu1998/LEqXo

最佳答案

这不是您所要求的——使用 OverrunStyle 来实现您的目标——但它确实产生了相同的效果:

public static Node createCondensingLabel(String regularText,
String condensedText) {

Label regularLabel = new Label(regularText);
Label condensedLabel = new Label(condensedText);

StackPane pane = new StackPane(regularLabel, condensedLabel);

BooleanBinding fullyVisible = Bindings.createBooleanBinding(() ->
regularLabel.getWidth() >=
regularLabel.prefWidth(regularLabel.getHeight()),
regularLabel.widthProperty());

regularLabel.visibleProperty().bind(fullyVisible);
condensedLabel.visibleProperty().bind(fullyVisible.not());

return pane;
}

关于java - 为标签定义自定义溢出样式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38422370/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com