/* =================== * Orson Charts - Demo * =================== * * Copyright (c) 2013-2016, Object Refinery Limited. * All rights reserved. * * http://www.object-refinery.com/orsoncharts/index.html * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: * - Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * - Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * - Neither the name of the Object Refinery Limited nor the * names of its contributors may be used to endorse or promote products * derived from this software without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE * ARE DISCLAIMED. IN NO EVENT SHALL OBJECT REFINERY LIMITED BE LIABLE FOR ANY * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * * Note that the above terms apply to the demo source only, and not the * Orson Charts library. * */ package com.orsoncharts.demo.swing; import java.awt.BorderLayout; import java.awt.Component; import java.awt.Dimension; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.io.IOException; import java.net.URL; import java.util.List; import javax.swing.BorderFactory; import javax.swing.ButtonGroup; import javax.swing.JComponent; import javax.swing.JFrame; import javax.swing.JMenu; import javax.swing.JMenuBar; import javax.swing.JMenuItem; import javax.swing.JPanel; import javax.swing.JRadioButtonMenuItem; import javax.swing.JScrollPane; import javax.swing.JTabbedPane; import javax.swing.SwingUtilities; import javax.swing.JTextPane; import javax.swing.UIManager; import javax.swing.UIManager.LookAndFeelInfo; import com.orsoncharts.Chart3D; import com.orsoncharts.Chart3DPanel; import com.orsoncharts.style.ChartStyle; import com.orsoncharts.style.ChartStyles; /** * A demo application for Orson Charts. This aggregates all the individual * demos which can also be run independently. */ @SuppressWarnings("serial") public class OrsonChartsDemo extends JFrame implements ActionListener { /** Default size for the content panel in the demo applications. */ public static final Dimension DEFAULT_CONTENT_SIZE = new Dimension(760, 480); private OrsonChartsDemoComponent demoComponent; /** * Creates a new demo instance with the specified frame title. * * @param title the title. */ public OrsonChartsDemo(String title) { super(title); addWindowListener(new ExitOnClose()); setJMenuBar(createMenuBar()); add(createContent()); } /** * Creates the menu bar. * * @return The menu bar. */ private JMenuBar createMenuBar() { JMenuBar menuBar = new JMenuBar(); menuBar.add(createFileMenu("File")); menuBar.add(createStyleMenu("Style")); return menuBar; } /** * Creates the file menu. * * @param title the menu title. * * @return The menu. */ private JMenu createFileMenu(String title) { JMenu fileMenu = new JMenu(title); JMenuItem exitItem = new JMenuItem("Exit"); exitItem.setActionCommand("EXIT"); exitItem.addActionListener(this); fileMenu.add(exitItem); return fileMenu; } private JMenu createStyleMenu(String title) { JMenu styleMenu = new JMenu(title); JMenuItem noStyleMenuItem = new JRadioButtonMenuItem("No Style (style as coded)"); noStyleMenuItem.setActionCommand("NO_STYLE"); noStyleMenuItem.addActionListener(this); JMenuItem orson1StyleMenuItem = new JRadioButtonMenuItem("Orson 1 Style"); orson1StyleMenuItem.setActionCommand("ORSON1_STYLE"); orson1StyleMenuItem.addActionListener(this); JMenuItem orson2StyleMenuItem = new JRadioButtonMenuItem("Orson 2 Style"); orson2StyleMenuItem.setActionCommand("ORSON2_STYLE"); orson2StyleMenuItem.addActionListener(this); JMenuItem iceCubeStyleMenuItem = new JRadioButtonMenuItem("Ice Cube Style"); iceCubeStyleMenuItem.setActionCommand("ICE_CUBE_STYLE"); iceCubeStyleMenuItem.addActionListener(this); JMenuItem pastelStyleMenuItem = new JRadioButtonMenuItem("Pastel"); pastelStyleMenuItem.setActionCommand("PASTEL_STYLE"); pastelStyleMenuItem.addActionListener(this); JMenuItem logicalFontStyleMenuItem = new JRadioButtonMenuItem("Logical Font Style"); logicalFontStyleMenuItem.setActionCommand("LOGICAL_FONT_STYLE"); logicalFontStyleMenuItem.addActionListener(this); styleMenu.add(noStyleMenuItem); styleMenu.add(orson1StyleMenuItem); styleMenu.add(orson2StyleMenuItem); styleMenu.add(iceCubeStyleMenuItem); styleMenu.add(pastelStyleMenuItem); styleMenu.add(logicalFontStyleMenuItem); // set radio button group and default selection ButtonGroup group = new ButtonGroup(); group.add(noStyleMenuItem); group.add(orson1StyleMenuItem); group.add(orson2StyleMenuItem); group.add(iceCubeStyleMenuItem); group.add(pastelStyleMenuItem); group.add(logicalFontStyleMenuItem); noStyleMenuItem.setSelected(true); return styleMenu; } /** * Creates the main content of the demo application, a tabbed pane with * one tab showing the demo charts and another showing general information * about Orson Charts. * * @return The content component. */ private JComponent createContent() { JTabbedPane tabs = new JTabbedPane(); this.demoComponent = new OrsonChartsDemoComponent(); tabs.add("Demos", this.demoComponent); tabs.add("About", createAboutPanel()); return tabs; } /** * Creates a panel containing information about Orson Charts. * * @return A panel containing information about Orson Charts. */ private JPanel createAboutPanel() { JPanel result = new JPanel(new BorderLayout()); result.setBorder(BorderFactory.createEmptyBorder(4, 4, 4, 4)); JTextPane textPane = new JTextPane(); textPane.setEditable(false); textPane.setPreferredSize(new Dimension(800, 400)); URL descriptionURL = OrsonChartsDemo.class.getResource( "/com/orsoncharts/demo/about.html"); try { textPane.setPage(descriptionURL); } catch (IOException ex) { throw new RuntimeException(ex); } JScrollPane scroller = new JScrollPane(textPane); result.add(scroller); return result; } private void applyStyleToChartsInPanels(List<Chart3DPanel> panels, ChartStyle style) { for (Chart3DPanel panel : panels) { Chart3D chart = (Chart3D) panel.getDrawable(); ChartStyle s = style.clone(); chart.setStyle(s); } } @Override public void actionPerformed(ActionEvent e) { if ("EXIT".equals(e.getActionCommand())) { System.exit(0); } Component c = this.demoComponent.getChartContainer().getComponent(0); if (c instanceof DemoPanel) { DemoPanel dp = (DemoPanel) c; List<Chart3DPanel> chartPanels = dp.getChartPanels(); if ("NO_STYLE".equals(e.getActionCommand())) { this.demoComponent.setChartStyle(null); } if ("ORSON1_STYLE".equals(e.getActionCommand())) { this.demoComponent.setChartStyle(ChartStyles.createOrson1Style()); applyStyleToChartsInPanels(chartPanels, ChartStyles.createOrson1Style()); } if ("ORSON2_STYLE".equals(e.getActionCommand())) { this.demoComponent.setChartStyle(ChartStyles.createOrson2Style()); applyStyleToChartsInPanels(chartPanels, ChartStyles.createOrson2Style()); } if ("ICE_CUBE_STYLE".equals(e.getActionCommand())) { this.demoComponent.setChartStyle(ChartStyles.createIceCubeStyle()); applyStyleToChartsInPanels(chartPanels, ChartStyles.createIceCubeStyle()); } if ("PASTEL_STYLE".equals(e.getActionCommand())) { this.demoComponent.setChartStyle(ChartStyles.createPastelStyle()); applyStyleToChartsInPanels(chartPanels, ChartStyles.createPastelStyle()); } if ("LOGICAL_FONT_STYLE".equals(e.getActionCommand())) { this.demoComponent.setChartStyle(ChartStyles.createLogicalFontStyle()); applyStyleToChartsInPanels(chartPanels, ChartStyles.createLogicalFontStyle()); } } } /** * Starting point for the demo application. * * @param args ignored. */ public static void main(String[] args) { SwingUtilities.invokeLater(new Runnable() { @Override public void run() { for (LookAndFeelInfo info : UIManager.getInstalledLookAndFeels()) { if ("Nimbus".equals(info.getName())) { try { UIManager.setLookAndFeel(info.getClassName()); } catch (Exception ex) { try { UIManager.setLookAndFeel( UIManager.getSystemLookAndFeelClassName()); } catch (Exception e2) { // do nothing } } } } OrsonChartsDemo app = new OrsonChartsDemo( "Orson Charts Demo 1.6"); app.pack(); app.setVisible(true); } }); } }