0
現在我正在使用JavaFX圖表,但我需要爲每種圖表類型創建一個通用類。例如,我需要創建一個ScatterChart,我可以從這個類創建一個ScatterChart,其中X = Number和Y = Number軸,X = String和Y = Number軸,X = Number和Y = String軸或X = String和Y = String,但是我發現在使用它之前必須定義圖表的類型,並且不可能在同一個圖表上更改座標軸的類型。如何使用數字或字符串軸創建泛型JavaFX XYChart?
我試圖讓這一點,但方法來操作數據不起作用:
public class JFXPanelScatterChartNS extends JFXPanel....
.....
private ScatterChart chart;
.......
public JFXPanelScatterChartNS(String[] xAxisCategories, String[] yAxisCategories){
if(xAxisCategories != null && yAxisCategories != null){
xAxisCategory = new CategoryAxis(FXCollections.observableList(Arrays.asList(xAxisCategories)));
yAxisCategory = new CategoryAxis(FXCollections.observableList(Arrays.asList(yAxisCategories)));
chart = new ScatterChart<String, String>(xAxisCategory, yAxisCategory);
}else if(xAxisCategories != null){
xAxisCategory = new CategoryAxis(FXCollections.observableList(Arrays.asList(xAxisCategories)));
yAxis = new NumberAxis(0.0,10.0,1.0);
chart = new ScatterChart<String, Number>(xAxisCategory, yAxis);
}else if(yAxisCategories != null){
xAxis = new NumberAxis(0.0,10.0,1.0);
yAxisCategory = new CategoryAxis(FXCollections.observableList(Arrays.asList(yAxisCategories)));
chart = new ScatterChart<Number, String>(xAxis, yAxisCategory);
}else{
xAxis = new NumberAxis(0.0,10.0,1.0);
yAxis = new NumberAxis(0.0,10.0,1.0);
chart = new ScatterChart<Number, Number>(xAxis, yAxisCategory);
}
Platform.runLater(() -> {
createScene(withDragAndDrop);
});
}
謝謝您的幫助!
現在我該如何使用操作同一個類中的數據的方法? 在下面的示例中,ScatterChar僅適用於X軸=數字和Y軸=字符串。
我目前的做法是:
public void addSeries(String idSeries, String nameSeries, final Number xIni, final String yIni){
final XYChart.Series<Number,String> newSeries;
//Valido si el Id ya existe
final boolean seriesExist = seriesMap.containsKey(idSeries);
//si no existe el ID entonces creo la nueva serie
if(!seriesExist){
newSeries = new XYChart.Series<>();
ObservableList<XYChart.Data<Number, String>> listaSerie;
listaSerie = FXCollections.synchronizedObservableList(FXCollections.observableList(new ArrayList<XYChart.Data<Number, String>>()));
newSeries.setData(listaSerie);
newSeries.setName(nameSeries);
newSeries.getData().add(new XYChart.Data<>(xIni,yIni));
Platform.runLater(() -> {
//Genero el index para la nueva serie
Integer newIndex = new Integer(chart.getData().size());
chart.getData().add(newIndex.intValue(), newSeries);
seriesMap.put(idSeries, newIndex);
});
}
}
public void setData(final String idSeries, final int index, final Number x, final String y){
//valido que exista la serie
boolean seriesExist = seriesMap.containsKey(idSeries);
//obtengo el index de la serie, como fue almacenada en la grafica
Integer indexSerie = seriesMap.get(idSeries);
if(seriesExist){
Platform.runLater(() -> {
XYChart.Series<Number,String> currentSeries = null;
currentSeries = chart.getData().get(indexSerie.intValue());
currentSeries.getData().set(index,new XYChart.Data<>(x,y));
});
}
}
謝謝@James_D。現在我該如何使用操作同一個類中的數據的方法?示例:查看下面的回覆: – Raul 2015-04-05 23:28:32
我修改了問題並添加了方法 – Raul 2015-04-05 23:37:00
你是最棒的!!你能幫助我與URL中的其他問題[鏈接](http://stackoverflow.com/questions/29463467/how-to-draw-a-line-from-the-point-to-x-axis-in-在-JavaFX的scatterchart)。我想通過圖像更改ScatterChart中的符號,但是我沒有在Web中找到解決方案。 – Raul 2015-04-06 00:30:08