【问题标题】:JavaFX manually set NumberAxis ticksJavaFX 手动设置 NumberAxis 刻度
【发布时间】:2018-09-02 21:56:32
【问题描述】:

我有一个显示市场指标的 LineChart,例如:

如您所见,使用这种指标的有趣之处在于指标高于或低于阈值线。

我想完全按照上图所示进行操作:在给定值(中间、上限、下限)的 Y 轴上只有刻度。

有可能吗?

【问题讨论】:

  • 实现自定义轴...

标签: javafx


【解决方案1】:

根据 cmets 中的@kleopatra 建议,我实现了自己的 NumberAxis:

public class FixedTicksAxis extends ValueAxis<Number> {

    // List of ticks
    private final List<Number> ticks;

    // Formatter
    private NumberAxis.DefaultFormatter defaultFormatter;

    public FixedTicksAxis(Number... ticks) {
        super();

        this.ticks = Arrays.asList(ticks);
        this.defaultFormatter = new NumberAxis.DefaultFormatter(new NumberAxis());
    }

    @Override
    protected List<Number> calculateMinorTickMarks() {
        return new ArrayList<>();
    }

    @Override
    protected void setRange(Object range, boolean animate) {
        final double[] rangeProps = (double[]) range;
        final double lowerBound = rangeProps[0];
        final double upperBound = rangeProps[1];
        final double scale = rangeProps[2];
        setLowerBound(lowerBound);
        setUpperBound(upperBound);

        currentLowerBound.set(lowerBound);
        setScale(scale);
    }

    @Override
    protected Object getRange() {
        return new double[]{
                getLowerBound(),
                getUpperBound(),
                getScale(),
        };
    }

    @Override
    protected List<Number> calculateTickValues(double length, Object range) {
        return ticks;
    }

    @Override
    protected String getTickMarkLabel(Number value) {
        StringConverter<Number> formatter = getTickLabelFormatter();
        if (formatter == null) formatter = defaultFormatter;
        return formatter.toString(value);
    }
}

NumberAxis 是 final,所以我不能继承它。

我不想复制/粘贴 NumberAxis 的内容,但我不能为受保护的方法使用委托,所以除了复制/粘贴之外我没有找到任何其他方法...

但它可以工作,使用:

 FixedTicksAxis yAxis = new FixedTicksAxis(30, 50, 70);

我们得到:

【讨论】:

  • arrgg ...忘了它是最终的,对不起,除了c&p :(你的轴是否按预期工作?
  • 是的 :)。我会用截图更新答案
  • 很高兴你做到了 :) 不过,从你的截图来看,我似乎误解了你的问题 无论如何,+1!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-12-05
  • 2013-01-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-10-01
相关资源
最近更新 更多