【发布时间】:2014-01-22 13:05:25
【问题描述】:
如何从 FXML 文件中指定图表的轴类型?似乎默认类型是<String, Integer>。如果我将我的可注入字段声明为LineChart<Number, Number> lineChart,并且我使用(Number, Number 创建了一个数据系列,程序将抛出一个ClassCastException。
必须使用 FXML 文件。最坏的情况是我手动创建了图表。我最好的猜测是这是一个错误。
import java.io.IOException;
import java.net.URL;
import java.util.ResourceBundle;
import javafx.fxml.FXML;
import javafx.fxml.FXMLLoader;
import javafx.fxml.Initializable;
import javafx.scene.chart.LineChart;
import javafx.scene.chart.XYChart;
import javafx.scene.layout.AnchorPane;
/**
*
* @author ggrec
*
*/
public class TestChart implements Initializable
{
// ====================== 2. Instance Fields =============================
@FXML
private LineChart<Number, Number> testChart;
private AnchorPane anchorPane;
// ==================== 4. Constructors ====================
public TestChart()
{
final FXMLLoader fxmlLoader = new FXMLLoader( TestChart.class.getResource("testChart.fxml") );
fxmlLoader.setController(this);
try
{
anchorPane = (AnchorPane) fxmlLoader.load();
}
catch (final IOException e)
{
e.printStackTrace();
}
}
// ==================== 5. Creators ====================
@Override
public void initialize(final URL arg0, final ResourceBundle arg1)
{
// testChart.getXAxis().setAutoRanging(true);
// testChart.getYAxis().setAutoRanging(true);
testChart.getData().add(getDummyData());
}
// ==================== 7. Getters & Setters ====================
public AnchorPane getAnchorPane()
{
return anchorPane;
}
// ==================== 13. Utility Methods ====================
private XYChart.Series getDummyData()
{
final XYChart.Series series = new XYChart.Series();
series.setName("My portfolio");
series.getData().add(new XYChart.Data<Number, Number>(1, 23)); // Works for ("1", 23)
// series.getData().add(new XYChart.Data("2", 14));
// series.getData().add(new XYChart.Data("3", 15));
// series.getData().add(new XYChart.Data("4", 24));
// series.getData().add(new XYChart.Data("5", 34));
// series.getData().add(new XYChart.Data("6", 36));
// series.getData().add(new XYChart.Data("7", 22));
// series.getData().add(new XYChart.Data("8", 45));
// series.getData().add(new XYChart.Data("9", 43));
// series.getData().add(new XYChart.Data("10", 17));
// series.getData().add(new XYChart.Data("11", 29));
// series.getData().add(new XYChart.Data("12", 25));
return series;
}
}
java.lang.ClassCastException: java.lang.Integer cannot be cast to java.lang.String
at javafx.scene.chart.CategoryAxis.invalidateRange(CategoryAxis.java:399)
at javafx.scene.chart.XYChart.updateAxisRange(XYChart.java:603)
at javafx.scene.chart.XYChart.layoutChartChildren(XYChart.java:620)
at javafx.scene.chart.Chart$1.layoutChildren(Chart.java:84)
at javafx.scene.Parent.layout(Parent.java:1018)
【问题讨论】:
-
您找到解决问题的方法了吗?因为我正在为这个问题而苦恼。
-
你能展示 FXML 吗?