【问题标题】:Change display values for JavaFX Axis更改 JavaFX Axis 的显示值
【发布时间】:2021-11-26 17:24:53
【问题描述】:

NumberAxis 和 CategoryAxis 用于绘制我的 AreaChart。

我想知道如何更改两个轴的显示值,因为我需要:

  • 显示 humanReadableByteCount (KB, MB, GB),而不是 Y 轴的字节表示
  • 仅显示 X 轴的时:分:秒

我在文档中找不到有关如何修改显示值的任何信息:https://docs.oracle.com/javase/8/javafx/api/javafx/scene/chart/NumberAxis.html

【问题讨论】:

  • 您是否尝试过使用tickLabelFormatter 作为数字轴?
  • IIUC,类别必须是唯一的。如果你重新格式化它们会发生什么?
  • 对于类别,我认为您可以继承 CategoryAxis 并覆盖 getTickMarkLabel。
  • @feedthemachine:你不会在toString()的实现中调用该方法吗?

标签: java javafx axis


【解决方案1】:

我能够通过实现覆盖 toString 的setTickLabelFormatter 来解决这个问题:

    ratesAxis.setTickLabelFormatter(new StringConverter<>() {
        @Override
        public String toString(Number t) {
            return String.valueOf(ReadFile.humanReadableByteCountSI(t));
        }

        @Override
        public Number fromString(String string) {
            return 1;
        }
    });

来自另一个班级:

static String humanReadableByteCountSI(Number bytesString) {
    int bytes = (int) bytesString.intValue();
    if (-1000 < bytes && bytes < 1000) {
        return bytes + " B";
    }
    CharacterIterator ci = new StringCharacterIterator("kMGTPE");
    while (bytes <= -999_950 || bytes >= 999_950) {
        bytes /= 1000;
        ci.next();
    }
    return String.format("%.1f %cB", bytes / 1000.0, ci.current());
}

结果:

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-01-05
    • 1970-01-01
    • 1970-01-01
    • 2012-12-17
    • 1970-01-01
    • 2011-11-08
    • 1970-01-01
    相关资源
    最近更新 更多