更改 JavaFX 轴的显示值
Change display values for JavaFX Axis
NumberAxis 和 CategoryAxis 用于绘制我的 AreaChart。
我想知道如何更改两个轴的显示值,因为我需要:
- 显示 humanReadableByteCount(KB、MB、GB)而不是 Y 轴的字节表示
- 仅显示 X 轴的 hour:minute:second
我无法在文档中找到有关如何修改显示值的任何信息:https://docs.oracle.com/javase/8/javafx/api/javafx/scene/chart/NumberAxis.html
我能够通过实现覆盖 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;
}
});
来自另一个 class:
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());
}
结果:
NumberAxis 和 CategoryAxis 用于绘制我的 AreaChart。
我想知道如何更改两个轴的显示值,因为我需要:
- 显示 humanReadableByteCount(KB、MB、GB)而不是 Y 轴的字节表示
- 仅显示 X 轴的 hour:minute:second
我无法在文档中找到有关如何修改显示值的任何信息:https://docs.oracle.com/javase/8/javafx/api/javafx/scene/chart/NumberAxis.html
我能够通过实现覆盖 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;
}
});
来自另一个 class:
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());
}
结果: