鼠标拖动来修改JFreeChart 节点上的值
来源:互联网 发布:拉普拉斯矩阵 编辑:程序博客网 时间:2024/06/05 08:00
http://www.thinksaas.cn/topics/0/84/84071.html
package zhipu.view.xulie;import java.awt.Color;import java.awt.Dimension;import java.awt.Font;import java.awt.Point;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 java.text.SimpleDateFormat;import javax.swing.JPanel;import org.jfree.chart.ChartFactory;import org.jfree.chart.ChartMouseEvent;import org.jfree.chart.ChartMouseListener;import org.jfree.chart.ChartPanel;import org.jfree.chart.ChartRenderingInfo;import org.jfree.chart.JFreeChart;import org.jfree.chart.axis.DateAxis;import org.jfree.chart.axis.DateTickUnit;import org.jfree.chart.axis.ValueAxis;import org.jfree.chart.entity.XYItemEntity;import org.jfree.chart.plot.ValueMarker;import org.jfree.chart.plot.XYPlot;import org.jfree.chart.renderer.xy.XYLineAndShapeRenderer;import org.jfree.chart.title.LegendTitle;import org.jfree.chart.title.TextTitle;import org.jfree.data.time.Day;import org.jfree.data.time.Hour;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.RectangleEdge;import org.jfree.ui.RefineryUtilities;public class TimeSeriesTest extends ApplicationFrame implements ChartMouseListener, MouseListener, MouseMotionListener{ private static final long serialVersionUID = 1L; private JFreeChart chart; private ChartPanel chartPanel; private boolean domainCrosshairState; private XYItemEntity xyItemEntity; private boolean isDraged; public TimeSeriesTest(String str){ super(str); XYDataset localXYDataset = createDataset(); chart = createChart(localXYDataset); chartPanel = new ChartPanel(chart); chartPanel.setPreferredSize(new Dimension(800, 500)); // chartPanel.setMouseZoomable(true, false); chartPanel.setMouseZoomable(false); chartPanel.addChartMouseListener(this); chartPanel.addMouseListener(this); chartPanel.addMouseMotionListener(this); domainCrosshairState = false; isDraged = false; setContentPane(chartPanel); } private static XYDataset createDataset(){ Day localDay = new Day(); TimeSeries localTimeSeries1 = new TimeSeries("随机数据", Hour.class); localTimeSeries1.add(new Hour(0, localDay), 520.2D); localTimeSeries1.add(new Hour(2, localDay), 575.1D); localTimeSeries1.add(new Hour(4, localDay), 564.4D); localTimeSeries1.add(new Hour(6, localDay), 540.2D); localTimeSeries1.add(new Hour(8, localDay), 530.2D); localTimeSeries1.add(new Hour(10, localDay), 555.2D); localTimeSeries1.add(new Hour(12, localDay), 580.4D); localTimeSeries1.add(new Hour(14, localDay), 583.2D); localTimeSeries1.add(new Hour(16, localDay), 595.2D); localTimeSeries1.add(new Hour(18, localDay), 564.4D); localTimeSeries1.add(new Hour(20, localDay), 523.2D); localTimeSeries1.add(new Hour(22, localDay), 515.2D); localTimeSeries1.add(new Hour(24, localDay), 530.4D); TimeSeries localTimeSeries2 = new TimeSeries("随机数据", Hour.class); localTimeSeries2.add(new Hour(0, localDay), 620.2D); localTimeSeries2.add(new Hour(2, localDay), 654.1D); localTimeSeries2.add(new Hour(4, localDay), 664.4D); localTimeSeries2.add(new Hour(6, localDay), 670.2D); localTimeSeries2.add(new Hour(8, localDay), 690.2D); localTimeSeries2.add(new Hour(10, localDay), 695.2D); localTimeSeries2.add(new Hour(12, localDay), 680.4D); localTimeSeries2.add(new Hour(14, localDay), 683.2D); localTimeSeries2.add(new Hour(16, localDay), 695.2D); localTimeSeries2.add(new Hour(18, localDay), 714.4D); localTimeSeries2.add(new Hour(20, localDay), 723.2D); localTimeSeries2.add(new Hour(22, localDay), 715.2D); localTimeSeries2.add(new Hour(24, localDay), 680.4D); TimeSeriesCollection localTimeSeriesCollection = new TimeSeriesCollection(); localTimeSeriesCollection.addSeries(localTimeSeries1); localTimeSeriesCollection.addSeries(localTimeSeries2); return localTimeSeriesCollection; } private static JFreeChart createChart(XYDataset xyDataset){ JFreeChart localChart = ChartFactory.createTimeSeriesChart("时间序列测试", "时间", "数值", xyDataset, true, true, false); TextTitle title = localChart.getTitle(); title.setFont(new Font("宋体", Font.BOLD, 24)); LegendTitle legend = localChart.getLegend(); legend.setItemFont(new Font("宋体", Font.ITALIC, 14)); XYPlot plot = (XYPlot)localChart.getPlot(); plot.setBackgroundPaint(null); // X轴 DateAxis xAxis = (DateAxis)plot.getDomainAxis(); xAxis.setLabelFont(new Font("宋体", Font.PLAIN, 18)); xAxis.setLabelPaint(Color.BLUE); SimpleDateFormat fmt = new SimpleDateFormat("k:mm"); xAxis.setTickUnit(new DateTickUnit(DateTickUnit.HOUR, 2, fmt)); // Y轴 ValueAxis yAxis = plot.getRangeAxis(); yAxis.setLabelFont(new Font("宋体", Font.PLAIN, 18)); yAxis.setLabelPaint(Color.BLUE); return localChart; } public static JPanel createDemoPanel(){ JFreeChart chart = createChart(createDataset()); return new ChartPanel(chart); } public void chartMouseClicked(ChartMouseEvent e){ if(e.getTrigger().getClickCount() == 2){ domainCrosshairState = !domainCrosshairState; // plot.setDomainCrosshairVisible(domainCrosshairState); chartPanel.setHorizontalAxisTrace(domainCrosshairState); // 双击竖线 } try{//放在try块中可避免弹出异常提示,目前还没有找到得到XYItemEntity对象的好办法 xyItemEntity = (XYItemEntity)e.getEntity(); } catch(Exception ee){ee.printStackTrace(); } if(xyItemEntity == null) return; int seriesIndex = xyItemEntity.getSeriesIndex(); XYPlot xyPlot = (XYPlot)chart.getPlot(); XYLineAndShapeRenderer xyLineAndShapeRenderer = (XYLineAndShapeRenderer)xyPlot.getRenderer(); for(int index = 0; index < xyItemEntity.getDataset().getSeriesCount(); index++){ xyLineAndShapeRenderer.setSeriesShapesVisible(index, false); } xyLineAndShapeRenderer.setSeriesShapesVisible(seriesIndex, true); // 数据点可见 } public void mousePressed(MouseEvent e){ // System.out.println("mouse key is pressed!"); } public void mouseReleased(MouseEvent e){ // System.out.println("mouse key is released!"); xyItemEntity = null; isDraged = false; } public void mouseEntered(MouseEvent mouseEvent){ // System.out.println( "mouse key is pressed!"); } public void mouseExited(MouseEvent mouseEvent){ // System.out.println( "mouse key is pressed!"); } public void mouseClicked(MouseEvent mouseEvent){ // System.out.println( "mouse key is pressed!"); } public void chartMouseMoved(ChartMouseEvent e){ } public void mouseDragged(MouseEvent e){ if(xyItemEntity==null) return; int seriesIndex = xyItemEntity.getSeriesIndex(); int itemIndex = xyItemEntity.getItem(); int xPos = e.getX(); int yPos = e.getY(); Point2D point2D = chartPanel.translateScreenToJava2D(new Point(xPos, yPos)); XYPlot xyPlot = (XYPlot)chart.getPlot(); ChartRenderingInfo chartRenderingInfo = chartPanel.getChartRenderingInfo(); Rectangle2D rectangle2D = chartRenderingInfo.getPlotInfo().getDataArea(); ValueAxis valueAxis = xyPlot.getRangeAxis(); RectangleEdge rectangleEdge = xyPlot.getRangeAxisEdge(); double value = valueAxis.java2DToValue(point2D.getY(), rectangle2D, rectangleEdge); TimeSeriesCollection tsc = (TimeSeriesCollection)xyItemEntity.getDataset(); TimeSeries ts = tsc.getSeries(seriesIndex); ts.update(itemIndex,value); isDraged = true; } public void mouseMoved(MouseEvent e){ } public static void main(String[] paramArrayOfString){ TimeSeriesTest dragValueApp = new TimeSeriesTest("时间序列拖动示例"); dragValueApp.pack(); RefineryUtilities.centerFrameOnScreen(dragValueApp); dragValueApp.setVisible(true); }}
阅读全文
0 0
- 鼠标拖动来修改JFreeChart 节点上的值
- 通过鼠标拖动来修改JFreeChart序列值
- 带节点的曲线,可以鼠标拖动节点,类似PS
- TreeView上节点的拖动和节点的遍历
- Qt:支持鼠标拖动来移动内容的窗口
- Qt:支持鼠标拖动来移动内容的窗口
- [zhuan]Qt--支持鼠标拖动来移动内容的 QScrollArea
- 路径分析,可以拖动上面的节点,动态修改
- 路径分析,可以拖动上面的节点,动态修改
- web页面上鼠标任意拖动图标的程序
- 页面上鼠标拖动块的一个例子
- 树节点的拖动
- 当hover结束之后获取鼠标上的节点
- DOM 查找节点,修改节点的值
- 通过在客户区拖动鼠标来移动窗口引发的一些问题
- 简单的鼠标拖动效果
- 目录树节点的拖动
- 修改JFreeChart 图片的路径
- 第二十六天 jsp+servlet+mysql写的一个登录验证
- Directx11教程四十二上之SkeletalAnimation(骨骼动画)的原理
- 自定义View之自定义文字闪动效果
- 0526 CF#96A&G2n G- Football
- 2017华为软件精英挑战赛-我们组的解法
- 鼠标拖动来修改JFreeChart 节点上的值
- python 制作图表 matplotlib
- 第一次的博客
- ViewPager简单介绍
- 串口通讯常识介绍
- IT转型之路(一) 迷茫、困惑
- 第1章 那群“不可一世又招人喜欢的家伙”的崛起
- 判定某一年是否为闰年
- 0526 POJ#1852&G2n J-Ants