import java.awt.*;
import java.awt.geom.Point2D;
import java.awt.geom.Rectangle2D;
import java.text.SimpleDateFormat;
import java.util.Date;
import javax.swing.*;import org.jfree.chart.*;
import org.jfree.chart.axis.DateAxis;
import org.jfree.chart.plot.XYPlot;
import org.jfree.chart.renderer.xy.XYLineAndShapeRenderer;
import org.jfree.data.time.*;
import org.jfree.data.time.ohlc.OHLCSeries;
import org.jfree.data.time.ohlc.OHLCSeriesCollection;
import org.jfree.data.xy.XYDataset;
import org.jfree.ui.*;public class TimeSeriesDemo1 extends ApplicationFrame implements ChartMouseListener { public JFreeChart chart;
ChartPanel chartPanel;
private boolean crossedAxis = false;
private double xValue = 0.0;
private double yValue = 0.0;
private int mouseX = 0;
private int mouseY = 0;
private Point2D point;
private Rectangle2D rectangle2D;
private SimpleDateFormat dateFormat1 = new SimpleDateFormat("yyyy年MM月dd日HH时mm分");
public static XYPlot xyplot;
public Frame frame;
public TimeSeriesDemo1(String s)
{
super(s);
XYDataset xydataset = createDataset();
JFreeChart jfreechart = createChart(xydataset);
chartPanel = new ChartPanel(jfreechart, false);
chartPanel.addChartMouseListener(this);
chartPanel.setPreferredSize(new Dimension(500, 270));
chartPanel.setMouseZoomable(true, false);
chartPanel.setVerticalAxisTrace(true);
chartPanel.setHorizontalAxisTrace(true);
setContentPane(chartPanel);
} private static JFreeChart createChart(XYDataset xydataset)
{
JFreeChart jfreechart = ChartFactory.createTimeSeriesChart("Legal & General Unit Trust Prices", "Date", "Price Per Unit", xydataset, true, true, true);
jfreechart.setBackgroundPaint(Color.white);
xyplot = (XYPlot)jfreechart.getPlot();
xyplot.setBackgroundPaint(Color.lightGray);
xyplot.setDomainGridlinePaint(Color.white);
xyplot.setRangeGridlinePaint(Color.white);
xyplot.setAxisOffset(new RectangleInsets(5D, 5D, 5D, 5D));
xyplot.setDomainCrosshairVisible(true);
xyplot.setRangeCrosshairVisible(true);
org.jfree.chart.renderer.xy.XYItemRenderer xyitemrenderer = xyplot.getRenderer();
if(xyitemrenderer instanceof XYLineAndShapeRenderer)
{
XYLineAndShapeRenderer xylineandshaperenderer = (XYLineAndShapeRenderer)xyitemrenderer;
xylineandshaperenderer.setBaseShapesVisible(true);
xylineandshaperenderer.setBaseShapesFilled(true);
}
DateAxis dateaxis = (DateAxis)xyplot.getDomainAxis();
dateaxis.setDateFormatOverride(new SimpleDateFormat("MMM-yyyy"));
return jfreechart;
} private static XYDataset createDataset()
{
TimeSeries timeseries = new TimeSeries("L&G European Index Trust", org.jfree.data.time.Month.class);
timeseries.add(new Month(2, 2001), 181.80000000000001D);
timeseries.add(new Month(3, 2001), 167.30000000000001D);
timeseries.add(new Month(4, 2001), 153.80000000000001D);
timeseries.add(new Month(5, 2001), 167.59999999999999D);
timeseries.add(new Month(6, 2001), 158.80000000000001D);
timeseries.add(new Month(7, 2001), 148.30000000000001D);
timeseries.add(new Month(8, 2001), 153.90000000000001D);
timeseries.add(new Month(9, 2001), 142.69999999999999D);
timeseries.add(new Month(10, 2001), 123.2D);
timeseries.add(new Month(11, 2001), 131.80000000000001D);
timeseries.add(new Month(12, 2001), 139.59999999999999D);
timeseries.add(new Month(1, 2002), 142.90000000000001D);
timeseries.add(new Month(2, 2002), 138.69999999999999D);
timeseries.add(new Month(3, 2002), 137.30000000000001D);
timeseries.add(new Month(4, 2002), 143.90000000000001D);
timeseries.add(new Month(5, 2002), 139.80000000000001D);
timeseries.add(new Month(6, 2002), 137D);
timeseries.add(new Month(7, 2002), 132.80000000000001D);
TimeSeries timeseries1 = new TimeSeries("L&G UK Index Trust", org.jfree.data.time.Month.class);
timeseries1.add(new Month(2, 2001), 129.59999999999999D);
timeseries1.add(new Month(3, 2001), 123.2D);
timeseries1.add(new Month(4, 2001), 117.2D);
timeseries1.add(new Month(5, 2001), 124.09999999999999D);
timeseries1.add(new Month(6, 2001), 122.59999999999999D);
timeseries1.add(new Month(7, 2001), 119.2D);
timeseries1.add(new Month(8, 2001), 116.5D);
timeseries1.add(new Month(9, 2001), 112.7D);
timeseries1.add(new Month(10, 2001), 101.5D);
timeseries1.add(new Month(11, 2001), 106.09999999999999D);
timeseries1.add(new Month(12, 2001), 110.3D);
timeseries1.add(new Month(1, 2002), 111.7D);
timeseries1.add(new Month(2, 2002), 111D);
timeseries1.add(new Month(3, 2002), 109.59999999999999D);
timeseries1.add(new Month(4, 2002), 113.2D);
timeseries1.add(new Month(5, 2002), 111.59999999999999D);
timeseries1.add(new Month(6, 2002), 108.8D);
timeseries1.add(new Month(7, 2002), 101.59999999999999D);
TimeSeriesCollection timeseriescollection = new TimeSeriesCollection();
timeseriescollection.addSeries(timeseries);
timeseriescollection.addSeries(timeseries1);
return timeseriescollection;
} public static void main(String args[])
{
TimeSeriesDemo1 timeseriesdemo1 = new TimeSeriesDemo1("Time Series Demo 1");
timeseriesdemo1.pack();
RefineryUtilities.centerFrameOnScreen(timeseriesdemo1);
timeseriesdemo1.setVisible(true);
} public void chartMouseClicked(ChartMouseEvent chartMouseEvent) {
if (chartMouseEvent.getTrigger().getClickCount() == 2) {
crossedAxis = !crossedAxis;
}
} public void chartMouseMoved(ChartMouseEvent chartMouseEvent) {
point = chartMouseEvent.getTrigger().getPoint();
mouseX = chartMouseEvent.getTrigger().getX();
mouseY = chartMouseEvent.getTrigger().getY();
Point2D point2D = this.chartPanel.translateScreenToJava2D(new Point(mouseX, mouseY));
ChartRenderingInfo info = this.chartPanel.getChartRenderingInfo();
rectangle2D = chartPanel.getScreenDataArea();
yValue = xyplot.getRangeAxis().java2DToValue(point2D.getY(), info.getPlotInfo().getDataArea(), RectangleEdge.RIGHT);
xValue = xyplot.getDomainAxis().java2DToValue(point2D.getX(), info.getPlotInfo().getDataArea(), RectangleEdge.BOTTOM);
refreshAxis(mouseY, mouseX);
}
public void refreshAxis(int mouseY, int mouseX) {
Graphics g = this.getGraphics();
update(g);
int recW = (int) (rectangle2D.getX() + rectangle2D.getWidth());
int recX = (int) rectangle2D.getX();
int recY = (int) rectangle2D.getY();
int recH = (int) (rectangle2D.getY() + rectangle2D.getHeight());
if (mouseX < recW && mouseX > recX && mouseY < recH && mouseY > recY) {
g.drawLine(recX, mouseY, recW, mouseY);
g.drawLine(mouseX, recY, mouseX, recH);
}
} @Override
public void update(Graphics g) {
if (g.getClip() == null) {
paint(g);
int recX = (int) rectangle2D.getX();
int recY = (int) rectangle2D.getY();
int recH = (int) (rectangle2D.getY() + rectangle2D.getHeight());
int recW = (int) (rectangle2D.getX() + rectangle2D.getWidth());
if (mouseX < recW && mouseX > recX && mouseY < recH && mouseY > recY) {
g.drawString(String.valueOf((int)(yValue)), mouseX + 20, mouseY + 1);
g.drawString(dateFormat1.format(new Date((long) xValue)), mouseX + 20,mouseY + 12);
}
}
}
}
import java.awt.geom.Point2D;
import java.awt.geom.Rectangle2D;
import java.text.SimpleDateFormat;
import java.util.Date;
import javax.swing.*;import org.jfree.chart.*;
import org.jfree.chart.axis.DateAxis;
import org.jfree.chart.plot.XYPlot;
import org.jfree.chart.renderer.xy.XYLineAndShapeRenderer;
import org.jfree.data.time.*;
import org.jfree.data.time.ohlc.OHLCSeries;
import org.jfree.data.time.ohlc.OHLCSeriesCollection;
import org.jfree.data.xy.XYDataset;
import org.jfree.ui.*;public class TimeSeriesDemo1 extends ApplicationFrame implements ChartMouseListener { public JFreeChart chart;
ChartPanel chartPanel;
private boolean crossedAxis = false;
private double xValue = 0.0;
private double yValue = 0.0;
private int mouseX = 0;
private int mouseY = 0;
private Point2D point;
private Rectangle2D rectangle2D;
private SimpleDateFormat dateFormat1 = new SimpleDateFormat("yyyy年MM月dd日HH时mm分");
public static XYPlot xyplot;
public Frame frame;
public TimeSeriesDemo1(String s)
{
super(s);
XYDataset xydataset = createDataset();
JFreeChart jfreechart = createChart(xydataset);
chartPanel = new ChartPanel(jfreechart, false);
chartPanel.addChartMouseListener(this);
chartPanel.setPreferredSize(new Dimension(500, 270));
chartPanel.setMouseZoomable(true, false);
chartPanel.setVerticalAxisTrace(true);
chartPanel.setHorizontalAxisTrace(true);
setContentPane(chartPanel);
} private static JFreeChart createChart(XYDataset xydataset)
{
JFreeChart jfreechart = ChartFactory.createTimeSeriesChart("Legal & General Unit Trust Prices", "Date", "Price Per Unit", xydataset, true, true, true);
jfreechart.setBackgroundPaint(Color.white);
xyplot = (XYPlot)jfreechart.getPlot();
xyplot.setBackgroundPaint(Color.lightGray);
xyplot.setDomainGridlinePaint(Color.white);
xyplot.setRangeGridlinePaint(Color.white);
xyplot.setAxisOffset(new RectangleInsets(5D, 5D, 5D, 5D));
xyplot.setDomainCrosshairVisible(true);
xyplot.setRangeCrosshairVisible(true);
org.jfree.chart.renderer.xy.XYItemRenderer xyitemrenderer = xyplot.getRenderer();
if(xyitemrenderer instanceof XYLineAndShapeRenderer)
{
XYLineAndShapeRenderer xylineandshaperenderer = (XYLineAndShapeRenderer)xyitemrenderer;
xylineandshaperenderer.setBaseShapesVisible(true);
xylineandshaperenderer.setBaseShapesFilled(true);
}
DateAxis dateaxis = (DateAxis)xyplot.getDomainAxis();
dateaxis.setDateFormatOverride(new SimpleDateFormat("MMM-yyyy"));
return jfreechart;
} private static XYDataset createDataset()
{
TimeSeries timeseries = new TimeSeries("L&G European Index Trust", org.jfree.data.time.Month.class);
timeseries.add(new Month(2, 2001), 181.80000000000001D);
timeseries.add(new Month(3, 2001), 167.30000000000001D);
timeseries.add(new Month(4, 2001), 153.80000000000001D);
timeseries.add(new Month(5, 2001), 167.59999999999999D);
timeseries.add(new Month(6, 2001), 158.80000000000001D);
timeseries.add(new Month(7, 2001), 148.30000000000001D);
timeseries.add(new Month(8, 2001), 153.90000000000001D);
timeseries.add(new Month(9, 2001), 142.69999999999999D);
timeseries.add(new Month(10, 2001), 123.2D);
timeseries.add(new Month(11, 2001), 131.80000000000001D);
timeseries.add(new Month(12, 2001), 139.59999999999999D);
timeseries.add(new Month(1, 2002), 142.90000000000001D);
timeseries.add(new Month(2, 2002), 138.69999999999999D);
timeseries.add(new Month(3, 2002), 137.30000000000001D);
timeseries.add(new Month(4, 2002), 143.90000000000001D);
timeseries.add(new Month(5, 2002), 139.80000000000001D);
timeseries.add(new Month(6, 2002), 137D);
timeseries.add(new Month(7, 2002), 132.80000000000001D);
TimeSeries timeseries1 = new TimeSeries("L&G UK Index Trust", org.jfree.data.time.Month.class);
timeseries1.add(new Month(2, 2001), 129.59999999999999D);
timeseries1.add(new Month(3, 2001), 123.2D);
timeseries1.add(new Month(4, 2001), 117.2D);
timeseries1.add(new Month(5, 2001), 124.09999999999999D);
timeseries1.add(new Month(6, 2001), 122.59999999999999D);
timeseries1.add(new Month(7, 2001), 119.2D);
timeseries1.add(new Month(8, 2001), 116.5D);
timeseries1.add(new Month(9, 2001), 112.7D);
timeseries1.add(new Month(10, 2001), 101.5D);
timeseries1.add(new Month(11, 2001), 106.09999999999999D);
timeseries1.add(new Month(12, 2001), 110.3D);
timeseries1.add(new Month(1, 2002), 111.7D);
timeseries1.add(new Month(2, 2002), 111D);
timeseries1.add(new Month(3, 2002), 109.59999999999999D);
timeseries1.add(new Month(4, 2002), 113.2D);
timeseries1.add(new Month(5, 2002), 111.59999999999999D);
timeseries1.add(new Month(6, 2002), 108.8D);
timeseries1.add(new Month(7, 2002), 101.59999999999999D);
TimeSeriesCollection timeseriescollection = new TimeSeriesCollection();
timeseriescollection.addSeries(timeseries);
timeseriescollection.addSeries(timeseries1);
return timeseriescollection;
} public static void main(String args[])
{
TimeSeriesDemo1 timeseriesdemo1 = new TimeSeriesDemo1("Time Series Demo 1");
timeseriesdemo1.pack();
RefineryUtilities.centerFrameOnScreen(timeseriesdemo1);
timeseriesdemo1.setVisible(true);
} public void chartMouseClicked(ChartMouseEvent chartMouseEvent) {
if (chartMouseEvent.getTrigger().getClickCount() == 2) {
crossedAxis = !crossedAxis;
}
} public void chartMouseMoved(ChartMouseEvent chartMouseEvent) {
point = chartMouseEvent.getTrigger().getPoint();
mouseX = chartMouseEvent.getTrigger().getX();
mouseY = chartMouseEvent.getTrigger().getY();
Point2D point2D = this.chartPanel.translateScreenToJava2D(new Point(mouseX, mouseY));
ChartRenderingInfo info = this.chartPanel.getChartRenderingInfo();
rectangle2D = chartPanel.getScreenDataArea();
yValue = xyplot.getRangeAxis().java2DToValue(point2D.getY(), info.getPlotInfo().getDataArea(), RectangleEdge.RIGHT);
xValue = xyplot.getDomainAxis().java2DToValue(point2D.getX(), info.getPlotInfo().getDataArea(), RectangleEdge.BOTTOM);
refreshAxis(mouseY, mouseX);
}
public void refreshAxis(int mouseY, int mouseX) {
Graphics g = this.getGraphics();
update(g);
int recW = (int) (rectangle2D.getX() + rectangle2D.getWidth());
int recX = (int) rectangle2D.getX();
int recY = (int) rectangle2D.getY();
int recH = (int) (rectangle2D.getY() + rectangle2D.getHeight());
if (mouseX < recW && mouseX > recX && mouseY < recH && mouseY > recY) {
g.drawLine(recX, mouseY, recW, mouseY);
g.drawLine(mouseX, recY, mouseX, recH);
}
} @Override
public void update(Graphics g) {
if (g.getClip() == null) {
paint(g);
int recX = (int) rectangle2D.getX();
int recY = (int) rectangle2D.getY();
int recH = (int) (rectangle2D.getY() + rectangle2D.getHeight());
int recW = (int) (rectangle2D.getX() + rectangle2D.getWidth());
if (mouseX < recW && mouseX > recX && mouseY < recH && mouseY > recY) {
g.drawString(String.valueOf((int)(yValue)), mouseX + 20, mouseY + 1);
g.drawString(dateFormat1.format(new Date((long) xValue)), mouseX + 20,mouseY + 12);
}
}
}
}
解决方案 »
- 学习J2EE 是不是不太需要学swing图形用户界面?
- 基础吧!!!!!SWT.JAR问题
- 各位高手帮我解决一下JAVA里把时间转换成像YYYY-MM-DD这样的形式!!!
- 关于数据库连接奇怪的现象,回复必有分,今天下午接分!
- 一个小问题急急
- 用eclipse 3.0 写swt编译时的问题
- hashCode() 和hashtable的区别欢迎大家来讨论.
- 求borland.jbcl.*包,哪位有请发给我,或告诉我下载地址,50分相谢......
- 正则表达式的效率比String.split更低吗?
- JAVA
- 关于一个进制与ASCII转换的问题
- JAVA截取Byte数组中某段数据(数据包括数字、字母、汉字、符号)
问题比较急啊,先谢谢了