Java/Swing JFC/DefaultMetalTheme

Материал из Java эксперт
Перейти к: навигация, поиск

extends DefaultMetalTheme

   <source lang="java">

/*

* 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.ruponent; 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;
 }

}

</source>