Java/Swing JFC/UI
Содержание
- 1 Displays the contents of the UIDefaults hash map for the current look and feel.
- 2 Get default values for Swing-based user interface
- 3 Getting the Default Values for a Look and Feel
- 4 How to change the look and feel of Swing applications
- 5 Replaces the standard scrollbar UI with a custom one
- 6 Retrieve information of all available UIManager defaults
- 7 Setting a UI Default Value That Is Created at Every Fetch
- 8 Setting a UI Default Value That Is Created When Fetched
- 9 UIManager defaults
- 10 UIManager resources to tweak the look of applications
Displays the contents of the UIDefaults hash map for the current look and feel.
<source lang="java">
/*
* Copyright 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. */
import java.awt.BorderLayout; import java.awt.Color; import java.awt.ruponent; import java.awt.Dimension; import java.awt.EventQueue; import java.awt.Font; import java.awt.Graphics; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.util.*; import javax.swing.AbstractAction; import javax.swing.Icon; import javax.swing.JButton; import javax.swing.JCheckBox; import javax.swing.JComboBox; import javax.swing.JComponent; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JMenuItem; import javax.swing.JPanel; import javax.swing.JRadioButton; import javax.swing.JScrollPane; import javax.swing.JTabbedPane; import javax.swing.JTable; import javax.swing.ListSelectionModel; import javax.swing.LookAndFeel; import javax.swing.RowFilter; import javax.swing.SwingUtilities; import javax.swing.UIDefaults; import javax.swing.UIManager; import javax.swing.border.Border; import javax.swing.border.EmptyBorder; import javax.swing.table.AbstractTableModel; import javax.swing.table.DefaultTableColumnModel; import javax.swing.table.TableCellRenderer; import javax.swing.table.TableColumn; import javax.swing.table.TableRowSorter; /**
* Simple application which displays the contents of the UIDefaults hash map * for the current look and feel. * * @author aim */
public class DefaultsDisplay extends JPanel {
private static final int rowHeight = 32; public static void main(String[] args) { EventQueue.invokeLater(new Runnable() { public void run() { JFrame frame = new JFrame("UIDefaults Display"); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.add(new DefaultsDisplay()); frame.pack(); frame.setVisible(true); } }); } private String OSXLookAndFeelName; // hack for look-and-feel name mismatch on OS X private Map<String,String> lookAndFeelsMap; private final Map<String,JComponent> defaultsTablesMap; private JComboBox lookAndFeelComboBox; private JCheckBox onlyVisualsCheckBox; private JTabbedPane tabPane; private RowFilter<UIDefaultsTableModel,Integer> visualsFilter; /** Creates a new instance of DefaultsDisplayer */ public DefaultsDisplay() { defaultsTablesMap = new HashMap<String,JComponent>(); try { UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName()); if (System.getProperty("os.name").equals("Mac OS X")) { OSXLookAndFeelName = UIManager.getLookAndFeel().getName(); } } catch (Exception ex) { // better work :-) } setLayout(new BorderLayout()); JPanel controls = new JPanel(); controls.add(createLookAndFeelControl()); controls.add(createFilterControl()); add(controls, BorderLayout.NORTH); tabPane = new JTabbedPane(); add(tabPane, BorderLayout.CENTER); addDefaultsTab(); } protected JComponent createLookAndFeelControl() { JPanel panel = new JPanel(); JLabel label = new JLabel("Current Look and Feel"); lookAndFeelComboBox = new JComboBox(); label.setLabelFor(lookAndFeelComboBox); panel.add(label); panel.add(lookAndFeelComboBox); // Look for toolkit look and feels first UIManager.LookAndFeelInfo lookAndFeelInfos[] = UIManager.getInstalledLookAndFeels(); lookAndFeelsMap = new HashMap<String,String>(); for(UIManager.LookAndFeelInfo info : lookAndFeelInfos) { String name = info.getName(); // workaround for problem where Info and name property don"t match on OS X if (name.equals("Mac OS X")) { name = OSXLookAndFeelName; } // workaround for bug where Nimbus classname is incorrect lookAndFeelsMap.put(name, name.equals("Nimbus")? "com.sun.java.swing.plaf.nimbus.NimbusLookAndFeel" : info.getClassName()); lookAndFeelComboBox.addItem(name); } lookAndFeelComboBox.setSelectedItem(UIManager.getLookAndFeel().getName()); lookAndFeelComboBox.addActionListener(new ChangeLookAndFeelAction()); return panel; } protected JComponent createFilterControl() { onlyVisualsCheckBox = new JCheckBox("Show Only Visual Defaults"); onlyVisualsCheckBox.setSelected(true); onlyVisualsCheckBox.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent event) { boolean showOnlyVisuals = onlyVisualsCheckBox.isSelected(); for(int i = 0; i < tabPane.getTabCount() ; i++) { JScrollPane scrollpane = (JScrollPane)tabPane.getComponentAt(i); JTable table = (JTable)scrollpane.getViewport().getView(); TableRowSorter sorter = (TableRowSorter)table.getRowSorter(); sorter.setRowFilter(showOnlyVisuals? visualsFilter : null); } } }); return onlyVisualsCheckBox; } protected boolean hasDefaultsTab(String lookAndFeelName) { return defaultsTablesMap.get(lookAndFeelName) != null; } protected void addDefaultsTab() { LookAndFeel lookAndFeel = UIManager.getLookAndFeel(); JScrollPane scrollPane = new JScrollPane(createDefaultsTable()); tabPane.addTab(lookAndFeel.getName() + " Defaults", scrollPane); defaultsTablesMap.put(lookAndFeel.getName(), scrollPane); } protected JTable createDefaultsTable() { JTable table = new JTable(new UIDefaultsTableModel()); table.setRowHeight(rowHeight); table.setShowHorizontalLines(false); table.setShowVerticalLines(false); table.setIntercellSpacing(new Dimension(0,0)); table.setSelectionMode(ListSelectionModel.SINGLE_SELECTION); initFilters(table); DefaultTableColumnModel columnModel = new DefaultTableColumnModel(); Color rowColors[] = new Color[2]; rowColors[0] = UIManager.getColor("Table.background"); rowColors[1] = new Color((int)(rowColors[0].getRed() * .90), (int)(rowColors[0].getGreen() * .95), (int)(rowColors[0].getBlue() * .95)); int width = 0; TableColumn column = new TableColumn(); column.setCellRenderer(new KeyRenderer(rowColors)); column.setModelIndex(UIDefaultsTableModel.KEY_COLUMN); column.setHeaderValue("Key"); column.setPreferredWidth(250); columnModel.addColumn(column); width += column.getPreferredWidth(); column = new TableColumn(); column.setCellRenderer(new RowRenderer(rowColors)); column.setModelIndex(UIDefaultsTableModel.TYPE_COLUMN); column.setHeaderValue("Type"); column.setPreferredWidth(250); columnModel.addColumn(column); width += column.getPreferredWidth(); column = new TableColumn(); column.setCellRenderer(new ValueRenderer(rowColors)); column.setModelIndex(UIDefaultsTableModel.VALUE_COLUMN); column.setHeaderValue("Value"); column.setPreferredWidth(300); columnModel.addColumn(column); width += column.getPreferredWidth(); table.setColumnModel(columnModel); table.setPreferredScrollableViewportSize(new Dimension(width, 12 * rowHeight)); return table; } protected void initFilters(JTable table) { TableRowSorter sorter = new TableRowSorter(table.getModel()); table.setRowSorter(sorter); if (visualsFilter == null) { visualsFilter = new RowFilter<UIDefaultsTableModel,Integer>() { public boolean include(Entry<? extends UIDefaultsTableModel, ? extends Integer> entry) { UIDefaultsTableModel model = entry.getModel(); Object defaultsValue = model.getValueAt(entry.getIdentifier().intValue(), UIDefaultsTableModel.VALUE_COLUMN); return defaultsValue instanceof Color || defaultsValue instanceof Font || defaultsValue instanceof Icon; } }; } if (onlyVisualsCheckBox.isSelected()) { sorter.setRowFilter(visualsFilter); } } private class ChangeLookAndFeelAction extends AbstractAction { public ChangeLookAndFeelAction() { super("Change LookAndFeel"); } public void actionPerformed(ActionEvent event) { String lookAndFeelName = (String)lookAndFeelComboBox.getSelectedItem(); try { UIManager.setLookAndFeel(lookAndFeelsMap.get(lookAndFeelName)); SwingUtilities.updateComponentTreeUI(DefaultsDisplay.this.getTopLevelAncestor()); if (!hasDefaultsTab(lookAndFeelName)) { addDefaultsTab(); } tabPane.setSelectedComponent(defaultsTablesMap.get(lookAndFeelName)); } catch (Exception ex) { System.err.println("could not change look and feel to " + lookAndFeelName); System.err.println(ex); } } } private static class UIDefaultsTableModel extends AbstractTableModel { private static final int KEY_COLUMN = 0; private static final int TYPE_COLUMN = 1; private static final int VALUE_COLUMN = 2; private UIDefaults defaults; private List<Object> keys; public UIDefaultsTableModel() { // make a local copy of the defaults table in case the look and feel changes defaults = new UIDefaults(); keys = new ArrayList<Object>(); UIDefaults realDefaults = UIManager.getDefaults(); Enumeration keysEnum = realDefaults.keys(); while (keysEnum.hasMoreElements()) { Object key = keysEnum.nextElement(); if (!defaults.containsKey(key)) { keys.add(key); defaults.put(key, realDefaults.get(key)); } else { System.out.println("found duplicate key:"+key); } } } public int getColumnCount() { return 3; } public int getRowCount() { return defaults.size(); } public Class getColumnClass(int column) { Class klass = null; switch(column) { case KEY_COLUMN: { klass = String.class; break; } case TYPE_COLUMN: { klass = String.class; break; } case VALUE_COLUMN: { klass = Object.class; } } return klass; } public Object getValueAt(int row, int column) { Object value = null; switch(column) { case KEY_COLUMN: { value = keys.get(row); break; } case TYPE_COLUMN: { Object key = keys.get(row); Object defaultsValue = defaults.get(key); value = defaultsValue != null? defaultsValue.getClass().getName() : ""; break; } case VALUE_COLUMN: { value = defaults.get(keys.get(row)); } } return value; } } private static class RowRenderer extends JLabel implements TableCellRenderer { private final Color[] rowColors; private final Border noFocusBorder = new EmptyBorder(1, 1, 1, 1); public RowRenderer(Color colors[]) { rowColors = colors; } public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) { setText(value != null? value.toString() : "unknown"); setIcon(null); setColors(table, row, isSelected); setBorder(this, hasFocus, isSelected); return this; } protected void setColors(JTable table, int row, boolean isSelected) { if (!isSelected) { setBackground(rowColors[row % rowColors.length]); setForeground(table.getForeground()); } else { setBackground(table.getSelectionBackground()); setForeground(table.getSelectionForeground()); } } protected void setBorder(JComponent renderer, boolean hasFocus, boolean isSelected) { if (hasFocus) { Border border = null; if (isSelected) { border = UIManager.getBorder("Table.focusSelectedCellHighlightBorder"); } if (border == null) { border = UIManager.getBorder("Table.focusCellHighlightBorder"); } renderer.setBorder(border); } else { renderer.setBorder(noFocusBorder); } } } private static class KeyRenderer extends RowRenderer { public KeyRenderer(Color colors[]) { super(colors); setFont(getFont().deriveFont(Font.BOLD)); } } private static class ValueRenderer extends RowRenderer { private final JButton buttonIconRenderer; private final JRadioButton radioIconRenderer; private final JMenuItem menuItemIconRenderer; private final JCheckBox checkboxIconRenderer; public ValueRenderer(Color colors[]) { super(colors); buttonIconRenderer = new JButton(); buttonIconRenderer.setBorderPainted(false); buttonIconRenderer.setContentAreaFilled(false); buttonIconRenderer.setText("(for AbstractButtons only)"); radioIconRenderer = new JRadioButton(); radioIconRenderer.setBorderPainted(false); radioIconRenderer.setText("for JRadioButtons only)"); checkboxIconRenderer = new JCheckBox(); checkboxIconRenderer.setBorderPainted(false); checkboxIconRenderer.setText("for JCheckBoxes only)"); menuItemIconRenderer = new JMenuItem(); menuItemIconRenderer.setBorderPainted(false); menuItemIconRenderer.setText("(for JMenuItems only)"); } public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) { JComponent renderer = null; if (value instanceof Icon) { Icon icon = (Icon)value; // Hack to fix problem where some plaf Icons cast the component to // various component classes. yikes! not very re-usable icons :( String className = (String)table.getValueAt(row, UIDefaultsTableModel.TYPE_COLUMN); if (className.contains("BasicIconFactory$RadioButtonMenuItemIcon") || className.contains("BasicIconFactory$CheckBoxMenuItemIcon") || className.contains("OceanTheme$IFIcon") || className.contains("MotifIconFactory$RadioButtonIcon") || className.contains("MotifIconFactory$CheckBoxIcon") || className.contains("MotifIconFactory$MenuArrowIcon") || className.contains("WindowsIconFactory$FrameButtonIcon") || className.contains("WindowsIconFactory$RadioButtonIcon")) { buttonIconRenderer.setIcon(icon); buttonIconRenderer.setSelected(true); renderer = buttonIconRenderer; } else if (className.contains("MetalIconFactory$RadioButtonIcon")) { radioIconRenderer.setIcon(icon); renderer = radioIconRenderer; } else if (className.contains("MetalIconFactory$RadioButtonMenuItemIcon") || className.contains("MetalIconFactory$CheckBoxMenuItemIcon") || className.contains("MetalIconFactory$MenuArrowIcon") || className.contains("MetalIconFactory$MenuItemArrowIcon")) { menuItemIconRenderer.setIcon(icon); menuItemIconRenderer.setSelected(true); renderer = menuItemIconRenderer; } else if (className.contains("MetalIconFactory$CheckBoxIcon") || className.contains("WindowsIconFactory$CheckBoxIcon")) { checkboxIconRenderer.setIcon(icon); checkboxIconRenderer.setSelected(true); renderer = checkboxIconRenderer; } } if (renderer != null) { // special hack renderer for icons needs to be colorized because // it doesn"t extend RowRenderer setColors(table, row, isSelected); setBorder(renderer, hasFocus, isSelected); } else { // renderer == this renderer = (JComponent)super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column); if (value instanceof Color) { Color color = (Color)value; float[] hsb = Color.RGBtoHSB(color.getRed(), color.getGreen(), color.getBlue(), null); setIcon(ColorIcon.getIcon(color)); setText("RGB=" + color.getRed() + ","+ color.getGreen() + ","+ color.getBlue() + " " + "HSB=" + String.format("%.0f%n",hsb[0]*360) + "," + String.format("%.3f%n",hsb[1]) + "," + String.format("%.3f%n", hsb[2])); } else if (value instanceof Font) { Font font = (Font)value; setFont(font); setText(font.getFontName() + " size="+ font.getSize2D()); setIcon(null); } else if (value instanceof Icon) { setIcon((Icon)value); setText(""); } } return renderer; } @Override protected void paintComponent(Graphics g) { try { super.paintComponent(g); } catch (ClassCastException ex) { System.out.println("cast exception:" + ex.getMessage()); } } } private static class ColorIcon implements Icon { private static HashMap<Color,ColorIcon> icons; private Color color; private int size = DefaultsDisplay.rowHeight - 3; public static ColorIcon getIcon(Color color) { if (icons == null) { icons = new HashMap<Color,ColorIcon>(); } ColorIcon icon = icons.get(color); if (icon == null) { icon = new ColorIcon(color); icons.put(color, icon); } return icon; } protected ColorIcon(Color color) { this.color = color; } public void paintIcon(Component c, Graphics g, int x, int y) { g.setColor(color); g.fillRect(x, y, size, size); g.setColor(Color.black); g.drawRect(x, y, size, size); } public int getIconWidth() { return size; } public int getIconHeight() { return size; } }
}
</source>
Get default values for Swing-based user interface
<source lang="java">
import java.util.Iterator; import java.util.Map; import java.util.Set; import javax.swing.UIManager; public class Main {
public static void main(String[] args) throws Exception { Set defaults = UIManager.getLookAndFeelDefaults().entrySet(); for (Iterator i = defaults.iterator(); i.hasNext();) { Map.Entry entry = (Map.Entry) i.next(); System.out.print(entry.getKey() + " = "); System.out.println(entry.getValue()); } }
}
</source>
Getting the Default Values for a Look and Feel
<source lang="java">
import java.awt.Color; import java.awt.Dimension; import java.awt.Font; import java.awt.Insets; import javax.swing.Icon; import javax.swing.InputMap; import javax.swing.UIDefaults; import javax.swing.UIManager; import javax.swing.border.Border; public class Main {
public static void main(String[] argv) { UIDefaults uidefs = UIManager.getLookAndFeelDefaults(); String[] keys = (String[]) uidefs.keySet().toArray(new String[0]); for (int i = 0; i < keys.length; i++) { Object v = uidefs.get(keys[i]); if (v instanceof Integer) { int intVal = uidefs.getInt(keys[i]); } else if (v instanceof Boolean) { boolean boolVal = uidefs.getBoolean(keys[i]); } else if (v instanceof String) { String strVal = uidefs.getString(keys[i]); } else if (v instanceof Dimension) { Dimension dimVal = uidefs.getDimension(keys[i]); } else if (v instanceof Insets) { Insets insetsVal = uidefs.getInsets(keys[i]); } else if (v instanceof Color) { Color colorVal = uidefs.getColor(keys[i]); } else if (v instanceof Font) { Font fontVal = uidefs.getFont(keys[i]); } else if (v instanceof Border) { Border borderVal = uidefs.getBorder(keys[i]); } else if (v instanceof Icon) { Icon iconVal = uidefs.getIcon(keys[i]); } else if (v instanceof javax.swing.text.JTextComponent.KeyBinding[]) { javax.swing.text.JTextComponent.KeyBinding[] keyBindsVal = (javax.swing.text.JTextComponent.KeyBinding[]) uidefs .get(keys[i]); } else if (v instanceof InputMap) { InputMap imapVal = (InputMap) uidefs.get(keys[i]); } else { System.out.println("Unknown type"); } } }
}
</source>
How to change the look and feel of Swing applications
<source lang="java">
import java.awt.BorderLayout; import java.awt.GridLayout; import java.awt.event.ItemEvent; import java.awt.event.ItemListener; import javax.swing.ButtonGroup; import javax.swing.JButton; import javax.swing.JComboBox; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JPanel; import javax.swing.JRadioButton; import javax.swing.SwingConstants; import javax.swing.SwingUtilities; import javax.swing.UIManager; public class Main extends JFrame {
private String strings[] = { "Metal", "Motif", "Windows" }; private UIManager.LookAndFeelInfo looks[] = UIManager.getInstalledLookAndFeels(); private JRadioButton radio[] = new JRadioButton[strings.length]; private JButton button = new JButton("JButton"); private JLabel label= new JLabel("This is a Metal look-and-feel", SwingConstants.CENTER); private JComboBox comboBox = new JComboBox(strings); public Main() { JPanel northPanel = new JPanel(); northPanel.setLayout(new GridLayout(3, 1, 0, 5)); northPanel.add(label); northPanel.add(button); northPanel.add(comboBox); add(northPanel, BorderLayout.NORTH); JPanel southPanel = new JPanel(); ItemHandler handler = new ItemHandler(); southPanel.setLayout(new GridLayout(1, radio.length)); ButtonGroup group = new ButtonGroup(); for (int i = 0; i < radio.length; i++) { radio[i] = new JRadioButton(strings[i]); radio[i].addItemListener(handler); group.add(radio[i]); southPanel.add(radio[i]); } add(southPanel, BorderLayout.SOUTH); setSize(300, 200); setVisible(true); radio[0].setSelected(true); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); } private void changeTheLookAndFeel(int value) { try { UIManager.setLookAndFeel(looks[value].getClassName()); SwingUtilities.updateComponentTreeUI(this); } catch (Exception e) { e.printStackTrace(); } } public static void main(String args[]) { Main dx = new Main(); } private class ItemHandler implements ItemListener { public void itemStateChanged(ItemEvent e) { for (int i = 0; i < radio.length; i++) if (radio[i].isSelected()) { label.setText("This is a " + strings[i] + " look-and-feel"); comboBox.setSelectedIndex(i); changeTheLookAndFeel(i); } } }
}
</source>
Replaces the standard scrollbar UI with a custom one
<source lang="java">
//An example of modifying an existing L&F. //This example replaces thestandard scrollbar UI with a custom one. // import java.awt.Container; import java.awt.GridLayout; import java.io.FileReader; import java.io.IOException; import javax.swing.JComponent; import javax.swing.JFrame; import javax.swing.JScrollPane; import javax.swing.JTextArea; import javax.swing.UIManager; public class MetalModExample {
public static void main(String[] args) { try { UIManager.setLookAndFeel("javax.swing.plaf.metal.MetalLookAndFeel"); } catch (Exception e) { System.err.println("Metal is not available on this platform?!"); System.exit(1); } JComponent before = makeExamplePane(); UIManager.put("ScrollBarUI", "MyMetalScrollBarUI"); JComponent after = makeExamplePane(); JFrame f = new JFrame(); f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); Container c = f.getContentPane(); c.setLayout(new GridLayout(2, 1, 0, 1)); c.add(before); c.add(after); f.setSize(450, 400); f.setVisible(true); } public static JComponent makeExamplePane() { JTextArea text = new JTextArea(); try { text.read(new FileReader("MetalModExample.java"), null); } catch (IOException ex) { } JScrollPane scroll = new JScrollPane(text); return scroll; }
}
</source>
Retrieve information of all available UIManager defaults
<source lang="java">
import javax.swing.LookAndFeel; import javax.swing.UIManager; public class Main {
public static void main(String[] args) { System.out.println(" " + UIManager.getLookAndFeel().getName()); UIManager.LookAndFeelInfo[] inst = UIManager.getInstalledLookAndFeels(); for (int i = 0; i < inst.length; i++) { System.out.println(" " + inst[i].getName()); } LookAndFeel[] aux = UIManager.getAuxiliaryLookAndFeels(); if (aux != null) { for (int i = 0; i < aux.length; i++) { System.out.println(" " + aux[i].getName()); } } else { System.out.println(" <NONE>"); } System.out.println(" " + UIManager.getCrossPlatformLookAndFeelClassName()); System.out.println(" " + UIManager.getSystemLookAndFeelClassName()); }
}
</source>
Setting a UI Default Value That Is Created at Every Fetch
<source lang="java">
import java.util.Date; import javax.swing.UIDefaults; import javax.swing.UIManager; public class Main {
public static void main(String[] argv) { Object activeValue = new UIDefaults.ActiveValue() { public Object createValue(UIDefaults table) { return new Date(); } }; UIManager.put("key", activeValue); Date d1 = (Date) UIManager.get("key"); Date d2 = (Date) UIManager.get("key"); boolean b = d1.equals(d2); // false }
}
</source>
Setting a UI Default Value That Is Created When Fetched
<source lang="java">
import javax.swing.JPanel; import javax.swing.UIDefaults; import javax.swing.UIManager; public class Main {
public static void main(String[] argv) { Object lazyValue = new UIDefaults.LazyValue() { public Object createValue(UIDefaults table) { return new JPanel(); } }; UIManager.put("key", lazyValue); Object value = UIManager.get("key"); }
}
</source>
UIManager defaults
<source lang="java">
//An informational utility to print the various UIManager defaults. import javax.swing.LookAndFeel; import javax.swing.UIManager; public class UIManagerDefaults {
public static void main(String[] args) { System.out.println("Default L&F:"); System.out.println(" " + UIManager.getLookAndFeel().getName()); UIManager.LookAndFeelInfo[] inst = UIManager.getInstalledLookAndFeels(); System.out.println("Installed L&Fs: "); for (int i = 0; i < inst.length; i++) { System.out.println(" " + inst[i].getName()); } LookAndFeel[] aux = UIManager.getAuxiliaryLookAndFeels(); System.out.println("Auxiliary L&Fs: "); if (aux != null) { for (int i = 0; i < aux.length; i++) { System.out.println(" " + aux[i].getName()); } } else { System.out.println(" <NONE>"); } System.out.println("Cross-Platform:"); System.out.println(UIManager.getCrossPlatformLookAndFeelClassName()); System.out.println("System:"); System.out.println(UIManager.getSystemLookAndFeelClassName()); System.exit(0); }
}
</source>
UIManager resources to tweak the look of applications
<source lang="java">
//An example of using UIManager resources to tweak the look of applications. import java.awt.BorderLayout; import java.awt.Container; import java.awt.FlowLayout; import java.awt.Font; import javax.swing.BorderFactory; import javax.swing.ImageIcon; import javax.swing.JButton; import javax.swing.JDesktopPane; import javax.swing.JFrame; import javax.swing.JInternalFrame; import javax.swing.JLabel; import javax.swing.JPanel; import javax.swing.JScrollPane; import javax.swing.UIManager; import javax.swing.border.Border; import javax.swing.border.rupoundBorder; public class ResourceModExample {
public static void main(String[] args) { Border border = BorderFactory.createRaisedBevelBorder(); Border tripleBorder = new CompoundBorder(new CompoundBorder(border,border), border); UIManager.put("Button.border", tripleBorder); UIManager.put("InternalFrame.closeIcon", new ImageIcon("close.gif")); UIManager.put("InternalFrame.iconizeIcon", new ImageIcon("iconify.gif")); UIManager.put("InternalFrame.maximizeIcon", new ImageIcon("maximize.gif")); UIManager.put("InternalFrame.altMaximizeIcon", new ImageIcon("altMax.gif")); UIManager.put("InternalFrame.titleFont", new Font("Serif", Font.ITALIC,12)); UIManager.put("ScrollBar.width", new Integer(30)); JFrame f = new JFrame(); f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); Container c = f.getContentPane(); JDesktopPane desk = new JDesktopPane(); c.add(desk, BorderLayout.CENTER); JButton cut = new JButton("Cut"); JButton copy = new JButton("Copy"); JButton paste = new JButton("Paste"); JPanel p = new JPanel(new FlowLayout()); p.add(cut); p.add(copy); p.add(paste); c.add(p, BorderLayout.SOUTH); JInternalFrame inf = new JInternalFrame("MyFrame", true, true, true,true); JLabel l = new JLabel(new ImageIcon("luggage.jpeg")); JScrollPane scroll = new JScrollPane(l); inf.setContentPane(scroll); inf.setBounds(10, 10, 350, 280); desk.add(inf); inf.setVisible(true); f.setSize(380, 360); f.setVisible(true); }
}
</source>