如何在JavaFX中设置DateAxis TickUnit(日期间隔)?

时间:2017-01-31 02:23:27

标签: javafx charts

我正在使用JavaFX开发图表。我需要DateAxis,所以我使用了 来自this codeDateAxis。结果是this。但我想要节目2约会 间隔,我没有找到解决方案。结果总是显示一天的间隔。这是我的代码。

public class Main extends Application {

@Override
public void start(Stage primaryStage) throws Exception {

    SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH-mm-ss");
    ObservableList<XYChart.Series<Date, Number>> series = FXCollections.observableArrayList();

    ObservableList<XYChart.Data<Date, Number>> series1Data = FXCollections.observableArrayList();
    series1Data.add(new XYChart.Data<Date, Number>(new GregorianCalendar(2018,1, 12).getTime(), 2));
    series1Data.add(new XYChart.Data<Date, Number>(new GregorianCalendar(2018, 1, 15).getTime(), 3));

    series1Data.add(new XYChart.Data<Date, Number>(new GregorianCalendar(2018, 1, 16).getTime(), 4));


    series.add(new XYChart.Series<>("Series1", series1Data));

    NumberAxis numberAxis = new NumberAxis();
    DateAxis dateAxis = new DateAxis();
    dateAxis.setAutoRanging(false);
    dateAxis.setLowerBound(new GregorianCalendar(2018,2, 12).getTime());
    dateAxis.setUpperBound(new GregorianCalendar(2018,2, 16).getTime());
    dateAxis.setTickLabelFormatter(new StringConverter<Date>() {
        @Override
        public String toString(Date object) {
            return simpleDateFormat.format(object);
        }
        @Override
        public Date fromString(String string) {
            return null;
        }
    });

    LineChart lineChart = new LineChart(dateAxis, numberAxis, series);
    Scene scene = new Scene(lineChart, 900, 400);

    primaryStage.setScene(scene);
    primaryStage.show();
}

public static void main(String[] args) {
    launch(args);
    }
}

我该怎么做?

1 个答案:

答案 0 :(得分:0)

我可能错了,但似乎DateAxis API不允许您指定首选显示间隔,因此您需要自行更改。

DateAxis课程中,有一个Interval枚举。如果您更改此行:

DAY(Calendar.DATE, 1),

对此:

DAY(Calendar.DATE, 2),

并根据需要评论其他时间间隔......

//        HOUR_12(Calendar.HOUR, 12),

将显示2天的间隔。请记住,这样做与作者的意图相反,后者以这种方式编写,以便自动调整间隔,这是一个非常粗略的解决方案。为了更好的方法,您必须重写calculateTickValues方法,并将私有枚举更改为某种公共API。