通过自定义代码JavaFX忽略线形图中上下限之间的某些标签值

通过自定义代码JavaFX忽略线形图中上下限之间的某些标签值,java,javafx,javafx-8,linechart,Java,Javafx,Javafx 8,Linechart,背景:我有一个图表,它根据时间戳(X值)从每天早上930点到下午4点记录分钟数据点;我的图表应该显示从周四下午1点到周五下午1点的所有数值,但请注意,图表上有一条从周四下午4点到周五上午9点30分的大红线,因为没有数据(而且永远不会有) 见图表: 由于我已将X轴的下界设置为时间戳中的周四下午1点,上界为周五下午1点,时间单位为2小时,因此轴将创建主标签周四下午1点、下午5点、晚上9点;星期五凌晨1点、上午5点、上午9点、下午1点,即使从星期四下午4点到星期五上午9点不需要创建标签/空间 有没有办

背景:我有一个图表,它根据时间戳(X值)从每天早上930点到下午4点记录分钟数据点;我的图表应该显示从周四下午1点到周五下午1点的所有数值,但请注意,图表上有一条从周四下午4点到周五上午9点30分的大红线,因为没有数据(而且永远不会有)

见图表:

由于我已将X轴的下界设置为时间戳中的周四下午1点,上界为周五下午1点,时间单位为2小时,因此轴将创建主标签周四下午1点、下午5点、晚上9点;星期五凌晨1点、上午5点、上午9点、下午1点,即使从星期四下午4点到星期五上午9点不需要创建标签/空间

有没有办法告诉X轴在周四下午1点到周五下午1点之间创建ticklabel,但忽略某些情况或以不同的方式解决此问题

我编写了一个示例测试代码,显示了这个问题(规模更大):我想在下午17点到第二天早上9点之间删除line/ticklab类别空间,因为没有数据

public class TestGraph extends Application{
private NumberAxis yQuoteChartAxis;
private NumberAxis xQuoteChartAxis;
private XYChart.Series<Long,Double> series;
private LineChart<Long, Double> qChart;
private final static long TWOHOURS_MILLISECONDS=7200000;
@Override
public void start(Stage stage) throws Exception {
    xQuoteChartAxis=new NumberAxis();
    yQuoteChartAxis=new NumberAxis();
    yQuoteChartAxis.setSide(Side.RIGHT);
    yQuoteChartAxis.setMinorTickVisible(false);
    xQuoteChartAxis.setMinorTickVisible(false);
    xQuoteChartAxis.setAutoRanging(false);
    series=new XYChart.Series<>();
    qChart=new LineChart(xQuoteChartAxis,yQuoteChartAxis);
    qChart.setCreateSymbols(false);
    qChart.setLegendVisible(false);
    series.getData().add(new XYChart.Data<Long,Double>(1467306000000l, 23.0));
    series.getData().add(new XYChart.Data<Long,Double>(1467309600000l, 23.05));
    series.getData().add(new XYChart.Data<Long,Double>(1467313200000l, 25.14));
    series.getData().add(new XYChart.Data<Long,Double>(1467316800000l, 17.5));
    series.getData().add(new XYChart.Data<Long,Double>(1467320400000l, 15.00));
    series.getData().add(new XYChart.Data<Long,Double>(1467378000000l, 14.0));
    series.getData().add(new XYChart.Data<Long,Double>(1467381600000l, 15.0));
    series.getData().add(new XYChart.Data<Long,Double>(1467392400000l, 36.0));

    xQuoteChartAxis.setTickLabelFormatter(new NumberAxis.DefaultFormatter(xQuoteChartAxis){
         @Override public String toString(Number object) {
             Long dateLong=object.longValue();
             Calendar cal=Calendar.getInstance();
             cal.setTimeInMillis(dateLong);
             String amOrPm=(cal.get(Calendar.HOUR_OF_DAY)>=12 && cal.get(Calendar.HOUR_OF_DAY)<24) ? "PM":"AM";
             return String.format("%1$s"+amOrPm, cal.get(Calendar.HOUR_OF_DAY)); }
     });
    Scene scene  = new Scene(qChart,800,600);
    qChart.getData().add(series);
    DateFormat df=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
    String todayStr="2016-07-01 13:00:00";
    Date today=df.parse(todayStr);
    String yesterdayStr="2016-06-30 13:00:00";
    Date yesterday=df.parse(yesterdayStr);
    System.out.println(today.getTime());
    System.out.println(yesterday.getTime());
    xQuoteChartAxis.setLowerBound(yesterday.getTime());
    xQuoteChartAxis.setUpperBound(today.getTime());
    xQuoteChartAxis.setTickUnit(TWOHOURS_MILLISECONDS);
    stage.setScene(scene);
    stage.show();
}
public static void main(String[] args) {
    launch(args);
}
}
public类TestGraph扩展应用程序{
私人号码axis yQuoteChartAxis;
私人号码axis xQuoteChartAxis;
私有XYChart.系列;
专用线图qChart;
专用最终静态长两小时\毫秒=7200000;
@凌驾
public void start(Stage)引发异常{
xQuoteChartAxis=新数字Axis();
yQuoteChartAxis=新的数字Axis();
yQuoteChartAxis.setSide(右侧);
yQuoteChartAxis.setMinorTickVisible(假);
xQuoteChartAxis.setMinorTickVisible(假);
xQuoteChartAxis.setAutoRanging(假);
series=新的XYChart.series();
qChart=新线形图(xQuoteChartAxis,yQuoteChartAxis);
qChart.setCreateSymbols(假);
qChart.setLegendVisible(假);
series.getData().add(新的XYChart.Data(1467360000L,23.0));
series.getData().add(新的XYChart.Data(1467309600000l,23.05));
series.getData().add(新的XYChart.Data(14673132000L,25.14));
series.getData().add(新的XYChart.Data(1467316800000l,17.5));
series.getData().add(新的XYChart.Data(146732040000L,15.00));
series.getData().add(新的XYChart.Data(1467378000000l,14.0));
series.getData().add(新的XYChart.Data(1467381600000l,15.0));
series.getData().add(新的XYChart.Data(146739240000L,36.0));
xQuoteChartAxis.setTickLabelFormatter(新的数字轴默认格式化程序(xQuoteChartAxis){
@重写公共字符串到字符串(数字对象){
Long dateLong=object.longValue();
Calendar cal=Calendar.getInstance();
cal.setTimeInMillis(dateLong);

字符串amOrPm=(cal.get(Calendar.HOUR\u OF_DAY)>=12&&cal.get(Calendar.HOUR\u OF_DAY)对于生成您现有图表的应用程序。如果有人从生成您当前图表的代码开始回答此问题,则会更容易。注意,我更新了帖子。对于生成您现有图表的应用程序,如果有人从生成您当前图表的代码开始回答此问题,则会更容易。注意,我更新了帖子更新了帖子。