如何编辑JFXSpinner内部文本

时间:2018-04-23 07:41:48

标签: java javafx jfoenix

是否可以更改JFXSpinner进度文本的显示方式。我不希望它显示为百分比,而是显示为0到1之间的索引。

2 个答案:

答案 0 :(得分:1)

所以我通过继承<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="200px" viewBox="0 0 1 1" style="fill:purple;stroke:red" id="svg"> <svg width="100%" height="100%"> <svg width="100%" ID="piece" y="0" x="0" class="black" height="100%"> <g transform="translate(0.005) scale(0.022)"> <path d="M 22 9 C 19.792 9 18 10.792 18 13 C 18 13.885103 18.29397 14.712226 18.78125 15.375 C 16.829274 16.496917 15.5 18.588492 15.5 21 C 15.5 23.033947 16.442042 24.839082 17.90625 26.03125 C 14.907101 27.08912 10.5 31.578049 10.5 39.5 L 33.5 39.5 C 33.5 31.578049 29.092899 27.08912 26.09375 26.03125 C 27.557958 24.839082 28.5 23.033948 28.5 21 C 28.5 18.588492 27.170726 16.496917 25.21875 15.375 C 25.70603 14.712226 26 13.885103 26 13 C 26 10.792 24.208 9 22 9 z " /> </g> </svg>并覆盖JFXSpinnerSkin来取得成功。我得到带有layoutChildren的Text节点并更改它的文本。 由于文本不再居中,我检查了源代码,得到了居中的行并对其进行了调整。

Node#lookup()

Finnaly,我只是将public class SpinnerCustomSkin extends JFXSpinnerSkin { private SpinnerCustom control; private DecimalFormat formatter = new DecimalFormat("0.00"); public SpinnerCustomSkin(SpinnerCustom control) { super(control); this.control = control; } @Override protected void layoutChildren(double contentX, double contentY, double contentWidth, double contentHeight) { super.layoutChildren(contentX, contentY, contentWidth, contentHeight); Text text = ((Text) getNode().lookup("Text")); text.setText(formatter.format(control.getProgress())); //Or whatever you want to display text.relocate((control.getRadius() - text.getLayoutBounds().getWidth()) / 2, (control.getRadius() - text.getLayoutBounds().getHeight()) / 2); } } 元素子类化了,也许可以通过另一种方式设置皮肤,但我没有反击(事实上我没有搜索过这么久)。

JFXSpinner

答案 1 :(得分:0)

我必须去的源代码 JFXSpinnerSkin.java ,发现文本对象具有styleClass: text percentage ,因此在CSS中,您必须执行以下操作:

.jfx-spinner .percentage
{
    -fx-stroke: white;
}

注意:如果您使用的是JavaFX Scene Builder或类似产品,建议您在“样式类”字段中添加这些类名。