Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java: GUI и Java FX приложения > JFreeChart: обработка событий мыши,


Автор: 123qw 3.4.2011, 15:08
Нашел в инете код:

Код

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?
Возможно задумка реализации последнего пункта, недостаточно оптимальна, буду рад любым советам с точки зрения архитектуры.

Всем заранее спасибо

Автор: _Y_ 3.4.2011, 20:32
Я как-то пытался победить всплывающее меню JFreeChart. Собственно хотелось долезть до пункта "Save as..." и сохранять картинки програмно. Времени грохнул много, но его так и не хватило чтобы решить проблему.

Может не с того конца взялся, а может оно действительно очень глубоко запрятано.

Автор: 123qw 4.4.2011, 10:21
По поводу меню, логично предположить, что необходимо переопределить какой-то метод (возможно, из ChartPanel) и можно будет отключить меню... если кто в курсе какой это метод, то, пожалуйста, поделитесь, или же если я неправильно думаю, то направьте по правильному направлению

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)