Mega Code Archive

 
Categories / Java / Swing JFC
 

Extends DefaultMetalTheme

/*  * Copyright (c) 1995 - 2008 Sun Microsystems, Inc.  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 Sun Microsystems 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.  */ /*  * LookAndFeelDemo.java is a Java SE 6 example that requires  * one other file (TestTheme.java).  */ import java.awt.BorderLayout; import java.awt.Component; import java.awt.GridLayout; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.KeyEvent; import javax.swing.BorderFactory; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JPanel; import javax.swing.UIManager; import javax.swing.UnsupportedLookAndFeelException; import javax.swing.plaf.ColorUIResource; import javax.swing.plaf.metal.DefaultMetalTheme; import javax.swing.plaf.metal.MetalLookAndFeel; import javax.swing.plaf.metal.OceanTheme; public class LookAndFeelDemo implements ActionListener {   private static String labelPrefix = "Number of button clicks: ";   private int numClicks = 0;   final JLabel label = new JLabel(labelPrefix + "0    ");   // Specify the look and feel to use by defining the LOOKANDFEEL constant   // Valid values are: null (use the default), "Metal", "System", "Motif",   // and "GTK"   final static String LOOKANDFEEL = "Metal";   // If you choose the Metal L&F, you can also choose a theme.   // Specify the theme to use by defining the THEME constant   // Valid values are: "DefaultMetal", "Ocean", and "Test"   final static String THEME = "Test";   public Component createComponents() {     JButton button = new JButton("I'm a Swing button!");     button.setMnemonic(KeyEvent.VK_I);     button.addActionListener(this);     label.setLabelFor(button);     /*      * An easy way to put space between a top-level container and its contents      * is to put the contents in a JPanel that has an "empty" border.      */     JPanel pane = new JPanel(new GridLayout(0, 1));     pane.add(button);     pane.add(label);     pane.setBorder(BorderFactory.createEmptyBorder(30, // top         30, // left         10, // bottom         30) // right         );     return pane;   }   public void actionPerformed(ActionEvent e) {     numClicks++;     label.setText(labelPrefix + numClicks);   }   private static void initLookAndFeel() {     String lookAndFeel = null;     if (LOOKANDFEEL != null) {       if (LOOKANDFEEL.equals("Metal")) {         lookAndFeel = UIManager.getCrossPlatformLookAndFeelClassName();         // an alternative way to set the Metal L&F is to replace the         // previous line with:         // lookAndFeel = "javax.swing.plaf.metal.MetalLookAndFeel";       }       else if (LOOKANDFEEL.equals("System")) {         lookAndFeel = UIManager.getSystemLookAndFeelClassName();       }       else if (LOOKANDFEEL.equals("Motif")) {         lookAndFeel = "com.sun.java.swing.plaf.motif.MotifLookAndFeel";       }       else if (LOOKANDFEEL.equals("GTK")) {         lookAndFeel = "com.sun.java.swing.plaf.gtk.GTKLookAndFeel";       }       else {         System.err.println("Unexpected value of LOOKANDFEEL specified: "             + LOOKANDFEEL);         lookAndFeel = UIManager.getCrossPlatformLookAndFeelClassName();       }       try {         UIManager.setLookAndFeel(lookAndFeel);         // If L&F = "Metal", set the theme         if (LOOKANDFEEL.equals("Metal")) {           if (THEME.equals("DefaultMetal"))             MetalLookAndFeel.setCurrentTheme(new DefaultMetalTheme());           else if (THEME.equals("Ocean"))             MetalLookAndFeel.setCurrentTheme(new OceanTheme());           else             MetalLookAndFeel.setCurrentTheme(new TestTheme());           UIManager.setLookAndFeel(new MetalLookAndFeel());         }       }       catch (ClassNotFoundException e) {         System.err.println("Couldn't find class for specified look and feel:"             + lookAndFeel);         System.err             .println("Did you include the L&F library in the class path?");         System.err.println("Using the default look and feel.");       }       catch (UnsupportedLookAndFeelException e) {         System.err.println("Can't use the specified look and feel ("             + lookAndFeel + ") on this platform.");         System.err.println("Using the default look and feel.");       }       catch (Exception e) {         System.err.println("Couldn't get specified look and feel ("             + lookAndFeel + "), for some reason.");         System.err.println("Using the default look and feel.");         e.printStackTrace();       }     }   }   /**    * Create the GUI and show it. For thread safety, this method should be    * invoked from the event dispatch thread.    */   private static void createAndShowGUI() {     // Set the look and feel.     initLookAndFeel();     // Make sure we have nice window decorations.     JFrame.setDefaultLookAndFeelDecorated(true);     // Create and set up the window.     JFrame frame = new JFrame("SwingApplication");     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);     LookAndFeelDemo app = new LookAndFeelDemo();     Component contents = app.createComponents();     frame.getContentPane().add(contents, BorderLayout.CENTER);     // Display the window.     frame.pack();     frame.setVisible(true);   }   public static void main(String[] args) {     // Schedule a job for the event dispatch thread:     // creating and showing this application's GUI.     javax.swing.SwingUtilities.invokeLater(new Runnable() {       public void run() {         createAndShowGUI();       }     });   } } /*  * Copyright (c) 1995 - 2008 Sun Microsystems, Inc. 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 Sun Microsystems 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 class describes a theme using "primary" colors. You can change the  * colors to anything else you want.  *   * 1.9 07/26/04  */ class TestTheme extends DefaultMetalTheme {   public String getName() {     return "Toms";   }   private final ColorUIResource primary1 = new ColorUIResource(255, 255, 0);   private final ColorUIResource primary2 = new ColorUIResource(0, 255, 255);   private final ColorUIResource primary3 = new ColorUIResource(255, 0, 255);   protected ColorUIResource getPrimary1() {     return primary1;   }   protected ColorUIResource getPrimary2() {     return primary2;   }   protected ColorUIResource getPrimary3() {     return primary3;   } }