maltcms.ui.fileHandles.serialized.JFCPanel.java Source code

Java tutorial

Introduction

Here is the source code for maltcms.ui.fileHandles.serialized.JFCPanel.java

Source

/* 
 * Maui, Maltcms User Interface. 
 * Copyright (C) 2008-2014, The authors of Maui. All rights reserved.
 *
 * Project website: http://maltcms.sf.net
 *
 * Maui may be used under the terms of either the
 *
 * GNU Lesser General Public License (LGPL)
 * http://www.gnu.org/licenses/lgpl.html
 *
 * or the
 *
 * Eclipse Public License (EPL)
 * http://www.eclipse.org/org/documents/epl-v10.php
 *
 * As a user/recipient of Maui, you may choose which license to receive the code 
 * under. Certain files or entire directories may not be covered by this 
 * dual license, but are subject to licenses compatible to both LGPL and EPL.
 * License exceptions are explicitly declared in all relevant files or in a 
 * LICENSE file in the relevant directories.
 *
 * Maui is distributed in the hope that it will be useful, but WITHOUT
 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
 * FOR A PARTICULAR PURPOSE. Please consult the relevant license documentation
 * for details.
 */
package maltcms.ui.fileHandles.serialized;

import java.awt.event.ActionEvent;
import java.util.ArrayList;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.AbstractAction;
import javax.swing.JPanel;
import javax.swing.JToggleButton;
import javax.swing.JToolBar;
import org.jfree.chart.ChartPanel;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.annotations.XYAnnotation;
import org.jfree.chart.plot.XYPlot;
import org.jfree.chart.renderer.xy.ClusteredXYBarRenderer;
import org.jfree.chart.renderer.xy.StackedXYBarRenderer;
import org.jfree.chart.renderer.xy.StandardXYBarPainter;
import org.jfree.chart.renderer.xy.XYBarRenderer;
import org.jfree.chart.renderer.xy.XYBlockRenderer;
import org.jfree.chart.renderer.xy.XYItemRenderer;
import org.jfree.chart.renderer.xy.XYLineAndShapeRenderer;
//import org.openide.util.ImageUtilities;

/**
 *
 * @author Nils Hoffmann
 */
public final class JFCPanel extends JPanel {

    private ChartPanel chartPanel = null;
    private List<XYAnnotation> annotations = new ArrayList<>();
    private JToggleButton toggleAnnotations = null, toggleYAxisFix = null, toggleXAxisFix = null;

    /**
     *
     */
    public JFCPanel() {
        this.chartPanel = new ChartPanel(new JFreeChart(new XYPlot()));

        initComponents();
        jToggleButton1ActionPerformed(new ActionEvent(this, 0, ""));
        toggleYAxisFix = new JToggleButton(new AbstractAction("Fix y") {

            @Override
            public void actionPerformed(ActionEvent ae) {
                chartPanel.getChart().getXYPlot().getRangeAxis()
                        .setAutoRange(!chartPanel.getChart().getXYPlot().getRangeAxis().isAutoRange());
            }
        });
        this.jToolBar2.add(toggleYAxisFix);

        toggleXAxisFix = new JToggleButton(new AbstractAction("Fix x") {

            @Override
            public void actionPerformed(ActionEvent ae) {
                chartPanel.getChart().getXYPlot().getDomainAxis()
                        .setAutoRange(!chartPanel.getChart().getXYPlot().getDomainAxis().isAutoRange());
            }
        });
        this.jToolBar2.add(toggleXAxisFix);

        toggleAnnotations = new JToggleButton(new AbstractAction("Annotations") {

            @Override
            public void actionPerformed(ActionEvent ae) {
                if (chartPanel.getChart().getXYPlot().getAnnotations().isEmpty()) {
                    Logger.getLogger(getClass().getName()).info("Adding annotations");
                    for (XYAnnotation xya : annotations) {
                        chartPanel.getChart().getXYPlot().addAnnotation(xya);
                    }
                    chartPanel.getChart().fireChartChanged();
                    toggleAnnotations.setSelected(true);
                } else {
                    Logger.getLogger(getClass().getName()).info("Removing annotations");
                    List<?> l = chartPanel.getChart().getXYPlot().getAnnotations();
                    if (!l.isEmpty()) {
                        annotations.clear();
                        for (Object o : l) {
                            annotations.add((XYAnnotation) o);
                        }
                    }
                    chartPanel.getChart().getXYPlot().clearAnnotations();
                }
            }
        });
        this.jToolBar2.add(toggleAnnotations);
        toggleAnnotations.setSelected(true);
    }

    /**
     *
     * @param chart
     */
    public void setChart(final JFreeChart chart) {
        if (this.chartPanel == null) {
            this.chartPanel = new ChartPanel(chart);
            add(this.chartPanel);
        }
        this.chartPanel.setChart(chart);
        jComboBox1ActionPerformed(new ActionEvent(jComboBox1, 0, "Selected"));
        this.jToggleButton1.setSelected(true);
        if (chart.getXYPlot().getRangeAxis().isAutoRange()) {
            toggleYAxisFix.setSelected(false);
        } else {
            toggleYAxisFix.setSelected(true);
        }
        if (chart.getXYPlot().getDomainAxis().isAutoRange()) {
            toggleXAxisFix.setSelected(false);
        } else {
            toggleXAxisFix.setSelected(true);
        }
    }

    /**
     * This method is called from within the constructor to initialize the form.
     * WARNING: Do NOT modify this code. The content of this method is always
     * regenerated by the Form Editor.
     */
    // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
    private void initComponents() {

        jScrollPane1 = new javax.swing.JScrollPane(this.chartPanel);
        jToolBar2 = new javax.swing.JToolBar();
        jLabel1 = new javax.swing.JLabel();
        jComboBox1 = new javax.swing.JComboBox();
        jToggleButton1 = new javax.swing.JToggleButton();

        setLayout(new java.awt.BorderLayout());
        add(jScrollPane1, java.awt.BorderLayout.CENTER);

        jToolBar2.setFloatable(false);
        jToolBar2.setRollover(true);
        jToolBar2.setOpaque(false);

        org.openide.awt.Mnemonics.setLocalizedText(jLabel1,
                org.openide.util.NbBundle.getMessage(JFCPanel.class, "JFCPanel.jLabel1.text")); // NOI18N
        jToolBar2.add(jLabel1);

        jComboBox1.setModel(new javax.swing.DefaultComboBoxModel(
                new String[] { "Lines", "Lines and Shapes", "Shapes", "Bars", "Clustered Bars" }));
        jComboBox1.setActionCommand(
                org.openide.util.NbBundle.getMessage(JFCPanel.class, "JFCPanel.jComboBox1.actionCommand")); // NOI18N
        jComboBox1.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jComboBox1ActionPerformed(evt);
            }
        });
        jToolBar2.add(jComboBox1);

        org.openide.awt.Mnemonics.setLocalizedText(jToggleButton1,
                org.openide.util.NbBundle.getMessage(JFCPanel.class, "JFCPanel.jToggleButton1.text")); // NOI18N
        jToggleButton1.setFocusable(false);
        jToggleButton1.setHorizontalTextPosition(javax.swing.SwingConstants.CENTER);
        jToggleButton1.setVerticalTextPosition(javax.swing.SwingConstants.BOTTOM);
        jToggleButton1.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jToggleButton1ActionPerformed(evt);
            }
        });
        jToolBar2.add(jToggleButton1);

        add(jToolBar2, java.awt.BorderLayout.PAGE_START);
    }// </editor-fold>//GEN-END:initComponents

    private void jComboBox1ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jComboBox1ActionPerformed
        String s = (String) jComboBox1.getSelectedItem();
        Logger.getLogger(getClass().getName()).log(Level.INFO, "Selected: {0}", s);
        XYPlot oldPlot = this.chartPanel.getChart().getXYPlot();
        XYItemRenderer xyir = oldPlot.getRenderer();
        if (xyir instanceof XYBlockRenderer) {
            jComboBox1.setEnabled(false);
            return;
        }
        this.chartPanel.getChart().getXYPlot().setRenderer(null);
        int datasets = this.chartPanel.getChart().getXYPlot().getSeriesCount();
        XYItemRenderer newRenderer = null;
        if (xyir instanceof XYLineAndShapeRenderer) {
            if (s.equalsIgnoreCase("lines")) {
                ((XYLineAndShapeRenderer) xyir).setBaseLinesVisible(true);
                ((XYLineAndShapeRenderer) xyir).setBaseShapesVisible(false);
                newRenderer = xyir;
                //this.chartPanel.getChart().getXYPlot().setRenderer(newRenderer);
            } else if (s.equalsIgnoreCase("lines and shapes")) {
                ((XYLineAndShapeRenderer) xyir).setBaseLinesVisible(true);
                ((XYLineAndShapeRenderer) xyir).setBaseShapesVisible(true);
                newRenderer = xyir;
                //this.chartPanel.getChart().getXYPlot().setRenderer(newRenderer);
            } else if (s.equalsIgnoreCase("shapes")) {
                ((XYLineAndShapeRenderer) xyir).setBaseLinesVisible(false);
                ((XYLineAndShapeRenderer) xyir).setBaseShapesVisible(true);
                newRenderer = xyir;
            } else if (s.equalsIgnoreCase("bars")) {
                XYBarRenderer xyl = new XYBarRenderer(0);
                StandardXYBarPainter sp = new StandardXYBarPainter();
                xyl.setBarPainter(sp);
                xyl.setShadowVisible(false);
                xyl.clearSeriesPaints(true);
                xyl.setAutoPopulateSeriesFillPaint(false);
                xyl.setAutoPopulateSeriesOutlinePaint(false);
                xyl.setAutoPopulateSeriesPaint(false);
                newRenderer = xyl;
            } else if (s.equalsIgnoreCase("clustered bars")) {
                ClusteredXYBarRenderer xyl = new ClusteredXYBarRenderer(0, true);
                StandardXYBarPainter sp = new StandardXYBarPainter();
                xyl.setBarPainter(sp);
                xyl.setShadowVisible(false);
                xyl.clearSeriesPaints(true);
                xyl.setAutoPopulateSeriesFillPaint(false);
                xyl.setAutoPopulateSeriesOutlinePaint(false);
                xyl.setAutoPopulateSeriesPaint(false);
                newRenderer = xyl;
            }
        } else {
            if (s.equalsIgnoreCase("lines")) {
                newRenderer = new XYLineAndShapeRenderer(true, false);
                //this.chartPanel.getChart().getXYPlot().setRenderer(newRenderer);
            } else if (s.equalsIgnoreCase("lines and shapes")) {
                newRenderer = new XYLineAndShapeRenderer(true, true);
                //this.chartPanel.getChart().getXYPlot().setRenderer(newRenderer);
            } else if (s.equalsIgnoreCase("shapes")) {
                newRenderer = new XYLineAndShapeRenderer(false, true);
                //this.chartPanel.getChart().getXYPlot().setRenderer(newRenderer);
            } else if (s.equalsIgnoreCase("bars")) {
                XYBarRenderer xyl = new XYBarRenderer(0);
                StandardXYBarPainter sp = new StandardXYBarPainter();
                xyl.setBarPainter(sp);
                xyl.setShadowVisible(false);
                xyl.clearSeriesPaints(true);
                xyl.setAutoPopulateSeriesFillPaint(false);
                xyl.setAutoPopulateSeriesOutlinePaint(false);
                xyl.setAutoPopulateSeriesPaint(false);
                newRenderer = xyl;

            } else if (s.equalsIgnoreCase("clustered bars")) {
                ClusteredXYBarRenderer xyl = new ClusteredXYBarRenderer(0, true);
                StandardXYBarPainter sp = new StandardXYBarPainter();
                xyl.setBarPainter(sp);
                xyl.setShadowVisible(false);
                xyl.clearSeriesPaints(true);
                xyl.setAutoPopulateSeriesFillPaint(false);
                xyl.setAutoPopulateSeriesOutlinePaint(false);
                xyl.setAutoPopulateSeriesPaint(false);
                newRenderer = xyl;
            }
        }

        newRenderer.setBasePaint(xyir.getBasePaint());
        newRenderer.setBaseOutlinePaint(xyir.getBaseOutlinePaint());
        newRenderer.setBaseItemLabelPaint(xyir.getBaseItemLabelPaint());
        //        XYPlot xyp = new XYPlot();
        //        for(int i = 0;i<oldPlot.getRangeAxisCount();i++) {
        //            xyp.setRangeAxis(i, oldPlot.getRangeAxis(i));
        //        }
        //        for(int i = 0;i<oldPlot.getDomainAxisCount();i++) {
        //            xyp.setDomainAxis(i, oldPlot.getDomainAxis(i));
        //        }
        for (int i = 0; i < datasets; i++) {
            //            XYDataset xyds = oldPlot.getDataset(i);
            //            xyp.setDataset(i, xyds);
            newRenderer.setSeriesPaint(i, xyir.getSeriesPaint(i));
            newRenderer.setSeriesOutlinePaint(i, xyir.getSeriesOutlinePaint(i));
            newRenderer.setSeriesItemLabelPaint(i, xyir.getSeriesItemLabelPaint(i));
        }
        oldPlot.setRenderer(newRenderer);
        //        this.chartPanel.setChart(new JFreeChart(xyp));
    }//GEN-LAST:event_jComboBox1ActionPerformed

    private void jToggleButton1ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jToggleButton1ActionPerformed
        boolean showLegend = this.jToggleButton1.isSelected();
        if (showLegend) {
            Logger.getLogger(getClass().getName()).info("Showing legend");
            this.chartPanel.getChart().getLegend().setVisible(true);
        } else {
            Logger.getLogger(getClass().getName()).info("Hiding legend");
            this.chartPanel.getChart().getLegend().setVisible(false);
        }
    }//GEN-LAST:event_jToggleButton1ActionPerformed

    // Variables declaration - do not modify//GEN-BEGIN:variables
    private javax.swing.JComboBox jComboBox1;
    private javax.swing.JLabel jLabel1;
    private javax.swing.JScrollPane jScrollPane1;
    private javax.swing.JToggleButton jToggleButton1;
    private javax.swing.JToolBar jToolBar2;
    // End of variables declaration//GEN-END:variables

    /**
     *
     * @return
     */
    public JToolBar getToolBar() {
        return this.jToolBar2;
    }
}