Ich habe beobachtet, dass die Funktionalität von "Zoom-In" und "Zoom-Out" ganz anders als erwartet umgesetzt wurde. Wie zum Beispiel wenn ich einen Schritt "Zoom-out" mache und dann wieder nach einem Schritt von " Hineinzoomen". Ich konnte das Originaldiagramm nicht mehr sehen.Abnormales Verhalten der Zoom- und Zoom-Out-Funktionalität des JFreeChart?
Ich sehe "Zoom-In" und "Zoom-Out" -Funktion von JFrechart nicht in der Synchronisierung.
public class ChartPanelDemo {
private static final String title = "Historical Data Graph";
private ChartPanel chartPanel = createChart();
private JButton ZoomX;
private JButton ZoomY;
private JButton Zoom;
private JButton ZoomXOut;
private JButton ZoomYOut;
private JButton ZoomOut;
private JButton originalGraph;
private JButton xscaleInc;
private JButton xscaleDec;
private NumberAxis domainAxis;
private NumberAxis rangeAxis;
private int UNITS = 1;
private static final int COUNT = 100;
private JPanel panel;
private double[][] sizeFr = { { TableLayout.FILL }, { TableLayout.FILL } };
public ChartPanelDemo() {
JFrame f = new JFrame(title);
panel = new JPanel();
f.setTitle(title);
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.setLayout(new BorderLayout(0, 5));
f.add(chartPanel, BorderLayout.CENTER);
chartPanel.setMouseWheelEnabled(true);
// chartPanel.setHorizontalAxisTrace(true);
// chartPanel.setVerticalAxisTrace(true);
chartPanel.setZoomInFactor(0.9);
chartPanel.setZoomOutFactor(0.9);
JPanel panel = new JPanel(new FlowLayout(FlowLayout.RIGHT));
panel.add(createTrace());
panel.add(createDate());
panel.add(createZoom());
panel.add(createZoomOutX());
panel.add(createZoomOutY());
panel.add(createZoomOut());
panel.add(toOriginalGraph());
panel.add(AutoScaleDecXaxis());
//panel.add(AutoScaleDecXaxis());
f.add(panel, BorderLayout.SOUTH);
f.pack();
f.setLocationRelativeTo(null);
f.setVisible(true);
}
private JSpinner AutoScaleDecXaxis() {
final JSpinner spinner = new JSpinner(
new SpinnerNumberModel(UNITS, 1, COUNT, 1));
spinner.addChangeListener(new ChangeListener() {
@Override
public void stateChanged(ChangeEvent e) {
JSpinner s = (JSpinner) e.getSource();
Number n = (Number) s.getValue();
domainAxis.setTickUnit(new NumberTickUnit(n.intValue()));
}
});
return spinner;
}
private JButton toOriginalGraph() {
originalGraph = new JButton(new AbstractAction("RestoreGraph") {
@Override
public void actionPerformed(ActionEvent e) {
chartPanel.restoreAutoBounds();
}
});
return originalGraph;
}
private JButton createZoomOut() {
ZoomOut = new JButton(new AbstractAction("ZoomOut") {
@Override
public void actionPerformed(ActionEvent e) {
ZoomOut.setActionCommand(chartPanel.ZOOM_OUT_BOTH_COMMAND);
ZoomOut.addActionListener(chartPanel);
}
});
return ZoomOut;
}
private JButton createZoomOutY() {
ZoomYOut = new JButton(new AbstractAction("ZoomOutY") {
@Override
public void actionPerformed(ActionEvent e) {
ZoomYOut.setActionCommand(chartPanel.ZOOM_OUT_RANGE_COMMAND);
ZoomYOut.addActionListener(chartPanel);
}
});
return ZoomYOut;
}
private JButton createZoomOutX() {
ZoomXOut = new JButton(new AbstractAction("ZoomOutX") {
@Override
public void actionPerformed(ActionEvent e) {
ZoomXOut.setActionCommand(chartPanel.ZOOM_OUT_DOMAIN_COMMAND);
ZoomXOut.addActionListener(chartPanel);
}
});
return ZoomXOut;
}
private JButton createTrace() {
ZoomX = new JButton(new AbstractAction("ZoomInX") {
@Override
public void actionPerformed(ActionEvent e) {
ZoomX.setActionCommand(chartPanel.ZOOM_IN_DOMAIN_COMMAND);
ZoomX.addActionListener(chartPanel);
// chartPanel.restoreAutoBounds();
}
});
return ZoomX;
}
private JButton createDate() {
ZoomY = new JButton(new AbstractAction("ZoomInY") {
@Override
public void actionPerformed(ActionEvent e) {
ZoomY.setActionCommand(chartPanel.ZOOM_IN_RANGE_COMMAND);
ZoomY.addActionListener(chartPanel);
}
});
return ZoomY;
}
private JButton createZoom() {
Zoom = new JButton(new AbstractAction("Zoom") {
@Override
public void actionPerformed(ActionEvent e) {
Zoom.setActionCommand(chartPanel.ZOOM_IN_BOTH_COMMAND);
Zoom.addActionListener(chartPanel);
}
});
return Zoom;
}
private ChartPanel createChart() {
XYDataset roiData = createDataset();
JFreeChart chart = createChart(roiData);
chart.setBackgroundPaint(new Color(0xBBBBDD));
XYPlot plot = chart.getXYPlot();
XYSplineRenderer r = new XYSplineRenderer(20);
plot.setRenderer(r);
r.setBaseShapesVisible(true);
rangeAxis = (NumberAxis) plot.getRangeAxis();
domainAxis = (NumberAxis) plot.getDomainAxis();
rangeAxis.setStandardTickUnits(NumberAxis.createIntegerTickUnits());
domainAxis.setStandardTickUnits(NumberAxis.createIntegerTickUnits());
return new ChartPanel(chart);
}
private JFreeChart createChart(XYDataset dataset) {
JFreeChart chart = ChartFactory.createXYLineChart("Historical Data", // chart
// title
"X", // x axis label
"Y", // y axis label
dataset, // data
PlotOrientation.VERTICAL, true, // include legend
true, // tooltips
false // urls
);
return chart;
}
private XYDataset createDataset() {
XYSeries series1 = new XYSeries("First");
series1.add(1.0, 1.0);
series1.add(2.0, 4.0);
series1.add(3.0, 3.0);
series1.add(4.0, 5.0);
series1.add(5.0, 5.0);
series1.add(6.0, 7.0);
series1.add(7.0, 7.0);
series1.add(8.0, 8.0);
XYSeries series2 = new XYSeries("Second");
series2.add(1.0, 5.0);
series2.add(2.0, 7.0);
series2.add(3.0, 6.0);
series2.add(4.0, 8.0);
series2.add(5.0, 4.0);
series2.add(6.0, 4.0);
series2.add(7.0, 2.0);
series2.add(8.0, 1.0);
XYSeriesCollection dataset = new XYSeriesCollection();
dataset.addSeries(series1);
dataset.addSeries(series2);
return dataset;
}
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
ChartPanelDemo cpd = new ChartPanelDemo();
}
});
}
}
Problem2: Nach zwei Klicks auf ZoomInX
Und wieder nach zwei Klicks auf ZoomOutX (die die ursprüngliche Graph ist)
aber wieder nach zwei Klicks auf ZoomInX sehe ich die Grafik ein anderes, nicht als das erste Bild in dieser Frage, die sein sollte.
Ich habe die Frage mit dem Beispielcode aktualisiert, den ich versuchte. – JAVA