diff options
| author | Roman Kennke <roman@kennke.org> | 2006-03-16 12:01:29 +0000 |
|---|---|---|
| committer | Roman Kennke <roman@kennke.org> | 2006-03-16 12:01:29 +0000 |
| commit | cfaae8f8e6ef18d3f671ecbf89efdebe4039bd42 (patch) | |
| tree | 746310f4a0c7d950ab655db1462e58af179fd74c /examples/gnu | |
| parent | 0900b2a1a043069849c91228098d21a6b16324e6 (diff) | |
| download | classpath-cfaae8f8e6ef18d3f671ecbf89efdebe4039bd42.tar.gz | |
2006-03-16 Roman Kennke <kennke@aicas.com>
* gnu/javax/swing/plaf/gnu/GNULookAndFeel.java
Moved from examples into gnu.javax.swing.. namespace.
* examples/gnu/classpath/examples/swing/GNULookAndFeel.java
Moved to gnu.javax.swing.. namespace.
* examples/gnu/classpath/examples/swing/Demo.java:
(themesMenu): New field. Used to disable theme switch in
non-Metal-L&Fs.
(mkMenuBar): Added L&F menu.
(ChangeThemeAction.actionPerformed): Only switch theme when
in Metal L&F.
(ChangeLAFAction): New class used for changing themes.
* javax/swing/UIManager.java
(installed): Added GNU L&F as installed L&F.
Diffstat (limited to 'examples/gnu')
| -rw-r--r-- | examples/gnu/classpath/examples/swing/Demo.java | 78 | ||||
| -rw-r--r-- | examples/gnu/classpath/examples/swing/GNULookAndFeel.java | 265 |
2 files changed, 73 insertions, 270 deletions
diff --git a/examples/gnu/classpath/examples/swing/Demo.java b/examples/gnu/classpath/examples/swing/Demo.java index 92a37d4fa..41bbec523 100644 --- a/examples/gnu/classpath/examples/swing/Demo.java +++ b/examples/gnu/classpath/examples/swing/Demo.java @@ -45,6 +45,12 @@ public class Demo */ JDesktopPane desktop; + /** + * The themes menu. This is implemented as a field so that the L&F switcher + * can disable the menu when a non-Metal L&F is selected. + */ + JMenu themesMenu; + static Color blueGray = new Color(0xdc, 0xda, 0xd5); private static Icon stockIcon(String s) @@ -171,25 +177,41 @@ public class Demo } }); + // Create L&F menu. + JMenu lafMenu = new JMenu("Look and Feel"); + ButtonGroup lafGroup = new ButtonGroup(); + UIManager.LookAndFeelInfo[] lafs = UIManager.getInstalledLookAndFeels(); + String currentLaf = UIManager.getLookAndFeel().getClass().getName(); + for (int i = 0; i < lafs.length; ++i) + { + UIManager.LookAndFeelInfo laf = lafs[i]; + ChangeLAFAction action = new ChangeLAFAction(laf); + JRadioButtonMenuItem lafItem = new JRadioButtonMenuItem(action); + boolean selected = laf.getClassName().equals(currentLaf); + lafItem.setSelected(selected); + lafMenu.add(lafItem); + } + // Create themes menu. - JMenu themes = new JMenu("Themes"); + themesMenu = new JMenu("Themes"); ButtonGroup themesGroup = new ButtonGroup(); JRadioButtonMenuItem ocean = new JRadioButtonMenuItem(new ChangeThemeAction(new OceanTheme())); ocean.setSelected(MetalLookAndFeel.getCurrentTheme() instanceof OceanTheme); - themes.add(ocean); + themesMenu.add(ocean); themesGroup.add(ocean); JRadioButtonMenuItem steel = new JRadioButtonMenuItem(new ChangeThemeAction(new DefaultMetalTheme())); ocean.setSelected(MetalLookAndFeel.getCurrentTheme() instanceof DefaultMetalTheme); - themes.add(steel); + themesMenu.add(steel); themesGroup.add(steel); bar.add(file); bar.add(edit); bar.add(examples); - bar.add(themes); + bar.add(lafMenu); + bar.add(themesMenu); bar.add(help); return bar; } @@ -539,7 +561,10 @@ public class Demo MetalLookAndFeel.setCurrentTheme(theme); try { - UIManager.setLookAndFeel(new MetalLookAndFeel()); + // Only switch theme if we have a metal L&F. It is still necessary + // to install a new MetalLookAndFeel instance. + if (UIManager.getLookAndFeel() instanceof MetalLookAndFeel) + UIManager.setLookAndFeel(new MetalLookAndFeel()); } catch (UnsupportedLookAndFeelException ex) { @@ -549,4 +574,47 @@ public class Demo } } + + /** + * This Action is used to switch Metal themes. + */ + class ChangeLAFAction extends AbstractAction + { + /** + * The theme to switch to. + */ + private UIManager.LookAndFeelInfo laf; + + /** + * Creates a new ChangeLAFAction for the specified L&F. + * + * @param l the L&F to switch to + */ + ChangeLAFAction(UIManager.LookAndFeelInfo l) + { + laf = l; + putValue(NAME, laf.getName()); + } + + /** + * Changes the theme to the one specified in the constructor. + * + * @param event the action event that triggered this action + */ + public void actionPerformed(ActionEvent event) + { + try + { + UIManager.setLookAndFeel(laf.getClassName()); + } + catch (Exception ex) + { + ex.printStackTrace(); + } + SwingUtilities.updateComponentTreeUI(frame); + themesMenu.setEnabled(laf.getClassName() + .equals("javax.swing.plaf.metal.MetalLookAndFeel")); + } + + } } diff --git a/examples/gnu/classpath/examples/swing/GNULookAndFeel.java b/examples/gnu/classpath/examples/swing/GNULookAndFeel.java deleted file mode 100644 index c8fd09d74..000000000 --- a/examples/gnu/classpath/examples/swing/GNULookAndFeel.java +++ /dev/null @@ -1,265 +0,0 @@ -/* GNULookAndFeel.java -- An example of using the javax.swing UI. - Copyright (C) 2005 Free Software Foundation, Inc. - -This file is part of GNU Classpath examples. - -GNU Classpath is free software; you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation; either version 2, or (at your option) -any later version. - -GNU Classpath is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -General Public License for more details. - -You should have received a copy of the GNU General Public License -along with GNU Classpath; see the file COPYING. If not, write to the -Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -02110-1301 USA. -*/ - -package gnu.classpath.examples.swing; - -import java.awt.Color; -import java.awt.Component; -import java.awt.Graphics; - -import javax.swing.Icon; -import javax.swing.ImageIcon; -import javax.swing.JCheckBox; -import javax.swing.JRadioButton; -import javax.swing.UIDefaults; -import javax.swing.plaf.ColorUIResource; -import javax.swing.plaf.IconUIResource; -import javax.swing.plaf.basic.BasicLookAndFeel; - -public class GNULookAndFeel extends BasicLookAndFeel -{ - - static Color blueGray = new Color(0xdc, 0xda, 0xd5); - - public boolean isNativeLookAndFeel() { return true; } - public boolean isSupportedLookAndFeel() { return true; } - public String getDescription() { return "GNU Look and Feel"; } - public String getID() { return "GNULookAndFeel"; } - public String getName() { return "GNU"; } - - static UIDefaults LAF_defaults; - - private final static String iconspath = "/gnu/javax/swing/plaf/gtk/icons/"; - - public UIDefaults getDefaults() - { - if (LAF_defaults == null) - { - LAF_defaults = super.getDefaults(); - Object[] myDefaults = new Object[] { - "Button.background", new ColorUIResource(blueGray), - "CheckBox.background", new ColorUIResource(blueGray), - "CheckBoxMenuItem.background", new ColorUIResource(blueGray), - "ToolBar.background", new ColorUIResource(blueGray), - "Panel.background", new ColorUIResource(blueGray), - "Slider.background", new ColorUIResource(blueGray), - "OptionPane.background", new ColorUIResource(blueGray), - "ProgressBar.background", new ColorUIResource(blueGray), - "TabbedPane.background", new ColorUIResource(blueGray), - "Label.background", new ColorUIResource(blueGray), - "Menu.background", new ColorUIResource(blueGray), - "MenuBar.background", new ColorUIResource(blueGray), - "MenuItem.background", new ColorUIResource(blueGray), - "ScrollBar.background", new ColorUIResource(blueGray), - "CheckBox.icon", new CheckBoxIcon(), - "RadioButton.icon", new RadioButtonIcon(), - - "Tree.closedIcon", - new IconUIResource(new ImageIcon - (getClass().getResource - (iconspath + "TreeClosed.png"))), - "Tree.leafIcon", - new IconUIResource(new ImageIcon - (getClass().getResource - (iconspath + "TreeLeaf.png"))), - "Tree.openIcon", - new IconUIResource(new ImageIcon - (getClass().getResource - (iconspath + "TreeOpen.png"))), - }; - LAF_defaults.putDefaults(myDefaults); - } - return LAF_defaults; - } - - /** - * The icon used for CheckBoxes in the BasicLookAndFeel. This is an empty - * icon with a size of 13x13 pixels. - */ - static class CheckBoxIcon - implements Icon - { - /** - * Returns the height of the icon. The BasicLookAndFeel CheckBox icon - * has a height of 13 pixels. - * - * @return the height of the icon - */ - public int getIconHeight() - { - return 13; - } - - /** - * Returns the width of the icon. The BasicLookAndFeel CheckBox icon - * has a width of 13 pixels. - * - * @return the height of the icon - */ - public int getIconWidth() - { - return 13; - } - - /** - * Paints the icon. The BasicLookAndFeel CheckBox icon is empty and does - * not need to be painted. - * - * @param c the component to be painted - * @param g the Graphics context to be painted with - * @param x the x position of the icon - * @param y the y position of the icon - */ - public void paintIcon(Component c, Graphics g, int x, int y) - { - Color save = g.getColor(); - g.setColor(c.getForeground()); - g.drawRect(x, y, getIconWidth(), getIconHeight()); - - JCheckBox item = (JCheckBox) c; - if (item.isSelected()) - { - g.drawLine(3 + x, 5 + y, 3 + x, 9 + y); - g.drawLine(4 + x, 5 + y, 4 + x, 9 + y); - g.drawLine(5 + x, 7 + y, 9 + x, 3 + y); - g.drawLine(5 + x, 8 + y, 9 + x, 4 + y); - } - - g.setColor(save); - } - } - - /** - * The icon used for RadioButtons in the GNULookAndFeel. This is an empty - * icon with a size of 13x13 pixels. - */ - static class RadioButtonIcon - implements Icon - { - /** - * Returns the height of the icon. The GNULookAndFeel RadioButton icon - * has a height of 13 pixels. - * - * @return the height of the icon - */ - public int getIconHeight() - { - return 13; - } - - /** - * Returns the width of the icon. The GNULookAndFeel RadioButton icon - * has a width of 13 pixels. - * - * @return the height of the icon - */ - public int getIconWidth() - { - return 13; - } - - /** - * Paints the icon. The GNULookAndFeel RadioButton icon is empty and does - * not need to be painted. - * - * @param c the component to be painted - * @param g the Graphics context to be painted with - * @param x the x position of the icon - * @param y the y position of the icon - */ - public void paintIcon(Component c, Graphics g, int x, int y) - { - Color savedColor = g.getColor(); - JRadioButton b = (JRadioButton) c; - - // draw outer circle - if (b.isEnabled()) - g.setColor(Color.GRAY); - else - g.setColor(Color.GRAY); - g.drawLine(x + 2, y + 1, x + 3, y + 1); - g.drawLine(x + 4, y, x + 7, y); - g.drawLine(x + 8, y + 1, x + 9, y + 1); - g.drawLine(x + 10, y + 2, x + 10, y + 3); - g.drawLine(x + 11, y + 4, x + 11, y + 7); - g.drawLine(x + 10, y + 8, x + 10, y + 9); - g.drawLine(x + 8, y + 10, x + 9, y + 10); - g.drawLine(x + 4, y + 11, x + 7, y + 11); - g.drawLine(x + 2, y + 10, x + 3, y + 10); - g.drawLine(x + 1, y + 9, x + 1, y + 8); - g.drawLine(x, y + 7, x, y + 4); - g.drawLine(x + 1, y + 2, x + 1, y + 3); - - if (b.getModel().isArmed()) - { - g.setColor(Color.GRAY); - g.drawLine(x + 4, y + 1, x + 7, y + 1); - g.drawLine(x + 4, y + 10, x + 7, y + 10); - g.drawLine(x + 1, y + 4, x + 1, y + 7); - g.drawLine(x + 10, y + 4, x + 10, y + 7); - g.fillRect(x + 2, y + 2, 8, 8); - } - else - { - // only draw inner highlight if not filled - if (b.isEnabled()) - { - g.setColor(Color.WHITE); - - g.drawLine(x + 2, y + 8, x + 2, y + 9); - g.drawLine(x + 1, y + 4, x + 1, y + 7); - g.drawLine(x + 2, y + 2, x + 2, y + 3); - g.drawLine(x + 3, y + 2, x + 3, y + 2); - g.drawLine(x + 4, y + 1, x + 7, y + 1); - g.drawLine(x + 8, y + 2, x + 9, y + 2); - } - } - - // draw outer highlight - if (b.isEnabled()) - { - g.setColor(Color.WHITE); - - // outer - g.drawLine(x + 10, y + 1, x + 10, y + 1); - g.drawLine(x + 11, y + 2, x + 11, y + 3); - g.drawLine(x + 12, y + 4, x + 12, y + 7); - g.drawLine(x + 11, y + 8, x + 11, y + 9); - g.drawLine(x + 10, y + 10, x + 10, y + 10); - g.drawLine(x + 8, y + 11, x + 9, y + 11); - g.drawLine(x + 4, y + 12, x + 7, y + 12); - g.drawLine(x + 2, y + 11, x + 3, y + 11); - } - - if (b.isSelected()) - { - if (b.isEnabled()) - g.setColor(Color.BLACK); - else - g.setColor(Color.GRAY); - g.drawLine(x + 4, y + 3, x + 7, y + 3); - g.fillRect(x + 3, y + 4, 6, 4); - g.drawLine(x + 4, y + 8, x + 7, y + 8); - } - g.setColor(savedColor); - } - } -} |
