是否可以更改JFXSpinner
进度文本的显示方式。我不希望它显示为百分比,而是显示为0到1之间的索引。
答案 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或类似产品,建议您在“样式类”字段中添加这些类名。