Java/Swing JFC/DefaultMetalTheme

Материал из Java эксперт
Версия от 18:01, 31 мая 2010; (обсуждение)
(разн.) ← Предыдущая | Текущая версия (разн.) | Следующая → (разн.)
Перейти к: навигация, поиск

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