从一定数量的绘制刻度开始,xAxis 上的标签旋转 90 度进入垂直位置。我想让它们保持水平,并且只绘制适合 xAxis 的尽可能多的图。
这显示了它的外观以及我希望它的外观:
如果没有足够的空间来旋转看起来的标签,则尝试 xAxis.setTickLabelRotation() 不会显示任何效果。
我做了一个隐藏xAxis标签的工作,在图表下方放置一个HBox并用一些水平的标签填充它。但这不是一个干净的解决方案,并且确实导致了我想避免的其他问题。
这个例子:
展示了如何对 NumberAxis 进行子类化,但我尚未将其转移以实现我的目标。我的想法是对 NumberAxis 进行子类化,覆盖负责在 xAxis 上绘制标签的方法,并使用格式化程序将数字转换为要绘制的日期格式。
那是正确的方法吗?解决方法是什么?我花了很多时间浏览资源但没有成功。任何指向正确方向的提示都将受到高度赞赏。
import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.chart.CategoryAxis;
import javafx.scene.chart.LineChart;
import javafx.scene.chart.NumberAxis;
import javafx.scene.chart.XYChart;
import javafx.stage.Stage;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Date;
public class LineChartSample extends Application {
@Override
public void start(Stage stage) {
final CategoryAxis xAxis = new CategoryAxis();
final NumberAxis yAxis = new NumberAxis();
final LineChart<String, Number> lineChart = new LineChart<String, Number>(xAxis, yAxis);
lineChart.setAnimated(false);
lineChart.setCreateSymbols(false);
XYChart.Series series = new XYChart.Series();
for (int i = 0; i < 100; i+=1)
series.getData().add(new XYChart.Data(msToDateString(i), Math.random()));
Scene scene = new Scene(lineChart, 800, 150);
lineChart.getData().add(series);
stage.setScene(scene);
stage.show();
}
//msToDateString-----------------------------------------------------------------
private static DateFormat df = new SimpleDateFormat("yyyy.MM.dd HH:mm:ss.SSS");
private static Date result = new Date();
public static String msToDateString(long milliseconds) {
result.setTime(milliseconds);
return df.format(result);
}
public static void main(String[] args) {
launch(args);
}
}