如何在JavaFX中设置日期轴单位(日期间隔)?

如何在JavaFX中设置日期轴单位(日期间隔)?,javafx,charts,Javafx,Charts,我正在使用JavaFX开发一个图表。我需要DateAxis,所以我使用 DateAxisfrom。结果是。但我想和你约会 我没有找到解决办法。结果总是显示一天间隔。这是我的密码 public class Main extends Application { @Override public void start(Stage primaryStage) throws Exception { SimpleDateFormat simpleDateFormat = new SimpleDa

我正在使用JavaFX开发一个图表。我需要
DateAxis
,所以我使用
DateAxis
from。结果是。但我想和你约会 我没有找到解决办法。结果总是显示一天间隔。这是我的密码

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);
    }
}
public类主扩展应用程序{
@凌驾
public void start(Stage primaryStage)引发异常{
SimpleDataFormat SimpleDataFormat=新SimpleDataFormat(“yyyy-MM-dd-HH-MM-ss”);
ObservableList series=FXCollections.observableArrayList();
ObservableList series1Data=FXCollections.observableArrayList();
series1Data.add(新的XYChart.Data(新的gregoriacalendar(2018,1,12).getTime(),2));
series1Data.add(新的XYChart.Data(新的gregoriacalendar(2018,1,15).getTime(),3));
series1Data.add(新的XYChart.Data(新的gregoriacalendar(2018,1,16).getTime(),4));
添加(新的XYChart.series(“Series1”,series1Data));
NumberAxis NumberAxis=新的NumberAxis();
DateAxis DateAxis=新的DateAxis();
dateAxis.setAutoRanging(false);
dateAxis.setLowerBound(新的GregoriaCalendar(2018,2,12).getTime());
dateAxis.setUpperBound(新的Gregorianalendar(2018,2,16).getTime());
setTickLabelFormatter(新的StringConverter(){
@凌驾
公共字符串toString(日期对象){
返回SimpleDataFormat.format(对象);
}
@凌驾
公共日期fromString(String){
返回null;
}
});
折线图折线图=新折线图(日期轴、数字轴、系列);
场景=新场景(线条图,900400);
初级阶段。场景(场景);
primaryStage.show();
}
公共静态void main(字符串[]args){
发射(args);
}
}

我该怎么做呢?

我可能错了,但似乎
DateAxis
API不允许您指定首选的显示间隔,所以您需要自己更改它

DateAxis
类中有一个
Interval
enum。如果更改此行:

DAY(Calendar.DATE, 1),
对于这一点:

DAY(Calendar.DATE, 2),
并根据需要对其他间隔进行注释

//        HOUR_12(Calendar.HOUR, 12),

将显示两天的间隔时间。请记住,这样做违背了作者的意图,作者这样写是为了自动调整间隔,这是一个非常粗糙的解决方案。更好的方法是,您必须重写
CalculatecKValues
方法,并将私有枚举更改为某种公共API。

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

DateAxis
类中有一个
Interval
enum。如果更改此行:

DAY(Calendar.DATE, 1),
对于这一点:

DAY(Calendar.DATE, 2),
并根据需要对其他间隔进行注释

//        HOUR_12(Calendar.HOUR, 12),

将显示两天的间隔时间。请记住,这样做违背了作者的意图,作者这样写是为了自动调整间隔,这是一个非常粗糙的解决方案。为了获得更好的结果,您必须重写
CalculatecKValues
方法,并将私有枚举更改为某种公共API。

谢谢您的回答!谢谢你的回答!