java - how to draw crosshair on stock barchart -
hi want draw cross hair on barchar .can somone me.i jst want cross hair print x , y cordinates mouse pointing or clicking.i m fine if cross hair prints x , y cordinates on console .here's code
import java.awt.color; import java.awt.dimension; import java.io.bufferedreader; import java.io.filereader; import java.text.dateformat; import java.text.decimalformat; import java.text.simpledateformat; import java.util.date; import java.util.stringtokenizer; import javax.swing.jpanel; import org.jfree.chart.chartcolor; import org.jfree.chart.chartpanel; import org.jfree.chart.chartutilities; import org.jfree.chart.jfreechart; import org.jfree.chart.axis.dateaxis; import org.jfree.chart.axis.numberaxis; import org.jfree.chart.labels.standardxytooltipgenerator; import org.jfree.chart.plot.combineddomainxyplot; import org.jfree.chart.plot.marker; import org.jfree.chart.plot.valuemarker; import org.jfree.chart.plot.xyplot; import org.jfree.chart.renderer.xy.highlowrenderer; import org.jfree.chart.renderer.xy.standardxybarpainter; import org.jfree.chart.renderer.xy.xybarrenderer; import org.jfree.chart.renderer.xy.xyitemrenderer; import org.jfree.data.time.day; import org.jfree.data.time.timeseries; import org.jfree.data.time.timeseriescollection; import org.jfree.data.time.ohlc.ohlcseries; import org.jfree.data.time.ohlc.ohlcseriescollection; import org.jfree.data.xy.intervalxydataset; import org.jfree.data.xy.ohlcdataset; import org.jfree.ui.applicationframe; import org.jfree.ui.refineryutilities; public class pricevolumechart2 extends applicationframe { final static string filename = "d:\\cl.txt"; /** * default constructor */ public pricevolumechart2(string title) { super(title); jpanel panel = createdemopanel(); panel.setpreferredsize(new dimension(1200, 800)); setcontentpane(panel); } private static ohlcdataset createpricedataset(string filename) { // following data taken http://finance.yahoo.com/ // demo purposes... ohlcseries s1 = new ohlcseries(filename); try { bufferedreader in = new bufferedreader(new filereader(filename)); dateformat df = new simpledateformat("mm/dd/yyyy"); string inputline; in.readline(); while ((inputline = in.readline()) != null) { stringtokenizer st = new stringtokenizer(inputline, ","); date date = df.parse(st.nexttoken()); double open = double.parsedouble(st.nexttoken()); double high = double.parsedouble(st.nexttoken()); double low = double.parsedouble(st.nexttoken()); double close = double.parsedouble(st.nexttoken()); s1.add(new day(date), open, high, low, close); //t1.add(new day(date), close); } in.close(); } catch (exception e) { e.printstacktrace(); } ohlcseriescollection dataset = new ohlcseriescollection(); dataset.addseries(s1); return dataset; } private static jfreechart createcombinedchart() { ohlcdataset data1 = createpricedataset(filename); system.out.println(data1.getitemcount(0)); highlowrenderer renderer1 = new highlowrenderer(); renderer1.setticklength(3); renderer1.setbasetooltipgenerator(new standardxytooltipgenerator (standardxytooltipgenerator.default_tool_tip_format, new simpledateformat("d-mmm-yyyy"), new decimalformat("0.00"))); renderer1.setseriespaint(0, color.blue); dateaxis domainaxis = new dateaxis("date"); numberaxis rangeaxis = new numberaxis("price"); rangeaxis.setnumberformatoverride(new decimalformat("$0.00")); rangeaxis.setautorange(true); rangeaxis.setautorangeincludeszero(false); chartcolor chartcolor=new chartcolor(0, 0, 0); xyplot plot1 = new xyplot(data1, domainaxis, rangeaxis, renderer1); plot1.getrangecrosshairpaint(); plot1.setrangepannable(true); jfreechart chart = new jfreechart("nse nifty", jfreechart.default_title_font, plot1, false); //chartutilities.applycurrenttheme(chart); return chart; } // create panel public static jpanel createdemopanel() { jfreechart chart = createcombinedchart(); return new chartpanel(chart); } public static void main(string[] args) { // todo code application logic here pricevolumechart2 demo = new pricevolumechart2("jfreechart"); demo.pack(); refineryutilities.centerframeonscreen(demo); demo.setvisible(true); } // download data web } this output.n want crosshair tell me x , y coordinates according given values in x , y axis

you can enable trace feature follow mouse, shown here. can add chartmouselistener see chartentity under mouse, shown here.
addendum: given these instatiations,
jfreechart chart = new jfreechart(…); chartpanel = new chartpanel(chart); this complete example enables trace:
chartpanel.sethorizontalaxistrace(true); chartpanel.setverticalaxistrace(true); this complete example adds chartmouselistener:
chartpanel.addchartmouselistener(new chartmouselistener() { @override public void chartmouseclicked(chartmouseevent e) { final chartentity entity = e.getentity(); system.out.println(entity + " " + entity.getarea()); } @override public void chartmousemoved(chartmouseevent e) { } });
Comments
Post a Comment