/* * Copyright (c) 1998, 2011, Oracle and/or its affiliates. All rights reserved. * * 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 Oracle 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 THE COPYRIGHT OWNER OR * CONTRIBUTORS 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. */ /* * This source code is provided to illustrate the usage of a given feature * or technique and has been deliberately simplified. Additional steps * required for a production-quality application, such as security checks, * input validation and proper error handling, might not be present in * this sample code. */ import java.awt.Dimension; import java.awt.Toolkit; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.WindowAdapter; import java.awt.event.WindowEvent; import java.io.InputStream; import javax.swing.ButtonGroup; import javax.swing.JCheckBoxMenuItem; import javax.swing.JComponent; import javax.swing.JDesktopPane; import javax.swing.JFileChooser; import javax.swing.JFrame; import javax.swing.JInternalFrame; import javax.swing.JMenu; import javax.swing.JMenuBar; import javax.swing.JMenuItem; import javax.swing.JOptionPane; import javax.swing.JRadioButtonMenuItem; import javax.swing.UIManager; import javax.swing.plaf.metal.DefaultMetalTheme; import javax.swing.plaf.metal.MetalTheme; import javax.swing.plaf.metal.OceanTheme; /** * This is the main container frame for the Metalworks demo app * * @author Steve Wilson * @author Alexander Kouznetsov */ @SuppressWarnings("serial") public final class MetalworksFrame extends JFrame { JMenuBar menuBar; JDesktopPane desktop; JInternalFrame toolPalette; JCheckBoxMenuItem showToolPaletteMenuItem; static final Integer DOCLAYER = 5; static final Integer TOOLLAYER = 6; static final Integer HELPLAYER = 7; static final String ABOUTMSG = "Metalworks \n \nAn application written to " + "show off the Java Look & Feel. \n \nWritten by the JavaSoft " + "Look & Feel Team \n Michael Albers\n Tom Santos\n " + "Jeff Shapiro\n Steve Wilson"; public MetalworksFrame() { super("Metalworks"); final int inset = 50; Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize(); setBounds(inset, inset, screenSize.width - inset * 2, screenSize.height - inset * 2); buildContent(); buildMenus(); this.addWindowListener(new WindowAdapter() { @Override public void windowClosing(WindowEvent e) { quit(); } }); UIManager.addPropertyChangeListener(new UISwitchListener( (JComponent) getRootPane())); } protected void buildMenus() { menuBar = new JMenuBar(); menuBar.setOpaque(true); JMenu file = buildFileMenu(); JMenu edit = buildEditMenu(); JMenu views = buildViewsMenu(); JMenu speed = buildSpeedMenu(); JMenu help = buildHelpMenu(); // load a theme from a text file MetalTheme myTheme = null; try { InputStream istream = getClass().getResourceAsStream( "/resources/MyTheme.theme"); myTheme = new PropertiesMetalTheme(istream); } catch (NullPointerException e) { System.out.println(e); } // build an array of themes MetalTheme[] themes = { new OceanTheme(), new DefaultMetalTheme(), new GreenMetalTheme(), new AquaMetalTheme(), new KhakiMetalTheme(), new DemoMetalTheme(), new ContrastMetalTheme(), new BigContrastMetalTheme(), myTheme }; // put the themes in a menu JMenu themeMenu = new MetalThemeMenu("Theme", themes); menuBar.add(file); menuBar.add(edit); menuBar.add(views); menuBar.add(themeMenu); menuBar.add(speed); menuBar.add(help); setJMenuBar(menuBar); } protected JMenu buildFileMenu() { JMenu file = new JMenu("File"); JMenuItem newWin = new JMenuItem("New"); JMenuItem open = new JMenuItem("Open"); JMenuItem quit = new JMenuItem("Quit"); newWin.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { newDocument(); } }); open.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { openDocument(); } }); quit.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { quit(); } }); file.add(newWin); file.add(open); file.addSeparator(); file.add(quit); return file; } protected JMenu buildEditMenu() { JMenu edit = new JMenu("Edit"); JMenuItem undo = new JMenuItem("Undo"); JMenuItem copy = new JMenuItem("Copy"); JMenuItem cut = new JMenuItem("Cut"); JMenuItem paste = new JMenuItem("Paste"); JMenuItem prefs = new JMenuItem("Preferences..."); undo.setEnabled(false); copy.setEnabled(false); cut.setEnabled(false); paste.setEnabled(false); prefs.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { openPrefsWindow(); } }); edit.add(undo); edit.addSeparator(); edit.add(cut); edit.add(copy); edit.add(paste); edit.addSeparator(); edit.add(prefs); return edit; } protected JMenu buildViewsMenu() { JMenu views = new JMenu("Views"); JMenuItem inBox = new JMenuItem("Open In-Box"); JMenuItem outBox = new JMenuItem("Open Out-Box"); outBox.setEnabled(false); inBox.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { openInBox(); } }); views.add(inBox); views.add(outBox); return views; } protected JMenu buildSpeedMenu() { JMenu speed = new JMenu("Drag"); JRadioButtonMenuItem live = new JRadioButtonMenuItem("Live"); JRadioButtonMenuItem outline = new JRadioButtonMenuItem("Outline"); JRadioButtonMenuItem slow = new JRadioButtonMenuItem("Old and Slow"); ButtonGroup group = new ButtonGroup(); group.add(live); group.add(outline); group.add(slow); live.setSelected(true); slow.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { // for right now I'm saying if you set the mode // to something other than a specified mode // it will revert to the old way // This is mostly for comparison's sake desktop.setDragMode(-1); } }); live.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { desktop.setDragMode(JDesktopPane.LIVE_DRAG_MODE); } }); outline.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { desktop.setDragMode(JDesktopPane.OUTLINE_DRAG_MODE); } }); speed.add(live); speed.add(outline); speed.add(slow); return speed; } protected JMenu buildHelpMenu() { JMenu help = new JMenu("Help"); JMenuItem about = new JMenuItem("About Metalworks..."); JMenuItem openHelp = new JMenuItem("Open Help Window"); about.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { showAboutBox(); } }); openHelp.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { openHelpWindow(); } }); help.add(about); help.add(openHelp); return help; } protected void buildContent() { desktop = new JDesktopPane(); getContentPane().add(desktop); } public void quit() { System.exit(0); } public void newDocument() { JInternalFrame doc = new MetalworksDocumentFrame(); desktop.add(doc, DOCLAYER); try { doc.setVisible(true); doc.setSelected(true); } catch (java.beans.PropertyVetoException e2) { } } public void openDocument() { JFileChooser chooser = new JFileChooser(); chooser.showOpenDialog(this); } public void openHelpWindow() { JInternalFrame help = new MetalworksHelp(); desktop.add(help, HELPLAYER); try { help.setVisible(true); help.setSelected(true); } catch (java.beans.PropertyVetoException e2) { } } public void showAboutBox() { JOptionPane.showMessageDialog(this, ABOUTMSG); } public void openPrefsWindow() { MetalworksPrefs dialog = new MetalworksPrefs(this); dialog.setVisible(true); } public void openInBox() { JInternalFrame doc = new MetalworksInBox(); desktop.add(doc, DOCLAYER); try { doc.setVisible(true); doc.setSelected(true); } catch (java.beans.PropertyVetoException e2) { } } }