javafx - Using String Time stamps in LineChart -


i'm using javafx. i've modified example of zoom function on linechart. exception when doing zoom. i've figured out there mismatch between types on xaxis, wants numbers , i'm using string time stamps. how can adapt work time strings "12:33:23" on xaxis?

package javafxapplication28;  import java.util.collections; import java.util.random; import static java.util.uuid.fromstring;  import javafx.application.application; import javafx.beans.binding.booleanbinding; import javafx.beans.property.objectproperty; import javafx.beans.property.simpleobjectproperty; import javafx.collections.fxcollections; import javafx.collections.observablelist; import javafx.event.actionevent; import javafx.event.eventhandler; import javafx.geometry.insets; import javafx.geometry.point2d; import javafx.geometry.pos; import javafx.scene.node; import javafx.scene.scene; import javafx.scene.chart.axis; import javafx.scene.chart.linechart; import javafx.scene.chart.numberaxis; import javafx.scene.chart.xychart.data; import javafx.scene.chart.xychart.series; import javafx.scene.control.button; import javafx.scene.input.mouseevent; import javafx.scene.layout.borderpane; import javafx.scene.layout.hbox; import javafx.scene.layout.stackpane; import javafx.scene.paint.color; import javafx.scene.shape.rectangle; import javafx.stage.stage; import javafx.beans.property.stringproperty; import javafx.util.stringconverter;  public class javafxapplication28 extends application {   private static final int num_data_points = 1000 ;  @override public void start(stage primarystage) { final linechart<number, number> chart = createchart();  final stackpane chartcontainer = new stackpane(); chartcontainer.getchildren().add(chart);  final rectangle zoomrect = new rectangle(); zoomrect.setmanaged(false); zoomrect.setfill(color.lightseagreen.derivecolor(0, 1, 1, 0.5)); chartcontainer.getchildren().add(zoomrect);  setupzooming(zoomrect, chart);  final hbox controls = new hbox(10); controls.setpadding(new insets(10)); controls.setalignment(pos.center);  final button zoombutton = new button("zoom"); final button resetbutton = new button("reset"); zoombutton.setonaction(new eventhandler<actionevent>() { @override public void handle(actionevent event) { dozoom(zoomrect, chart); } }); resetbutton.setonaction(new eventhandler<actionevent>() { @override public void handle(actionevent event) { final numberaxis xaxis = (numberaxis)chart.getxaxis();  xaxis.setlowerbound(10); xaxis.setupperbound(200); final numberaxis yaxis = (numberaxis)chart.getyaxis(); yaxis.setlowerbound(0); yaxis.setupperbound(200);  zoomrect.setwidth(0); zoomrect.setheight(0); }   }); final booleanbinding disablecontrols =  zoomrect.widthproperty().lessthan(5) .or(zoomrect.heightproperty().lessthan(5)); zoombutton.disableproperty().bind(disablecontrols); controls.getchildren().addall(zoombutton, resetbutton);  final borderpane root = new borderpane(); root.setcenter(chartcontainer); root.setbottom(controls);  final scene scene = new scene(root, 600, 400); primarystage.setscene(scene); primarystage.show(); }  private linechart<number, number> createchart() { final numberaxis xaxis = createaxis_x(); final numberaxis yaxis = createaxis_y();  final linechart<number, number> chart = new linechart<>(xaxis, yaxis); chart.setanimated(false); chart.setcreatesymbols(false); chart.setdata(generatechartdata());  return chart ; }  //set range of x axis  private numberaxis createaxis_x() { final numberaxis xaxis = new numberaxis(); xaxis.setautoranging(false);  string xmin = "12:30:12"; string xmax = "13:21:01"; double xmindouble = double.parsedouble(xmin); double xmaxdouble = double.parsedouble(xmax); xaxis.setlowerbound(xmindouble); xaxis.setupperbound(xmaxdouble);  return xaxis; }  //set range of y axis private numberaxis createaxis_y() { final numberaxis yaxis = new numberaxis(); yaxis.setautoranging(false);  string ymin = "40"; string ymax = "400"; double ymindouble = double.parsedouble(ymin); double ymaxdouble = double.parsedouble(ymax);  yaxis.setlowerbound(ymindouble); yaxis.setupperbound(ymaxdouble);  return yaxis; }   private observablelist<series<number, number>> generatechartdata() { final series<number, number> series = new series<>(); series.setname("data"); final random rng = new random(); (int i=0; i<num_data_points; i++) { data<number, number> datapoint = new data<number, number>(i, rng.nextint(1000)); series.getdata().add(datapoint); } return fxcollections.observablearraylist(collections.singleton(series)); }  private void setupzooming(final rectangle rect, final node zoomingnode) { final objectproperty<point2d> mouseanchor = new simpleobjectproperty<>(); zoomingnode.setonmousepressed(new eventhandler<mouseevent>() { @override public void handle(mouseevent event) { mouseanchor.set(new point2d(event.getx(), event.gety())); rect.setwidth(0); rect.setheight(0); } }); zoomingnode.setonmousedragged(new eventhandler<mouseevent>() { @override public void handle(mouseevent event) { double x = event.getx(); double y = event.gety(); rect.setx(math.min(x, mouseanchor.get().getx())); rect.sety(math.min(y, mouseanchor.get().gety())); rect.setwidth(math.abs(x - mouseanchor.get().getx())); rect.setheight(math.abs(y - mouseanchor.get().gety())); } }); }  private void dozoom(rectangle zoomrect, linechart<number, number> chart) { point2d zoomtopleft = new point2d(zoomrect.getx(), zoomrect.gety()); point2d zoombottomright = new point2d(zoomrect.getx() + zoomrect.getwidth(), zoomrect.gety() + zoomrect.getheight()); final numberaxis yaxis = (numberaxis) chart.getyaxis(); point2d yaxisinscene = yaxis.localtoscene(0, 0); final numberaxis xaxis = (numberaxis) chart.getxaxis(); system.out.println(xaxis); point2d xaxisinscene = xaxis.localtoscene(0, 0); double xoffset = zoomtopleft.getx() - yaxisinscene.getx() ; double yoffset = zoombottomright.gety() - xaxisinscene.gety(); double xaxisscale = xaxis.getscale(); double yaxisscale = yaxis.getscale(); xaxis.setlowerbound(xaxis.getlowerbound() + xoffset / xaxisscale); xaxis.setupperbound(xaxis.getlowerbound() + zoomrect.getwidth() / xaxisscale); yaxis.setlowerbound(yaxis.getlowerbound() + yoffset / yaxisscale); yaxis.setupperbound(yaxis.getlowerbound() - zoomrect.getheight() / yaxisscale); system.out.println(yaxis.getlowerbound() + " " + yaxis.getupperbound()); zoomrect.setwidth(0); zoomrect.setheight(0); }  public static void main(string[] args) { launch(args); } } 

it works this. draw rectangle in linechart area zoom in. press zoom button. sample code above gives exception due problem time strings. work use instead:

string xmin = "40"; string xmax = "300";  

thanks ur help!


Comments

Popular posts from this blog

amazon web services - S3 Pre-signed POST validate file type? -

c# - Check Keyboard Input Winforms -