Нашел в инете код:
| Код | import java.awt.BasicStroke; import java.awt.Dimension; import javax.swing.JPanel; import org.jfree.chart.*; import org.jfree.chart.plot.PlotOrientation; import org.jfree.chart.plot.XYPlot; import org.jfree.chart.renderer.xy.XYStepRenderer; import org.jfree.data.xy.*; import org.jfree.ui.ApplicationFrame; import org.jfree.ui.RefineryUtilities;
public class XYStepRendererDemo1 extends ApplicationFrame {
public XYStepRendererDemo1(String s) { super(s); JPanel jpanel = createdemoPanel(); jpanel.setPreferredSize(new Dimension(500, 300)); setContentPane(jpanel); }
private static JFreeChart createChart(XYDataset xydataset) { JFreeChart jfreechart = ChartFactory.createXYLineChart("XYStepRenderer demo 1", "X", "Y", xydataset, PlotOrientation.VERTICAL, false, false, false); XYPlot xyplot = (XYPlot) jfreechart.getPlot(); // следующие четыре строчки позволяют нарисовать ступеньки XYStepRenderer xysteprenderer = new XYStepRenderer(); xysteprenderer.setStroke(new BasicStroke(2.0F)); xysteprenderer.setDefaultEntityRadius(6); xyplot.setRenderer(xysteprenderer); return jfreechart; }
private static XYDataset createDataset() { XYSeries xyseries1 = new XYSeries("Series 1"); xyseries1.add(1.0D, 7D); xyseries1.add(2D, 6D); xyseries1.add(3D, 9D); xyseries1.add(4D, 5D); xyseries1.add(6D, 4D); XYSeriesCollection xyseriescollection = new XYSeriesCollection(); xyseriescollection.addSeries(xyseries1); return xyseriescollection; }
public static JPanel createdemoPanel() { JFreeChart jfreechart = createChart(createDataset()); jfreechart = createChart(createDataset()); ChartPanel cp = new ChartPanel(jfreechart); // это событие для того, что бы работало увеличение/уменьшение масштаба при помощи колесика мыши cp.setMouseWheelEnabled(true); return cp; }
public static void main(String args[]) { XYStepRendererDemo1 xysteprendererdemo1 = new XYStepRendererDemo1("XYStepRenderer demo 1"); xysteprendererdemo1.pack(); RefineryUtilities.centerFrameOnScreen(xysteprendererdemo1); xysteprendererdemo1.setVisible(true); } }
|
Хотелось бы:- При прокрутке колесика мыши увеличение/уменьшение масштаба происходило только по оси Y
- Контекстное меню, вызываемое при нажатии на правую клавишу мыши исчезло, т.е. нельзя было бы его вызывать. Для правой клавиши мыши необходимо оставить лишь только выделение области на графике
- http://forum.vingrad.ru/forum/topic-275191/anchor-entry2324375/0.html нашел хорошее дизайнерское решение, а вот как его прикрутить к этому коду я не понимаю
- В программе будет несколько графиков, у которых ось Х, должна быть общей, т.е. если один график масштабирован, то и остальные тоже должны автоматически масштабировать, мое решение повесить наблюдателей. Вот только появляются некоторые проблемы:
- а) как получить координаты (верхнюю нижнюю границы) на оси X (координаты оси Y будут не лишними), которые сейчас отображаются на экране?
- b) как программно масштабировать график, задав верхнюю и нижнюю границы осей X и Y?
Возможно задумка реализации последнего пункта, недостаточно оптимальна, буду рад любым советам с точки зрения архитектуры.
Всем заранее спасибо |