📄 uiutils.java
字号:
/* * UIUtils.java * * Copyright (C) 2002, 2003, 2004, 2005, 2006 Takis Diakoumis * * This program 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 * of the License, or any later version. * * This program 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 this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * */package org.underworldlabs.swing.plaf;import com.sun.java.swing.plaf.motif.MotifLookAndFeel;import com.sun.java.swing.plaf.windows.WindowsLookAndFeel;import java.awt.Color;import java.awt.Component;import java.awt.Graphics;import java.io.Serializable;import javax.swing.Icon;import javax.swing.JMenuItem;import javax.swing.UIManager;import javax.swing.plaf.UIResource;import javax.swing.plaf.metal.MetalLookAndFeel;import javax.swing.plaf.metal.OceanTheme;import org.underworldlabs.swing.plaf.smoothgradient.SmoothGradientLookAndFeel;/* ---------------------------------------------------------- * CVS NOTE: Changes to the CVS repository prior to the * release of version 3.0.0beta1 has meant a * resetting of CVS revision numbers. * ---------------------------------------------------------- *//** * User interface utilities. Allows for central determination of * colours, icons etc. * * @author Takis Diakoumis * @version $Revision: 1.10 $ * @date $Date: 2006/09/05 11:57:53 $ */public class UIUtils { /** the active colour for text */ private static Color defaultActiveTextColour; /** the active colour for backgrounds */ private static Color defaultActiveBackgroundColour; /** the inactive colour for backgrounds */ private static Color defaultInactiveBackgroundColour; /** True if checked for windows yet. */ private static boolean checkedWindows; /** True if running on Windows. */ private static boolean isWindows; /** True if checked for mac yet. */ private static boolean checkedMac; /** True if running on Mac. */ private static boolean isMac; /** * Convenience method for consistent border colour. * * @return the system default border colour */ public static Color getDefaultBorderColour() { return UIManager.getColor("controlShadow"); } /** * Returns true if running on Mac. */ public static boolean isMac() { if (!checkedMac) { String osName = System.getProperty ("os.name"); if (osName != null && osName.indexOf("Mac") != -1) { isMac = true; } checkedMac = true; } return isMac; } /** * Returns true if running on Windows. */ public static boolean isWindows() { if (!checkedWindows) { String osName = System.getProperty ("os.name"); if (osName != null && osName.indexOf("Windows") != -1) { isWindows = true; } checkedWindows = true; } return isWindows; } /** * Returns whether the current applied look and feel is * the SmoothGradientLookAndFeel default look and feel. * * @return true | false */ public static boolean isDefaultLookAndFeel() { return (UIManager.getLookAndFeel() instanceof SmoothGradientLookAndFeel); //|| usingOcean(); } /** * Returns whether the current applied look and feel is * an instance of GTK look and feel. * * @return true | false */ public static boolean isGtkLookAndFeel() { if (isWindows() || isMac()) { return false; } return (UIManager.getLookAndFeel() instanceof com.sun.java.swing.plaf.gtk.GTKLookAndFeel); } /** * Returns whether the current applied look and feel is * the MetalLookAndFeel * * @return true | false */ public static boolean isMetalLookAndFeel() { return UIManager.getLookAndFeel() instanceof MetalLookAndFeel; } /** * Returns whether the current applied look and feel is * the MotifLookAndFeel * * @return true | false */ public static boolean isMotifLookAndFeel() { return UIManager.getLookAndFeel() instanceof MotifLookAndFeel; } /** * Returns whether the current applied look and feel is * the WindowsLookAndFeel * * @return true | false */ public static boolean isWindowsLookAndFeel() { return UIManager.getLookAndFeel() instanceof WindowsLookAndFeel; } /** * Returns true if we're using the Ocean Theme under the * MetalLookAndFeel. */ public static boolean usingOcean() { if (isMetalLookAndFeel()) { MetalLookAndFeel laf = (MetalLookAndFeel)UIManager.getLookAndFeel(); return (laf.getCurrentTheme() instanceof OceanTheme); } return false; } public static Color getDefaultInactiveBackgroundColour() { if (defaultInactiveBackgroundColour == null) { defaultInactiveBackgroundColour = UIManager.getColor("control"); } return defaultInactiveBackgroundColour; } public static Color getInverse(Color colour) { int red = 255 - colour.getRed(); int green = 255 - colour.getGreen(); int blue = 255 - colour.getBlue(); return new Color(red, green, blue); } public static Color getDefaultActiveBackgroundColour() { if (defaultActiveBackgroundColour == null) { if (!isWindowsLookAndFeel()) { Color color = UIManager.getColor("activeCaptionBorder"); if (color == null) { color = UIManager.getColor("controlShadow"); } defaultActiveBackgroundColour = getBrighter(color, 0.85); } else { defaultActiveBackgroundColour = UIManager.getColor("controlLtHighlight"); } } return defaultActiveBackgroundColour; } public static Color getDefaultActiveTextColour() { if (defaultActiveTextColour == null) { if (!isWindowsLookAndFeel()) { defaultActiveTextColour = UIManager.getColor("activeCaptionText"); if (defaultActiveTextColour == null) { // default to black text defaultActiveTextColour = Color.BLACK; } } else { defaultActiveTextColour = UIManager.getColor("controlText"); } } return defaultActiveTextColour; } public static Color getDarker(Color color, double factor) { return new Color(Math.max((int)(color.getRed() * factor), 0), Math.max((int)(color.getGreen() * factor), 0), Math.max((int)(color.getBlue() * factor), 0)); } public static Color getBrighter(Color color, double factor) { int r = color.getRed(); int g = color.getGreen(); int b = color.getBlue(); int i = (int)(1.0/(1.0-factor)); if ( r == 0 && g == 0 && b == 0) { return new Color(i, i, i); } if ( r > 0 && r < i ) r = i; if ( g > 0 && g < i ) g = i; if ( b > 0 && b < i ) b = i; return new Color(Math.min((int)(r/factor), 255), Math.min((int)(g/factor), 255), Math.min((int)(b/factor), 255)); } // Cached Access to Icons *********************************************************** private static Icon checkBoxIcon; private static Icon checkBoxMenuItemIcon; private static Icon radioButtonMenuItemIcon; private static Icon menuArrowIcon; private static Icon expandedTreeIcon; private static Icon collapsedTreeIcon; /** * Answers an <code>Icon</code> used for <code>JCheckBox</code>es. */ /* static Icon getCheckBoxIcon() { if (checkBoxIcon == null) { checkBoxIcon = new CheckBoxIcon(); } return checkBoxIcon; } */ /** * Answers an <code>Icon</code> used for <code>JCheckButtonMenuItem</code>s. */ static Icon getCheckBoxMenuItemIcon() { if (checkBoxMenuItemIcon == null) { checkBoxMenuItemIcon = new CheckBoxMenuItemIcon(); } return checkBoxMenuItemIcon; } /** * Answers an <code>Icon</code> used for <code>JRadioButtonMenuItem</code>s. */ /* static Icon getRadioButtonMenuItemIcon() { if (radioButtonMenuItemIcon == null) { radioButtonMenuItemIcon = new RadioButtonMenuItemIcon(); } return radioButtonMenuItemIcon; } */ /** * Answers an <code>Icon</code> used for arrows in <code>JMenu</code>s. */ /* static Icon getMenuArrowIcon() { if (menuArrowIcon == null) { menuArrowIcon = new MenuArrowIcon(); } return menuArrowIcon; } */ /** * Answers an <code>Icon</code> used in <code>JTree</code>s. */ public static Icon getExpandedTreeIcon() { if (expandedTreeIcon == null) { expandedTreeIcon = new ExpandedTreeIcon(); } return expandedTreeIcon; } /** * Answers an <code>Icon</code> used in <code>JTree</code>s. */ public static Icon getCollapsedTreeIcon() { if (collapsedTreeIcon == null) { collapsedTreeIcon = new CollapsedTreeIcon(); } return collapsedTreeIcon; } private static class CheckBoxMenuItemIcon implements Icon, UIResource, Serializable { private static final int SIZE = 13; public int getIconWidth() { return SIZE; } public int getIconHeight() { return SIZE; } public void paintIcon(Component c, Graphics g, int x, int y) { JMenuItem b = (JMenuItem) c; if (b.isSelected()) { drawCheck(g, x, y + 1); } } } // Helper method utilized by the CheckBoxIcon and the CheckBoxMenuItemIcon. private static void drawCheck(Graphics g, int x, int y) { g.translate(x, y); g.drawLine(3, 5, 3, 5); g.fillRect(3, 6, 2, 2); g.drawLine(4, 8, 9, 3); g.drawLine(5, 8, 9, 4); g.drawLine(5, 9, 9, 5); g.translate(-x, -y); } /** * The minus sign button icon used in trees */ private static class ExpandedTreeIcon implements Icon, Serializable { protected static final int SIZE = 9; protected static final int HALF_SIZE = 4; public void paintIcon(Component c, Graphics g, int x, int y) { Color backgroundColor = c.getBackground(); g.setColor(backgroundColor != null ? backgroundColor : Color.white); g.fillRect(x, y, SIZE - 1, SIZE - 1); g.setColor(Color.gray); g.drawRect(x, y, SIZE - 1, SIZE - 1); g.setColor(Color.black); g.drawLine(x + 2, y + HALF_SIZE, x + (SIZE - 3), y + HALF_SIZE); } public int getIconWidth() { return SIZE; } public int getIconHeight() { return SIZE; } } /** * The plus sign button icon used in trees. */ private static class CollapsedTreeIcon extends ExpandedTreeIcon { public void paintIcon(Component c, Graphics g, int x, int y) { super.paintIcon(c, g, x, y); g.drawLine(x + HALF_SIZE, y + 2, x + HALF_SIZE, y + (SIZE - 3)); } } private UIUtils() {}}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -