java - How to create a generic JavaFX XYChart with Number or String Axes? -



java - How to create a generic JavaFX XYChart with Number or String Axes? -

now work javafx charts, need create generic class each chart type. example, need create scatterchart can create class scatterchart x = number , y= number axes, x = string , y = number axes, x = number , y = string axes or x = string , y = string, see mandatory define type of chart before work it, , not possible alter types of axes @ same chart.

i tried create this, methods manipulate info not work:

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); }); }

thank help!!

now how work methods manipulate info in same class? in illustration below, scatterchar works x axis = number , y axis = string.

my current methods are:

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)); }); } }

consider using mill methods instead of public constructor, , generifying methods have:

import java.util.arrays; import javafx.application.platform; import javafx.collections.fxcollections; import javafx.embed.swing.jfxpanel; import javafx.scene.chart.axis; import javafx.scene.chart.categoryaxis; import javafx.scene.chart.numberaxis; import javafx.scene.chart.scatterchart; public class jfxpanelscatterchartns<x,y> extends jfxpanel { private scatterchart<x,y> chart ; private boolean withdraganddrop = false ; private jfxpanelscatterchartns(axis<x> xaxis, axis<y> yaxis) { chart = new scatterchart<>(xaxis, yaxis); platform.runlater(() -> createscene(withdraganddrop)); } private void createscene(boolean withdraganddrop) { // ... } public static jfxpanelscatterchartns<string, string> createstringinstance(string[] xaxiscategories, string[] yaxiscategories) { axis<string> xaxiscategory = new categoryaxis(fxcollections.observablelist(arrays.aslist(xaxiscategories))); axis<string> yaxiscategory = new categoryaxis(fxcollections.observablelist(arrays.aslist(yaxiscategories))); homecoming new jfxpanelscatterchartns<>(xaxiscategory, yaxiscategory); } public static jfxpanelscatterchartns<string, number> createstringnumberinstance(string[] xaxiscategories) { axis<string> xaxiscategory = new categoryaxis(fxcollections.observablelist(arrays.aslist(xaxiscategories))); homecoming new jfxpanelscatterchartns<string, number>(xaxiscategory, new numberaxis(0.0,10.0,1.0)); } public static jfxpanelscatterchartns<number, string> createnumberstringinstance(string[] yaxiscategories) { axis<string> yaxiscategory = new categoryaxis(fxcollections.observablelist(arrays.aslist(yaxiscategories))); homecoming new jfxpanelscatterchartns<number, string>(new numberaxis(0.0,10.0,1.0), yaxiscategory); } public static jfxpanelscatterchartns<number, number> createnumberinstance() { homecoming new jfxpanelscatterchartns<number, number>(new numberaxis(0.0,10.0,1.0), new numberaxis(0.0,10.0,1.0)); } public void addseries(string idseries, string nameseries, final x xini, final y yini){ final xychart.series<x,y> 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<x, y>> listaserie; listaserie = fxcollections.synchronizedobservablelist(fxcollections.observablelist(new arraylist<xychart.data<x, y>>())); 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 x x, final y 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<x,y> currentseries = null; currentseries = chart.getdata().get(indexserie.intvalue()); currentseries.getdata().set(index,new xychart.data<>(x,y)); }); } } }

now can write code like:

jfxpanelscatterchartns<number, string> chart = jfxpanelscatterchartns.createnumberstringinstance(new string[] {"a", "b", "c"}); chart.addseries("series1", "series 1", 1, "a"); jfxpanelscatterchartns<number, number> numberchart = jfxpanelscatterchartns.createnumberinstance(); numberchart.addseries("series2", "series 2", 5, 3);

java javafx javafx-8

Comments

Popular posts from this blog

java - How to set log4j.defaultInitOverride property to false in jboss server 6 -

c - GStreamer 1.0 1.4.5 RTSP Example Server sends 503 Service unavailable -

Using ajax with sonata admin list view pagination -