jfreechart - How to change the TimeSeries and TimeSeriesCollection to XYSeries and XYCollection respectively in java? -


based on example, code draging point in chart. want replace timeseries object xyseries because dont want months in x-axis; want series of number point1, point2, point3 , on, , want same logic. when replacing xyseries not getting how change logic xyseries.

package com.example.java;  import org.jfree.chart.*; import org.jfree.chart.axis.valueaxis; import org.jfree.chart.entity.chartentity; import org.jfree.chart.entity.entitycollection; import org.jfree.chart.entity.xyitementity; import org.jfree.chart.labels.standardxyserieslabelgenerator; import org.jfree.chart.plot.xyplot; import org.jfree.chart.renderer.xy.xyitemrenderer; import org.jfree.chart.renderer.xy.xylineandshaperenderer; import org.jfree.data.time.month; import org.jfree.data.time.timeseries; import org.jfree.data.time.timeseriescollection; import org.jfree.data.xy.xydataset; import org.jfree.ui.applicationframe; import org.jfree.ui.refineryutilities;  import java.awt.*; import java.awt.event.mouseevent; import java.awt.event.mouselistener; import java.awt.event.mousemotionlistener; import java.awt.geom.point2d; import java.awt.geom.rectangle2d;   @suppresswarnings("serial") public class seriesandpointdragandmove extends applicationframe implements chartmouselistener, mouselistener, mousemotionlistener {      public static void main(string paramarrayofstring) {         seriesandpointdragandmove seriesandpointdragandmove = new seriesandpointdragandmove(                 "plot");          seriesandpointdragandmove.pack();         refineryutilities.centerframeonscreen(seriesandpointdragandmove);         seriesandpointdragandmove.setvisible(true);     }      boolean canmove = false;     double finalmovepointy = 0;     chartrenderinginfo info = null;;     double initialmovepointy = 0;     jfreechart jfreechart = null;     chartpanel localchartpanel = null;       timeseries localtimeseries = new timeseries("series"); //    xyseries localtimeseries1 = new xyseries("series"); //test      timeseriescollection timeseriescollection = new timeseriescollection(); //    xyseriescollection timeseriescollection1 = new xyseriescollection();//test      xyitementity xyitementity = null;       public seriesandpointdragandmove(string paramstring) {         super(paramstring);         jfreechart = chartfactory.createtimeserieschart(                 "velocity point plot", "points (index)", "velocity (m/s)",                 createdataset(), true, true, false);         localchartpanel = new chartpanel(jfreechart);         localchartpanel.addchartmouselistener(this);         localchartpanel.addmousemotionlistener(this);         localchartpanel.addmouselistener(this);         localchartpanel.setpreferredsize(new dimension(750, 500));         localchartpanel.setautoscrolls(false);         localchartpanel.setmousezoomable(false);         this.info = localchartpanel.getchartrenderinginfo();         xyplot localxyplot = (xyplot) jfreechart.getplot();         xyitemrenderer localxyitemrenderer = localxyplot.getrenderer();          localxyitemrenderer.setseriesstroke(0, new basicstroke(2.0f));          xylineandshaperenderer localxylineandshaperenderer = (xylineandshaperenderer) localxyplot                 .getrenderer();         localxylineandshaperenderer.setbaseshapesvisible(true);          localxylineandshaperenderer.setseriesfillpaint(0, color.white);         localxylineandshaperenderer.setusefillpaint(true);         localxylineandshaperenderer                 .setlegenditemtooltipgenerator(new standardxyserieslabelgenerator(                         "tooltip {0}"));         valueaxis range = localxyplot.getrangeaxis();         range.setlowerbound(0); // set lower limit can't move in -ve         // range         range.setupperbound(20); // set upper limit per app. needs         setcontentpane(localchartpanel);     }      public void chartmouseclicked(chartmouseevent paramchartmouseevent) {       }      public void chartmousemoved(chartmouseevent paramchartmouseevent) {     }      public xydataset createdataset() { // //        (int = 0; <6 ; i++) { //            localtimeseries.add(i,4); // //        }          localtimeseries.add(new month(1, 2002), 4);         localtimeseries.add(new month(2, 2002), 4);         localtimeseries.add(new month(3, 2002), 4);         localtimeseries.add(new month(4, 2002), 4);         localtimeseries.add(new month(5, 2002), 4);         localtimeseries.add(new month(6, 2002), 4);         localtimeseries.add(new month(7, 2002), 4);         localtimeseries.add(new month(8, 2002), 4);         localtimeseries.add(new month(9, 2002), 4);         localtimeseries.add(new month(10, 2002), 4);         localtimeseries.add(new month(11, 2002), 4);         localtimeseries.add(new month(12, 2002), 4);          timeseriescollection.addseries(localtimeseries); //        timeseriescollection1.addseries(localtimeseries1);         return timeseriescollection;     }       public void mouseclicked(mouseevent e) {     }      public void mousedragged(mouseevent e) {         // @ time use 1 of them.         //movetimeseries(e); // comment or uncomment enable or disable series         // movement         movepoint(e); // comment or uncomment enable or disable selected         // point movement     }      public void mouseentered(mouseevent e) {     }      public void mouseexited(mouseevent e) {         canmove = false; // stop movement if cursor moved out chart         // area         initialmovepointy = 0;         localchartpanel.setcursor(new cursor(cursor.default_cursor));     }      public void mousemoved(mouseevent e) {     }      public void mousepressed(mouseevent e) {         int x = e.getx(); // initialized point whenenver mouse pressed         int y = e.gety();         entitycollection entities = this.info.getentitycollection();         chartmouseevent cme = new chartmouseevent(jfreechart, e, entities                 .getentity(x, y));         chartentity entity = cme.getentity();         if ((entity != null) && (entity instanceof xyitementity)) {             xyitementity = (xyitementity) entity;         } else if (!(entity instanceof xyitementity)) {             xyitementity = null;             return;         }         if (xyitementity == null) {             return; // return if not pressed on series point         }         point pt = e.getpoint();         xyplot xy = jfreechart.getxyplot();         rectangle2d dataarea = localchartpanel.getchartrenderinginfo()                 .getplotinfo().getdataarea();         point2d p = localchartpanel.translatescreentojava2d(pt);         initialmovepointy = xy.getrangeaxis().java2dtovalue(p.gety(), dataarea,                 xy.getrangeaxisedge());         canmove = true;         localchartpanel.setcursor(new cursor(cursor.hand_cursor));     }      public void mousereleased(mouseevent e) {         // stop dragging on mouse released         canmove = false;         initialmovepointy = 0;         localchartpanel.setcursor(new cursor(cursor.default_cursor));     }      public void movepoint(mouseevent me) {         try {             if (canmove) {                 int itemindex = xyitementity.getitem();                 point pt = me.getpoint();                 xyplot xy = jfreechart.getxyplot();                 rectangle2d dataarea = localchartpanel.getchartrenderinginfo()                         .getplotinfo().getdataarea();                 point2d p = localchartpanel.translatescreentojava2d(pt);                 finalmovepointy = xy.getrangeaxis().java2dtovalue(p.gety(),                         dataarea, xy.getrangeaxisedge());                 double difference = finalmovepointy - initialmovepointy;                 if (localtimeseries.getvalue(itemindex).doublevalue()                         + difference > xy.getrangeaxis().getrange().getlength()                         || localtimeseries.getvalue(itemindex).doublevalue()                         + difference < 0.0d) {                     initialmovepointy = finalmovepointy;                 }                 // retrict movement upper , lower limit (upper limit                 // should per application needs)                 double targetpoint = localtimeseries.getvalue(itemindex)                         .doublevalue()                         + difference;                 if (targetpoint > 15 || targetpoint < 0) {                     return;                 } else                     localtimeseries.update(itemindex, targetpoint);                        jfreechart.firechartchanged();                 localchartpanel.updateui();                 initialmovepointy = finalmovepointy;             }         } catch (exception e) {             system.out.println(e);         }     }      public void movetimeseries(mouseevent me) {         try {             if (canmove) {                 point pt = me.getpoint();                 xyplot xy = jfreechart.getxyplot();                 rectangle2d dataarea = localchartpanel.getchartrenderinginfo()                         .getplotinfo().getdataarea();                 point2d p = localchartpanel.translatescreentojava2d(pt);                 finalmovepointy = xy.getrangeaxis().java2dtovalue(p.gety(),                         dataarea, xy.getrangeaxisedge());                 double difference = finalmovepointy - initialmovepointy;                    (int = 0; < localtimeseries.getitemcount(); i++) {                     system.out.println(localtimeseries.getitemcount());                     if (localtimeseries.getvalue(i).doublevalue() + difference > xy.getrangeaxis().getrange().getlength()                             || localtimeseries.getvalue(i).doublevalue()                             + difference < 0.0d) {                         initialmovepointy = finalmovepointy;                     }                 }                  // retrict movement upper , lower limit (upper limit                 // should per application needs)                 (int = 0; < localtimeseries.getitemcount(); i++) {                     double targetpoint = localtimeseries.getvalue(i)                             .doublevalue()                             + difference;                     if (targetpoint > 50 || targetpoint < 0) {                         return;                     }                 }                 (int = 0; < localtimeseries.getitemcount(); i++) {                     double targetpoint = localtimeseries.getvalue(i)                             .doublevalue()                             + difference;                     localtimeseries.update(i, targetpoint);                 }                 jfreechart.firechartchanged();                 localchartpanel.updateui();                 initialmovepointy = finalmovepointy;             }         } catch (exception e) {             system.out.println(e);         }     } } 

as both accept xydataset , both use xylineandshaperenderer internally, essential step replace chartfactory:

// chartfactory.createtimeserieschart(…); chartfactory.createxylinechart(…); 

the remaining changes substitute xyseries accessors/mutators , construct gui on event dispatch thread.

image

import java.awt.*; import java.awt.event.mouseevent; import java.awt.event.mouselistener; import java.awt.event.mousemotionlistener; import java.awt.geom.point2d; import java.awt.geom.rectangle2d; import org.jfree.chart.*; import org.jfree.chart.axis.valueaxis; import org.jfree.chart.entity.chartentity; import org.jfree.chart.entity.entitycollection; import org.jfree.chart.entity.xyitementity; import org.jfree.chart.labels.standardxyserieslabelgenerator; import org.jfree.chart.plot.plotorientation; import org.jfree.chart.plot.xyplot; import org.jfree.chart.renderer.xy.xyitemrenderer; import org.jfree.chart.renderer.xy.xylineandshaperenderer; import org.jfree.data.xy.xydataset; import org.jfree.data.xy.xyseries; import org.jfree.data.xy.xyseriescollection; import org.jfree.ui.applicationframe; import org.jfree.ui.refineryutilities;  /**  * @see http://stackoverflow.com/a/38711095/230513  * @see http://www.jfree.org/forum/viewtopic.php?f=3&t=30569  */ public class seriesandpointdragandmove extends applicationframe     implements chartmouselistener, mouselistener, mousemotionlistener {      public static void main(string[] args) {         eventqueue.invokelater(new runnable() {             @override             public void run() {                 seriesandpointdragandmove app = new seriesandpointdragandmove("plot");                 app.pack();                 refineryutilities.centerframeonscreen(app);                 app.setvisible(true);             }         });     }      private boolean canmove = false;     private double finalmovepointy = 0;     private chartrenderinginfo info = null;     private double initialmovepointy = 0;     private jfreechart jfreechart = null;     private chartpanel chartpanel = null;     private xyseries series = new xyseries("series");     private xyseriescollection collection = new xyseriescollection();     private xyitementity xyitementity = null;      public seriesandpointdragandmove(string paramstring) {         super(paramstring);         jfreechart = chartfactory.createxylinechart(             "drag point", "points (index)", "velocity (m/s)",             createdataset(), plotorientation.vertical, true, true, false);         chartpanel = new chartpanel(jfreechart) {             @override             public dimension getpreferredsize() {                 return new dimension(640, 480);             }         };         chartpanel.addchartmouselistener(this);         chartpanel.addmousemotionlistener(this);         chartpanel.addmouselistener(this);         chartpanel.setautoscrolls(false);         chartpanel.setmousezoomable(false);         this.info = chartpanel.getchartrenderinginfo();         xyplot localxyplot = (xyplot) jfreechart.getplot();         xyitemrenderer localxyitemrenderer = localxyplot.getrenderer();         localxyitemrenderer.setseriesstroke(0, new basicstroke(2.0f));         xylineandshaperenderer localxylineandshaperenderer             = (xylineandshaperenderer) localxyplot.getrenderer();         localxylineandshaperenderer.setbaseshapesvisible(true);         localxylineandshaperenderer.setseriesfillpaint(0, color.white);         localxylineandshaperenderer.setusefillpaint(true);         localxylineandshaperenderer.setlegenditemtooltipgenerator(             new standardxyserieslabelgenerator("tooltip {0}"));         valueaxis range = localxyplot.getrangeaxis();         range.setlowerbound(0);         range.setupperbound(20);         setcontentpane(chartpanel);     }      @override     public void chartmouseclicked(chartmouseevent paramchartmouseevent) {     }      @override     public void chartmousemoved(chartmouseevent paramchartmouseevent) {     }      public xydataset createdataset() {         (int = 0; < 8; i++) {             series.add(i, 4);         }         collection.addseries(series);         return collection;     }      @override     public void mouseclicked(mouseevent e) {     }      @override     public void mousedragged(mouseevent e) {         movepoint(e);     }      @override     public void mouseentered(mouseevent e) {     }      @override     public void mouseexited(mouseevent e) {         canmove = false; // stop movement if cursor out chart area         initialmovepointy = 0;         chartpanel.setcursor(new cursor(cursor.default_cursor));     }      public void mousemoved(mouseevent e) {     }      public void mousepressed(mouseevent e) {         int x = e.getx(); // initialized point whenenver mouse pressed         int y = e.gety();         entitycollection entities = this.info.getentitycollection();         chartmouseevent cme = new chartmouseevent(jfreechart, e, entities             .getentity(x, y));         chartentity entity = cme.getentity();         if ((entity != null) && (entity instanceof xyitementity)) {             xyitementity = (xyitementity) entity;         } else if (!(entity instanceof xyitementity)) {             xyitementity = null;             return;         }         if (xyitementity == null) {             return; // return if not pressed on series point         }         point pt = e.getpoint();         xyplot xy = jfreechart.getxyplot();         rectangle2d dataarea = chartpanel.getchartrenderinginfo()             .getplotinfo().getdataarea();         point2d p = chartpanel.translatescreentojava2d(pt);         initialmovepointy = xy.getrangeaxis().java2dtovalue(p.gety(), dataarea,             xy.getrangeaxisedge());         canmove = true;         chartpanel.setcursor(new cursor(cursor.hand_cursor));     }      @override     public void mousereleased(mouseevent e) {         // stop dragging on mouse released         canmove = false;         initialmovepointy = 0;         chartpanel.setcursor(new cursor(cursor.default_cursor));     }      public void movepoint(mouseevent me) {         if (canmove) {             int itemindex = xyitementity.getitem();             point pt = me.getpoint();             xyplot xy = jfreechart.getxyplot();             rectangle2d dataarea = chartpanel.getchartrenderinginfo()                 .getplotinfo().getdataarea();             point2d p = chartpanel.translatescreentojava2d(pt);             finalmovepointy = xy.getrangeaxis().java2dtovalue(p.gety(),                 dataarea, xy.getrangeaxisedge());             double difference = finalmovepointy - initialmovepointy;             if (series.gety(itemindex).doublevalue()                 + difference > xy.getrangeaxis().getrange().getlength()                 || series.gety(itemindex).doublevalue()                 + difference < 0.0d) {                 initialmovepointy = finalmovepointy;             }             // retrict movement upper , lower limit (upper limit             // should per application needs)             double targetpoint = series.gety(itemindex).doublevalue() + difference;             if (targetpoint > 15 || targetpoint < 0) {                 return;             } else {                 series.update(integer.valueof(itemindex), double.valueof(targetpoint));             }             jfreechart.firechartchanged();             chartpanel.updateui();             initialmovepointy = finalmovepointy;         }     }      public void moveseries(mouseevent me) {         if (canmove) {             point pt = me.getpoint();             xyplot xy = jfreechart.getxyplot();             rectangle2d dataarea = chartpanel.getchartrenderinginfo()                 .getplotinfo().getdataarea();             point2d p = chartpanel.translatescreentojava2d(pt);             finalmovepointy = xy.getrangeaxis().java2dtovalue(p.gety(),                 dataarea, xy.getrangeaxisedge());             double difference = finalmovepointy - initialmovepointy;              (int = 0; < series.getitemcount(); i++) {                 system.out.println(series.getitemcount());                 if (series.gety(i).doublevalue() + difference > xy.getrangeaxis().getrange().getlength()                     || series.gety(i).doublevalue()                     + difference < 0.0d) {                     initialmovepointy = finalmovepointy;                 }             }              // retrict movement upper , lower limit (upper limit             // should per application needs)             (int = 0; < series.getitemcount(); i++) {                 double targetpoint = series.gety(i)                     .doublevalue()                     + difference;                 if (targetpoint > 50 || targetpoint < 0) {                     return;                 }             }             (int = 0; < series.getitemcount(); i++) {                 double targetpoint = series.gety(i)                     .doublevalue()                     + difference;                 series.update(integer.valueof(i), double.valueof(targetpoint));             }             jfreechart.firechartchanged();             chartpanel.updateui();             initialmovepointy = finalmovepointy;         }     } } 

Comments