JavaFX 2.2如何在FXML生成的LineChart中的DateAxis中设置setBowerBound和setUpperBound

时间:2014-01-13 11:43:39

标签: date javafx fxml

我为我的应用程序设置了一个JavaFX场景构建器。在我的折线图上,我根据日期投了一些图表。默认情况下,JavaFX LineChart不支持日期。所以我使用这个图书馆http://myjavafx.blogspot.com/2013/09/javafx-charts-display-date-values-on.html,它工作正常。 Librray还允许使用setLowerBound和setUpperBound方法。我已经写了代码,它不起作用。

我的FXML代码(仅适用于LINECHART):

 <LineChart fx:id="lineChart" animated="false">
    <xAxis>
       <DateAxis side="BOTTOM" label="Napoved kalibracije" fx:id="dateAxis"/>
    </xAxis>
    <yAxis >
       <NumberAxis label="Odstopanja v %" lowerBound="0" upperBound="95" tickUnit="10"/>
    </yAxis>
 </LineChart>

正如您所看到的,我已经设置了id =“dateAxis”,因此我可以像我在Scene Builder中提到的那样从主类引用布局包。

主类中的代码(仅适用于DATAAXIS)我从FXML获得ID:

 Scene scena = primaryStage.getScene();
 DateAxis dA = (DateAxis) scena.lookup("#dateAxis");
 dA.setUpperBound(new GregorianCalendar(2016,8,23).getTime());
 primaryStage.show(); 

 System.out.println(dA);

返回:

 DateAxis[id=dateAxis, styleClass=axis]

什么意思是工作正常。但是我在xAxis(DateAxis)上的图表并未到2016年8月23日。 如果我们解决这个问题,我将非常感激。

1 个答案:

答案 0 :(得分:0)

您需要应用两个更改,第一个是添加日期轴的构造函数,两个参数:下限+上限, 例如:

 final DateAxis xAxis = new DateAxis(new Date(2013-1900,1,4),new Date(2013-1900,30,14));

另一个变化是更改类DateAxis的源代码,查找这部分代码(只搜索“true”以查找特定行)

public DateAxis(Date lowerBound, Date upperBound) {
        this();
        setAutoRanging(true); // change it to "false" 
        setLowerBound(lowerBound);
        setUpperBound(upperBound);
    }

并将“setAutoRanging”参数更改为“false”