Java/Swing JFC/GUI Utilities
Содержание
- 1 A utility class to tune the Metal look and feel.
- 2 AWT Utilities
- 3 Calculates preferred max height for the given components without checking isVisible
- 4 Calculates preferred max width for the given components without checking isVisible
- 5 Center On Screen
- 6 Center window
- 7 Center Within Parent
- 8 Computes the center point of the current screen device.
- 9 Computes the maximum bounds of the current screen device. If this method is called on JDK 1.4, Xinerama-aware results are returned.
- 10 Get Point For Centering
- 11 Get Point For Staggering
- 12 Is Focusable
- 13 Loading the given image
- 14 Positions the specified dialog at a position relative to its parent.
- 15 Positions the specified frame at a random location on the screen while ensuring that the
- 16 Positions the specified frame at a relative position in the screen, where 50% is considered to be the center of the screen.
- 17 Positions the specified frame in the middle of the screen.
- 18 Press a key pragmatically
- 19 Renders a component into an image
- 20 Set All Opaque
- 21 Set Frame Location Relative To
- 22 Set Wait Cursor
- 23 Shadow Popup Border
- 24 Unit conversions
- 25 Unit measure
- 26 Utilities for GUI work.
A utility class to tune the Metal look and feel.
<source lang="java">
/*
* JCommon : a free general purpose class library for the Java(tm) platform * * * (C) Copyright 2000-2005, by Object Refinery Limited and Contributors. * * Project Info: http://www.jfree.org/jcommon/index.html * * This library is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation; either version 2.1 of the License, or * (at your option) any later version. * * This library 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 Lesser General Public * License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, * USA. * * [Java is a trademark or registered trademark of Sun Microsystems, Inc. * in the United States and other countries.] * * ---------------- * UIUtilities.java * ---------------- * (C) Copyright 2002-2005, by Object Refinery Limited. * * Original Author: Thomas Morgner (for Object Refinery Limited); * Contributor(s): -; * * $Id: UIUtilities.java,v 1.7 2007/11/02 17:50:36 taqua Exp $ * * Changes: * -------- * 25-Jul-2002 : Version 1 (TM); */
import java.awt.Color; import javax.swing.UIDefaults; import javax.swing.UIManager; import javax.swing.border.EmptyBorder; import javax.swing.border.EtchedBorder; import javax.swing.border.MatteBorder; import javax.swing.plaf.BorderUIResource; /**
* A utility class to tune the Metal look and feel. * * @author Thomas Morgner */
public class UIUtilities {
/** * Set up the user interface. */ public static void setupUI() { try { final String classname = UIManager.getSystemLookAndFeelClassName(); UIManager.setLookAndFeel(classname); } catch (Exception e) { e.printStackTrace(); } final UIDefaults defaults = UIManager.getDefaults(); defaults.put("PopupMenu.border", new BorderUIResource.EtchedBorderUIResource( EtchedBorder.RAISED, defaults.getColor("controlShadow"), defaults .getColor("controlLtHighlight"))); final MatteBorder matteborder = new MatteBorder(1, 1, 1, 1, Color.black); final EmptyBorder emptyborder = new MatteBorder(2, 2, 2, 2, defaults.getColor("control")); final BorderUIResource.rupoundBorderUIResource compBorder = new BorderUIResource.rupoundBorderUIResource( emptyborder, matteborder); final BorderUIResource.EmptyBorderUIResource emptyBorderUI = new BorderUIResource.EmptyBorderUIResource( 0, 0, 0, 0); defaults.put("SplitPane.border", emptyBorderUI); defaults.put("Table.scrollPaneBorder", emptyBorderUI); defaults.put("ComboBox.border", compBorder); defaults.put("TextField.border", compBorder); defaults.put("TextArea.border", compBorder); defaults.put("CheckBox.border", compBorder); defaults.put("ScrollPane.border", emptyBorderUI); }
}
</source>
AWT Utilities
<source lang="java">
/**
* The utillib library. * More information is available at http://www.jinchess.ru/. * Copyright (C) 2002, 2003 Alexander Maryanovsky. * All rights reserved. * * The utillib library is free software; you can redistribute * it and/or modify it under the terms of the GNU Lesser General Public License * as published by the Free Software Foundation; either version 2 of the * License, or (at your option) any later version. * * The utillib library 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 Lesser * General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with utillib library; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */
import java.awt.*; import java.lang.reflect.*;
/**
* A collection of AWT related utilities. */
public class AWTUtilities{
/** * Packs and centers the given window relative to the given component. The * specified component may benull
, in which case the window will * be centered on the screen. The method also makes sure that the target * window is fully visible by callingforceToScreen
. */ public static void centerWindow(Window target, Component parent){ target.pack(); Dimension size = target.getSize(); Rectangle parentBounds = parent == null || !parent.isShowing() ? getUsableScreenBounds() : new Rectangle(parent.getLocationOnScreen(), parent.getSize()); target.setLocation(parentBounds.x + (parentBounds.width - size.width)/2, parentBounds.y + (parentBounds.height - size.height)/2); forceToScreen(target); } /** * Reposition the specified window so that it necessarily fits on the screen, * while trying to minimize changes. */ public static void forceToScreen(Window window){ Dimension screenSize = window.getToolkit().getScreenSize(); Rectangle bounds = window.getBounds(); bounds.width = Math.min(bounds.width, screenSize.width); bounds.height = Math.min(bounds.height, screenSize.height); bounds.x = Math.min(Math.max(bounds.x, 0), screenSize.width - bounds.width); bounds.y = Math.min(Math.max(bounds.y, 0), screenSize.height - bounds.height); window.setBounds(bounds); }
/** * Returns the parent Frame of the specifiedComponent
or *null
if none exists. */ public static Frame frameForComponent(Component component){ while (component != null){ if (component instanceof Frame) return (Frame)component; component = component.getParent(); } return null; }
/** * Returns a list of available font names. Under JDK1.1 it uses *Toolkit.getFontList()
while under JDK1.2 (via reflection), *GraphicsEnvironment.getAvailableFontFamilyNames()
*/ public static String [] getAvailableFontNames(){ if (PlatformUtils.isJavaBetterThan("1.2")){ try{ // The equivalent of "return GraphicsEnvironment.getLocalGraphicsEnvironment().getAvailableFontFamilyNames();" Class geClass = Class.forName("java.awt.GraphicsEnvironment"); Method getLocalGraphicsEnvironmentMethod = geClass.getMethod("getLocalGraphicsEnvironment", new Class[0]); Object localGE = getLocalGraphicsEnvironmentMethod.invoke(null, new Object[0]); Method getAvailableFontFamilyNamesMethod = geClass.getMethod("getAvailableFontFamilyNames", new Class[0]); String [] fontNames = (String [])getAvailableFontFamilyNamesMethod.invoke(localGE, new Object[0]); return fontNames; } catch (ClassNotFoundException e){e.printStackTrace();} catch (NoSuchMethodException e){e.printStackTrace();} catch (IllegalAccessException e){e.printStackTrace();} catch (InvocationTargetException e){e.printStackTrace();} return null; } else return Toolkit.getDefaultToolkit().getFontList(); } /** * Returns the state of the specified frame, as specified by *Frame.getExtendedState()
if running under JDK 1.4 or later, * otherwise returns 0. The call toFrame.getExtendedState()
is * done via reflection to avoid runtime errors. */ public static int getExtendedFrameState(Frame frame){ if (PlatformUtils.isJavaBetterThan("1.4")){ try{ Class frameClass = Class.forName("java.awt.Frame"); Method getExtendedStateMethod = frameClass.getMethod("getExtendedState", new Class[0]); Integer state = (Integer)getExtendedStateMethod.invoke(frame, new Object[0]); return state.intValue(); } catch (ClassNotFoundException e){e.printStackTrace();} catch (NoSuchMethodException e){e.printStackTrace();} catch (IllegalAccessException e){e.printStackTrace();} catch (InvocationTargetException e){e.printStackTrace();} } return 0; } /** * Sets the state of the specified frame, as specified by *Frame.setExtendedState
if running in JDK 1.4 or later, * otherwise does nothing. The call toFrame.setExtendedState()
* is done via reflection to avoid runtime errors. */ public static void setExtendedFrameState(Frame frame, int state){ if (PlatformUtils.isJavaBetterThan("1.4")){ try{ Class frameClass = Class.forName("java.awt.Frame"); Method setExtendedStateMethod = frameClass.getMethod("setExtendedState", new Class[]{int.class}); setExtendedStateMethod.invoke(frame, new Object[]{new Integer(state)}); } catch (ClassNotFoundException e){e.printStackTrace();} catch (NoSuchMethodException e){e.printStackTrace();} catch (IllegalAccessException e){e.printStackTrace();} catch (InvocationTargetException e){e.printStackTrace();} } } /** * Attempts to determine the usable screen bounds of the default screen * device. If the require java.awt API is not available under the JVM we"re * running in, this will simply return the screen bounds obtained via *Toolkit.getScreenSize()
. */ public static Rectangle getUsableScreenBounds(){ if (PlatformUtils.isJavaBetterThan("1.4")){ try{ Class graphicsEnvironmentClass = Class.forName("java.awt.GraphicsEnvironment"); Class graphicsDeviceClass = Class.forName("java.awt.GraphicsDevice"); Class graphicsConfigurationClass = Class.forName("java.awt.GraphicsConfiguration"); Class [] emptyClassArr = new Class[0]; Method getLocalGraphicsEnvironmentMethod = graphicsEnvironmentClass.getMethod("getLocalGraphicsEnvironment", emptyClassArr); Method getDefaultScreenDeviceMethod = graphicsEnvironmentClass.getMethod("getDefaultScreenDevice", emptyClassArr); Method getDefaultConfigurationMethod = graphicsDeviceClass.getMethod("getDefaultConfiguration", emptyClassArr); Method getBoundsMethod = graphicsConfigurationClass.getMethod("getBounds", emptyClassArr); Method getScreenInsetsMethod = Toolkit.class.getMethod("getScreenInsets", new Class[]{graphicsConfigurationClass}); Object [] emptyObjArr = new Object[0]; Object graphicsEnvironment = getLocalGraphicsEnvironmentMethod.invoke(null, emptyObjArr); Object defaultScreenDevice = getDefaultScreenDeviceMethod.invoke(graphicsEnvironment, emptyObjArr); Object defaultConfiguration = getDefaultConfigurationMethod.invoke(defaultScreenDevice, emptyObjArr); Rectangle bounds = (Rectangle)getBoundsMethod.invoke(defaultConfiguration, emptyObjArr); Insets insets = (Insets)getScreenInsetsMethod.invoke(Toolkit.getDefaultToolkit(), new Object[]{defaultConfiguration}); bounds.x += insets.left; bounds.y += insets.top; bounds.width -= insets.left + insets.right; bounds.height -= insets.top + insets.bottom; return bounds; } catch (ClassNotFoundException e){e.printStackTrace();} catch (SecurityException e){e.printStackTrace();} catch (NoSuchMethodException e){e.printStackTrace();} catch (IllegalArgumentException e){e.printStackTrace();} catch (IllegalAccessException e){e.printStackTrace();} catch (InvocationTargetException e){e.printStackTrace();} } return new Rectangle(new Point(0, 0), Toolkit.getDefaultToolkit().getScreenSize()); } /** * Enables or disables all the components within the specified container. * * This is a rather hacky method - it doesn"t work well if there are both * enabled and disabled components in the container. */ public static void setContainerEnabled(Container container, boolean enabled){ Component [] children = container.getComponents(); for (int i = 0; i < children.length; i++){ Component child = children[i]; child.setEnabled(enabled); if (child instanceof Container) setContainerEnabled((Container)child, enabled); } }
} /**
* The utillib library. * More information is available at http://www.jinchess.ru/. * Copyright (C) 2004 Alexander Maryanovsky. * All rights reserved. * * The utillib library is free software; you can redistribute * it and/or modify it under the terms of the GNU Lesser General Public License * as published by the Free Software Foundation; either version 2 of the * License, or (at your option) any later version. * * The utillib library 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 Lesser * General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with utillib library; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */
/**
* A class which contains various platform specific utilities. */ class PlatformUtils{ /** * Returns whether the version of Java we"re running in is higher than or * equal to the specified version. */ public static boolean isJavaBetterThan(String ver){ return System.getProperty("java.version").rupareTo(ver) >= 0; } /** * Returns whether we"re running under the old (just in case there"s ever a * new one) Microsoft VM. */ public static boolean isOldMicrosoftVM(){ String vendor = System.getProperty("java.vendor"); return (vendor != null) && vendor.toLowerCase().startsWith("microsoft") && !isJavaBetterThan("1.2"); } /** * Returns whether we"re running under Windows. */ public static boolean isWindows(){ String os = System.getProperty("os.name"); return (os != null) && os.toLowerCase().startsWith("windows"); } /** * Returns whether we"re running under Windows 95/98/ME. */ public static boolean isOldWindows(){ String os = System.getProperty("os.name"); return isWindows() && (System.getProperty("os.version").rupareTo("5.0") < 0) && !os.toLowerCase().startsWith("windows nt"); } /** * Returns whether we"re running under Linux. */ public static boolean isLinux(){ String os = System.getProperty("os.name"); return (os != null) && os.toLowerCase().startsWith("linux"); } /** * Returns whether we"re running under Mac OS. */ public static boolean isMacOS(){ String os = System.getProperty("os.name"); return (os != null) && os.toLowerCase().startsWith("mac"); } /** * Returns whether we"re running under Mac OS X. */ public static boolean isMacOSX(){ String os = System.getProperty("os.name"); return (os != null) && os.toLowerCase().startsWith("mac os x"); } /** * Returns whether we"re running under Solaris. */ public static boolean isSolaris(){ String os = System.getProperty("os.name"); return (os != null) && (os.toLowerCase().startsWith("solaris") || os.toLowerCase().startsWith("sunos")); } /** * Returns the name of the OS we"re running on, out of the specified list:*
-
*
- windows *
- linux *
- macosx *
- solaris *
*
* Returns null
if we"re running on an OS which is not in the
* above list.
*/
public static String getOSName(){
if (isWindows() || isOldWindows())
return "windows";
else if (isLinux())
return "linux";
else if (isMacOSX())
return "macosx";
else if (isSolaris())
return "solaris";
else
return null;
}
}
</source>
Calculates preferred max height for the given components without checking isVisible
<source lang="java">
import java.awt.ruponent; /**
* Copyright (C) 2004 NNL Technology AB * Visit www.infonode.net for information about InfoNode(R) * products and how to contact NNL Technology AB. * * 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 (at your option) 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. */
// $Id: ComponentUtil.java,v 1.25 2005/12/04 13:46:04 jesper Exp $
public class Util {
/** * Calculates preferred max height for the given components without checking * isVisible. * * @param components Components to check * @return max height */ public static int getPreferredMaxHeight(Component[] components) { int height = 0; for (int i = 0; i < components.length; i++) { int k = (int) components[i].getPreferredSize().getHeight(); if (k > height) height = k; } return height; }
}
</source>
Calculates preferred max width for the given components without checking isVisible
<source lang="java">
import java.awt.ruponent; /**
* Copyright (C) 2004 NNL Technology AB * Visit www.infonode.net for information about InfoNode(R) * products and how to contact NNL Technology AB. * * 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 (at your option) 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. */
// $Id: ComponentUtil.java,v 1.25 2005/12/04 13:46:04 jesper Exp $
public class Util {
/** * Calculates preferred max width for the given components without checking * isVisible. * * @param components Components to check * @return max width */ public static int getPreferredMaxWidth(Component[] components) { int width = 0; for (int i = 0; i < components.length; i++) { int k = (int) components[i].getPreferredSize().getWidth(); if (k > width) width = k; } return width; }
}
</source>
Center On Screen
<source lang="java">
/***
* Image/J Plugins * Copyright (C) 2002-2004 Jarek Sacha * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library 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 * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * * Latest release available at http://sourceforge.net/projects/ij-plugins/ */
import java.awt.*; /**
* @author Jarek Sacha * @version $Revision: 1.2 $ */
public class SwingUtils {
public static void centerOnScreen(Window window, boolean packFrame) { //Validate frames that have preset sizes //Pack frames that have useful preferred size info, e.g. from their layout if (packFrame) { window.pack(); } else { window.validate(); } //Center the frame window Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize(); Dimension frameSize = window.getSize(); if (frameSize.height > screenSize.height) { frameSize.height = screenSize.height; } if (frameSize.width > screenSize.width) { frameSize.width = screenSize.width; } window.setLocation((screenSize.width - frameSize.width) / 2, (screenSize.height - frameSize.height) / 2); }
}
</source>
Center window
<source lang="java">
/*
* Copyright (c) 1998-2002 Carnegie Mellon University. All rights * reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * 2. 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. * * THIS SOFTWARE IS PROVIDED BY CARNEGIE MELLON UNIVERSITY ``AS IS"" AND * ANY EXPRESSED 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 CARNEGIE MELLON UNIVERSITY * NOR ITS EMPLOYEES 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.*; public abstract class Win {
public static void center (Window window, Component ref) { position (window, ref, 0.5, 0.5); } public static void position (Window frame, Component ref, double xfrac, double yfrac) { Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize(); Dimension size = frame.getSize(); Dimension refSize = (ref != null) ? ref.getSize() : screenSize; Point origin = (ref != null) ? ref.getLocationOnScreen () : new Point (0, 0); int x = origin.x + relativePoint (xfrac, refSize.width, size.width); int y = origin.y + relativePoint (yfrac, refSize.height, size.height); // make sure frame is entirely on screen x = Math.max (0, Math.min (screenSize.width - size.width, x)); y = Math.max (0, Math.min (screenSize.height - size.height, y)); frame.setLocation (x, y); } static int relativePoint (double frac, int parentLength, int childLength) { if (frac < 0) return (int) (frac * childLength); else if (frac > 1) return (int) (parentLength + (frac - 2) * childLength); else return (int) (frac * (parentLength - childLength)); }
public static Frame findFrame (Component comp) { for (; comp!=null; comp = comp.getParent ()) if (comp instanceof Frame) { return (Frame)comp; } return null; } public static Frame findFrameOrMakeFrame (Component parent) { return (parent != null) ? findFrame (parent) : new Frame (); }
}
</source>
Center Within Parent
<source lang="java">
/*
* Copyright (C) 2001-2004 Colin Bell * colbell@users.sourceforge.net * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library 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 * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */
import java.awt.ruponent; import java.awt.Container; import java.awt.Dimension; import java.awt.FontMetrics; import java.awt.Frame; import java.awt.GraphicsConfiguration; import java.awt.GraphicsDevice; import java.awt.GraphicsEnvironment; import java.awt.Insets; import java.awt.Point; import java.awt.Rectangle; import java.awt.Toolkit; import java.awt.Window; import java.awt.geom.Rectangle2D; import java.beans.PropertyVetoException; import java.util.ArrayList; import java.util.Iterator; import java.util.List; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JInternalFrame; import javax.swing.SwingUtilities; /**
* Common GUI utilities accessed via static methods. * * @author */
public class GUIUtils {
private static JFrame _mainFrame; /** * Centerswind
within its parent. If it has no parent then * center within the screen. If centering would cause the title bar to go * above the parent (I.E. cannot see the titlebar and so cannot move the * window) then move the window down. * * @param wind * The Window to be centered. * * @throws IllegalArgumentException * If wind is null. */ public static void centerWithinParent(Window wind) { if (wind == null) { throw new IllegalArgumentException("null Window passed"); } final Container parent = wind.getParent(); if (parent != null && parent.isVisible()) { center(wind, new Rectangle(parent.getLocationOnScreen(), parent.getSize())); } else { centerWithinScreen(wind); } } /** * Centers passed internal frame within its desktop area. If centering would * cause the title bar to go off the top of the screen then move the window * down. * * @param frame * The internal frame to be centered. * * @throws IllegalArgumentException * If frame is null. */ public static void centerWithinDesktop(JInternalFrame frame) { if (frame == null) { throw new IllegalArgumentException("null JInternalFrame passed"); } final Container parent = frame.getDesktopPane(); if (parent != null && parent.isVisible()) { center(frame, new Rectangle(new Point(0, 0), parent.getSize())); } } /** * Centerswind
within the screen. If centering would cause the * title bar to go off the top of the screen then move the window down. * * @param wind * The Window to be centered. * * @throws IllegalArgumentException * If wind is null. */ public static void centerWithinScreen(Window wind) { if (wind == null) { throw new IllegalArgumentException("null Window passed"); } final Toolkit toolKit = Toolkit.getDefaultToolkit(); final Rectangle rcScreen = new Rectangle(toolKit.getScreenSize()); final Dimension windSize = wind.getSize(); final Dimension parentSize = new Dimension(rcScreen.width, rcScreen.height); if (windSize.height > parentSize.height) { windSize.height = parentSize.height; } if (windSize.width > parentSize.width) { windSize.width = parentSize.width; } center(wind, rcScreen); } /** * Centerswind
within the passed rectangle. * * @param wind * The Window to be centered. * @param rect * The rectangle (in screen coords) to centerwind
* within. * * @throws IllegalArgumentException * If Window or Rectangle is null. */ private static void center(Component wind, Rectangle rect) { if (wind == null || rect == null) { throw new IllegalArgumentException("null Window or Rectangle passed"); } Dimension windSize = wind.getSize(); int x = ((rect.width - windSize.width) / 2) + rect.x; int y = ((rect.height - windSize.height) / 2) + rect.y; if (y < rect.y) { y = rect.y; } wind.setLocation(x, y); }
}
</source>
Computes the center point of the current screen device.
<source lang="java">
/*
* JCommon : a free general purpose class library for the Java(tm) platform * * * (C) Copyright 2000-2005, by Object Refinery Limited and Contributors. * * Project Info: http://www.jfree.org/jcommon/index.html * * This library is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation; either version 2.1 of the License, or * (at your option) any later version. * * This library 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 Lesser General Public * License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, * USA. * * [Java is a trademark or registered trademark of Sun Microsystems, Inc. * in the United States and other countries.] * * ---------------------- * RefineryUtilities.java * ---------------------- * (C) Copyright 2000-2005, by Object Refinery Limited. * * Original Author: David Gilbert (for Object Refinery Limited); * Contributor(s): Jon Iles; * * $Id: RefineryUtilities.java,v 1.11 2007/11/02 17:50:36 taqua Exp $ * * Changes (from 26-Oct-2001) * -------------------------- * 26-Oct-2001 : Changed package to com.jrefinery.ui.*; * 26-Nov-2001 : Changed name to SwingRefinery.java to make it obvious that this is not part of * the Java APIs (DG); * 10-Dec-2001 : Changed name (again) to JRefineryUtilities.java (DG); * 28-Feb-2002 : Moved system properties classes into com.jrefinery.ui.about (DG); * 19-Apr-2002 : Renamed JRefineryUtilities-->RefineryUtilities. Added drawRotatedString() * method (DG); * 21-May-2002 : Changed frame positioning methods to accept Window parameters, as suggested by * Laurence Vanhelsuwe (DG); * 27-May-2002 : Added getPointInRectangle method (DG); * 26-Jun-2002 : Removed unnecessary imports (DG); * 12-Jul-2002 : Added workaround for rotated text (JI); * 14-Oct-2002 : Fixed errors reported by Checkstyle (DG); * 08-May-2003 : Added a new drawRotatedString() method (DG); * 09-May-2003 : Added a drawRotatedShape() method (DG); * 10-Jun-2003 : Updated aligned and rotated string methods (DG); * 29-Oct-2003 : Added workaround for font alignment in PDF output (DG); * 07-Nov-2003 : Added rotateShape() method (DG); * 16-Mar-2004 : Moved rotateShape() method to ShapeUtils.java (DG); * 07-Apr-2004 : Modified text bounds calculation with TextUtilities.getTextBounds() (DG); * 21-May-2004 : Fixed bug 951870 - precision in drawAlignedString() method (DG); * 30-Sep-2004 : Deprecated and moved a number of methods to the TextUtilities class (DG); * 04-Oct-2004 : Renamed ShapeUtils --> ShapeUtilities (DG); * 11-Jan-2005 : Removed deprecated code in preparation for the 1.0.0 release (DG); * */
import java.awt.Dimension; import java.awt.GraphicsEnvironment; import java.awt.Point; import java.awt.Rectangle; import java.awt.Toolkit; import java.lang.reflect.Method; /**
* * * @author David Gilbert */
public class Main{
/** * Computes the center point of the current screen device. If this method is called on JDK 1.4, Xinerama-aware * results are returned. (See Sun-Bug-ID 4463949 for details). * * @return the center point of the current screen. */ public static Point getCenterPoint () { final GraphicsEnvironment localGraphicsEnvironment = GraphicsEnvironment.getLocalGraphicsEnvironment(); try { final Method method = GraphicsEnvironment.class.getMethod("getCenterPoint", (Class[]) null); return (Point) method.invoke(localGraphicsEnvironment, (Object[]) null); } catch(Exception e) { // ignore ... will fail if this is not a JDK 1.4 .. } final Dimension s = Toolkit.getDefaultToolkit().getScreenSize(); return new Point (s.width / 2, s.height / 2); } /** * Computes the maximum bounds of the current screen device. If this method is called on JDK 1.4, Xinerama-aware * results are returned. (See Sun-Bug-ID 4463949 for details). * * @return the maximum bounds of the current screen. */ public static Rectangle getMaximumWindowBounds () { final GraphicsEnvironment localGraphicsEnvironment = GraphicsEnvironment.getLocalGraphicsEnvironment(); try { final Method method = GraphicsEnvironment.class.getMethod("getMaximumWindowBounds", (Class[]) null); return (Rectangle) method.invoke(localGraphicsEnvironment, (Object[]) null); } catch(Exception e) { // ignore ... will fail if this is not a JDK 1.4 .. } final Dimension s = Toolkit.getDefaultToolkit().getScreenSize(); return new Rectangle (0, 0, s.width, s.height); }
}
</source>
Computes the maximum bounds of the current screen device. If this method is called on JDK 1.4, Xinerama-aware results are returned.
<source lang="java">
/*
* JCommon : a free general purpose class library for the Java(tm) platform * * * (C) Copyright 2000-2005, by Object Refinery Limited and Contributors. * * Project Info: http://www.jfree.org/jcommon/index.html * * This library is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation; either version 2.1 of the License, or * (at your option) any later version. * * This library 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 Lesser General Public * License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, * USA. * * [Java is a trademark or registered trademark of Sun Microsystems, Inc. * in the United States and other countries.] * * ---------------------- * RefineryUtilities.java * ---------------------- * (C) Copyright 2000-2005, by Object Refinery Limited. * * Original Author: David Gilbert (for Object Refinery Limited); * Contributor(s): Jon Iles; * * $Id: RefineryUtilities.java,v 1.11 2007/11/02 17:50:36 taqua Exp $ * * Changes (from 26-Oct-2001) * -------------------------- * 26-Oct-2001 : Changed package to com.jrefinery.ui.*; * 26-Nov-2001 : Changed name to SwingRefinery.java to make it obvious that this is not part of * the Java APIs (DG); * 10-Dec-2001 : Changed name (again) to JRefineryUtilities.java (DG); * 28-Feb-2002 : Moved system properties classes into com.jrefinery.ui.about (DG); * 19-Apr-2002 : Renamed JRefineryUtilities-->RefineryUtilities. Added drawRotatedString() * method (DG); * 21-May-2002 : Changed frame positioning methods to accept Window parameters, as suggested by * Laurence Vanhelsuwe (DG); * 27-May-2002 : Added getPointInRectangle method (DG); * 26-Jun-2002 : Removed unnecessary imports (DG); * 12-Jul-2002 : Added workaround for rotated text (JI); * 14-Oct-2002 : Fixed errors reported by Checkstyle (DG); * 08-May-2003 : Added a new drawRotatedString() method (DG); * 09-May-2003 : Added a drawRotatedShape() method (DG); * 10-Jun-2003 : Updated aligned and rotated string methods (DG); * 29-Oct-2003 : Added workaround for font alignment in PDF output (DG); * 07-Nov-2003 : Added rotateShape() method (DG); * 16-Mar-2004 : Moved rotateShape() method to ShapeUtils.java (DG); * 07-Apr-2004 : Modified text bounds calculation with TextUtilities.getTextBounds() (DG); * 21-May-2004 : Fixed bug 951870 - precision in drawAlignedString() method (DG); * 30-Sep-2004 : Deprecated and moved a number of methods to the TextUtilities class (DG); * 04-Oct-2004 : Renamed ShapeUtils --> ShapeUtilities (DG); * 11-Jan-2005 : Removed deprecated code in preparation for the 1.0.0 release (DG); * */
import java.awt.Container; import java.awt.Dialog; import java.awt.Dimension; import java.awt.GraphicsEnvironment; import java.awt.Rectangle; import java.awt.Toolkit; import java.lang.reflect.Method; /**
* * * @author David Gilbert */
public class Main{
/** * Positions the specified dialog at a position relative to its parent. * * @param dialog the dialog to be positioned. * @param horizontalPercent the relative location. * @param verticalPercent the relative location. */ public static void positionDialogRelativeToParent(final Dialog dialog, final double horizontalPercent, final double verticalPercent) { final Dimension d = dialog.getSize(); final Container parent = dialog.getParent(); final Dimension p = parent.getSize(); final int baseX = parent.getX() - d.width; final int baseY = parent.getY() - d.height; final int w = d.width + p.width; final int h = d.height + p.height; int x = baseX + (int) (horizontalPercent * w); int y = baseY + (int) (verticalPercent * h); // make sure the dialog fits completely on the screen... final Rectangle s = getMaximumWindowBounds(); x = Math.min(x, (s.width - d.width)); x = Math.max(x, 0); y = Math.min(y, (s.height - d.height)); y = Math.max(y, 0); dialog.setBounds(x + s.x, y + s.y, d.width, d.height); } /** * Computes the maximum bounds of the current screen device. If this method is called on JDK 1.4, Xinerama-aware * results are returned. (See Sun-Bug-ID 4463949 for details). * * @return the maximum bounds of the current screen. */ public static Rectangle getMaximumWindowBounds () { final GraphicsEnvironment localGraphicsEnvironment = GraphicsEnvironment.getLocalGraphicsEnvironment(); try { final Method method = GraphicsEnvironment.class.getMethod("getMaximumWindowBounds", (Class[]) null); return (Rectangle) method.invoke(localGraphicsEnvironment, (Object[]) null); } catch(Exception e) { // ignore ... will fail if this is not a JDK 1.4 .. } final Dimension s = Toolkit.getDefaultToolkit().getScreenSize(); return new Rectangle (0, 0, s.width, s.height); }
}
</source>
Get Point For Centering
<source lang="java">
/*
* $Id: WindowUtils.java,v 1.16 2009/05/25 16:37:52 kschaefe Exp $ * * Copyright 2004 Sun Microsystems, Inc., 4150 Network Circle, * Santa Clara, California 95054, U.S.A. All rights reserved. * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library 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 * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */
import java.awt.GraphicsConfiguration; import java.awt.GraphicsEnvironment; import java.awt.Insets; import java.awt.Point; import java.awt.Rectangle; import java.awt.Toolkit; import java.awt.Window; /**
* Encapsulates various utilities for windows (ie:Frame
and *Dialog
objects and descendants, in particular). * * @author Richard Bair */
public class Utils {
public static Point getPointForCentering(Window window) { Rectangle usableBounds = getUsableDeviceBounds(window); int screenWidth = usableBounds.width; int screenHeight = usableBounds.height; int width = window.getWidth(); int height = window.getHeight(); return new Point(((screenWidth - width) / 2) + usableBounds.x, ((screenHeight - height) / 2) + usableBounds.y);
}
/***
* Returns the Point
at which a window should be placed to
* center that window on the screen.
*
* Some thought was taken as to whether to implement a method such as this, * or to simply make a method that, given a window, will center it. It was * decided that it is better to not alter an object within a method. *
*
* @param window The window to calculate the center point for. This object
* can not be null.
*
* @return the Point
at which the window should be placed to
* center that window on the screen.
*/
private static Rectangle getUsableDeviceBounds(Window window) { Window owner = window.getOwner(); GraphicsConfiguration gc = null; if (owner == null) { gc = GraphicsEnvironment.getLocalGraphicsEnvironment() .getDefaultScreenDevice().getDefaultConfiguration(); } else { gc = owner.getGraphicsConfiguration(); } Insets insets = Toolkit.getDefaultToolkit().getScreenInsets(gc); Rectangle bounds = gc.getBounds(); bounds.x += insets.left; bounds.y += insets.top; bounds.width -= (insets.left + insets.right); bounds.height -= (insets.top + insets.bottom); return bounds; }
}
</source>
Get Point For Staggering
<source lang="java">
/*
* $Id: WindowUtils.java,v 1.16 2009/05/25 16:37:52 kschaefe Exp $ * * Copyright 2004 Sun Microsystems, Inc., 4150 Network Circle, * Santa Clara, California 95054, U.S.A. All rights reserved. * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library 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 * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */
import java.awt.Insets; import java.awt.Point; import java.awt.Window; /**
* Encapsulates various utilities for windows (ie:Frame
and *Dialog
objects and descendants, in particular). * * @author Richard Bair */
public class Utils {
/**
* <p/>
* Returns the Point
at which a window should be placed in
* order to be staggered slightly from another "origin" window to
* ensure that the title areas of both windows remain visible to the user.
* </p>
*
* @param originWindow Window from which the staggered location will be calculated
*
* @return location staggered from the upper left location of the origin
* window
*/
public static Point getPointForStaggering(Window originWindow) {
Point origin = originWindow.getLocation();
Insets insets = originWindow.getInsets();
origin.x += insets.top;
origin.y += insets.top;
return origin;
}
}
</source>
Is Focusable
<source lang="java">
import java.applet.Applet; import java.awt.ruponent; import java.awt.Container; import java.awt.Point; import java.awt.Window; import java.util.ArrayList; import javax.swing.RootPaneContainer; import javax.swing.SwingUtilities; /**
* Copyright (C) 2004 NNL Technology AB * Visit www.infonode.net for information about InfoNode(R) * products and how to contact NNL Technology AB. * * 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 (at your option) 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. */
// $Id: ComponentUtil.java,v 1.25 2005/12/04 13:46:04 jesper Exp $
public class Util {
public static boolean isFocusable(Component c) { return c.isFocusable() && c.isDisplayable() && c.isVisible() && c.isEnabled(); }
}
</source>
Loading the given image
<source lang="java">
/**
* The utillib library. * More information is available at http://www.jinchess.ru/. * Copyright (C) 2002 Alexander Maryanovsky. * All rights reserved. * * The utillib library is free software; you can redistribute * it and/or modify it under the terms of the GNU Lesser General Public License * as published by the Free Software Foundation; either version 2 of the * License, or (at your option) any later version. * * The utillib library 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 Lesser * General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with utillib library; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */
import java.awt.Image; import java.awt.Toolkit; import java.awt.image.ImageObserver;
/**
* Various image related utilities. */
public class ImageUtilities{
/** * A constant indicating that the loading of the image completed. */ public static final int COMPLETE = 1;
/** * A constant indicating that the loading of the image errored. */ public static final int ERRORED = 2;
/** * A constant indicating that the loading of the image was aborted. */ public static final int ABORTED = 3;
/** * A constant indicating that the loading of the image was interrupted. */ public static final int INTERRUPTED = 4; /** * Starts loading the given image, returns only when it"s done loading. * Note that it"s much more efficient to preload a lot of images at once using * the preload(Image []) method instead of this one. * * @return The result of the image loading, either {@link #COMPLETE}, * {@link #ERRORED}, {@link #ABORTED} or {@link #INTERRUPTED}. * * @see #preload(java.awt.Image [], int []) */ public static int preload(Image image){ Toolkit toolkit = Toolkit.getDefaultToolkit(); // Check if already loaded if ((toolkit.checkImage(image, -1, -1, null) & ImageObserver.ALLBITS) != 0) return COMPLETE; Object lock = new Object(); synchronized(lock){ while (true){ ImageLoadObserver observer = new ImageLoadObserver(lock); toolkit.prepareImage(image, -1, -1, observer); int result = toolkit.checkImage(image, -1, -1, null); if ((result & ImageObserver.ALLBITS) != 0) return COMPLETE; if ((result & ImageObserver.ERROR) != 0) return ERRORED; if ((result & ImageObserver.ABORT) != 0) return ABORTED; try{ lock.wait(); return observer.getResult(); } catch (InterruptedException e){ return INTERRUPTED; } } } }
/** * Starts loading the given images, returns only when all the images are done * loading. If you just need to preload one Image, use the preload(Image) method * instead. * * @return An array specifying the loading result of each image. Possible values * are {@link #COMPLETE}, {@link #ERRORED} and {@link #ABORTED}. * * @see #preload(Image) */ public static int [] preload(Image [] images, int [] results){ Object [] locks = new Object[images.length]; ImageLoadObserver [] loadObservers = new ImageLoadObserver[images.length]; if ((results == null) || (results.length < images.length)) results = new int[images.length]; Toolkit toolkit = Toolkit.getDefaultToolkit(); for (int i = 0; i < images.length; i++){ locks[i] = new Object(); loadObservers[i] = new ImageLoadObserver(locks[i]); toolkit.prepareImage(images[i], -1, -1, loadObservers[i]); } for (int i = 0; i < images.length; i++){ synchronized(locks[i]){ int result = toolkit.checkImage(images[i], -1, -1, null); if ((result & ImageObserver.ALLBITS) != 0){ results[i] = COMPLETE; continue; } if ((result & ImageObserver.ERROR) != 0){ results[i] = ERRORED; continue; } if ((result & ImageObserver.ABORT) != 0){ results[i] = ABORTED; continue; } try{ locks[i].wait(); results[i] = loadObservers[i].getResult(); } catch (InterruptedException e){ results[i] = INTERRUPTED; } } } return results; } /** * Returns whether the specified image is already fully loaded. */ public static boolean isLoaded(Image image){ return (Toolkit.getDefaultToolkit().checkImage(image, -1, -1, null) & ImageObserver.ALLBITS) != 0; } /** * This class is an implementation of ImageObserver which notifies a given * lock when loading of the Image is done. This can be used to wait until a * certain Image has finished loading. */ public static class ImageLoadObserver implements ImageObserver{
/** * The lock. */ private final Object lock;
/** * The loading result. */ private int result = -1;
/** * Creates a new ImageLoadObserver which will notify the given lock when * the Image is done loading. */ public ImageLoadObserver(Object lock){ this.lock = lock; }
/** * If infoflags has the ALLBITS flag set, notifies the lock and returns * false, otherwise simply returns true. */ public boolean imageUpdate(Image img, int infoflags, int x, int y, int width, int height){ synchronized(lock){ if ((infoflags & ALLBITS)!=0){ result = ImageUtilities.ruPLETE; lock.notify(); return false; } if ((infoflags & ERROR)!=0){ result = ImageUtilities.ERRORED; lock.notify(); return false; } if ((infoflags & ABORT)!=0){ result = ImageUtilities.ABORTED; lock.notify(); return false; } } return true; }
/** * Returns the result of the image loading process or -1 if loading hasn"t finished yet. * Possible values are {@link ImageUtilities#COMPLETE}, {@link ImageUtilities#ERRORED} * and {@link ImageUtilities#ABORTED} */ public int getResult(){ return result; } }
}
</source>
Positions the specified dialog at a position relative to its parent.
<source lang="java">
/*
* JCommon : a free general purpose class library for the Java(tm) platform * * * (C) Copyright 2000-2005, by Object Refinery Limited and Contributors. * * Project Info: http://www.jfree.org/jcommon/index.html * * This library is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation; either version 2.1 of the License, or * (at your option) any later version. * * This library 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 Lesser General Public * License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, * USA. * * [Java is a trademark or registered trademark of Sun Microsystems, Inc. * in the United States and other countries.] * * ---------------------- * RefineryUtilities.java * ---------------------- * (C) Copyright 2000-2005, by Object Refinery Limited. * * Original Author: David Gilbert (for Object Refinery Limited); * Contributor(s): Jon Iles; * * $Id: RefineryUtilities.java,v 1.11 2007/11/02 17:50:36 taqua Exp $ * * Changes (from 26-Oct-2001) * -------------------------- * 26-Oct-2001 : Changed package to com.jrefinery.ui.*; * 26-Nov-2001 : Changed name to SwingRefinery.java to make it obvious that this is not part of * the Java APIs (DG); * 10-Dec-2001 : Changed name (again) to JRefineryUtilities.java (DG); * 28-Feb-2002 : Moved system properties classes into com.jrefinery.ui.about (DG); * 19-Apr-2002 : Renamed JRefineryUtilities-->RefineryUtilities. Added drawRotatedString() * method (DG); * 21-May-2002 : Changed frame positioning methods to accept Window parameters, as suggested by * Laurence Vanhelsuwe (DG); * 27-May-2002 : Added getPointInRectangle method (DG); * 26-Jun-2002 : Removed unnecessary imports (DG); * 12-Jul-2002 : Added workaround for rotated text (JI); * 14-Oct-2002 : Fixed errors reported by Checkstyle (DG); * 08-May-2003 : Added a new drawRotatedString() method (DG); * 09-May-2003 : Added a drawRotatedShape() method (DG); * 10-Jun-2003 : Updated aligned and rotated string methods (DG); * 29-Oct-2003 : Added workaround for font alignment in PDF output (DG); * 07-Nov-2003 : Added rotateShape() method (DG); * 16-Mar-2004 : Moved rotateShape() method to ShapeUtils.java (DG); * 07-Apr-2004 : Modified text bounds calculation with TextUtilities.getTextBounds() (DG); * 21-May-2004 : Fixed bug 951870 - precision in drawAlignedString() method (DG); * 30-Sep-2004 : Deprecated and moved a number of methods to the TextUtilities class (DG); * 04-Oct-2004 : Renamed ShapeUtils --> ShapeUtilities (DG); * 11-Jan-2005 : Removed deprecated code in preparation for the 1.0.0 release (DG); * */
import java.awt.Container; import java.awt.Dialog; import java.awt.Dimension; import java.awt.GraphicsEnvironment; import java.awt.Rectangle; import java.awt.Toolkit; import java.lang.reflect.Method; /**
* * * @author David Gilbert */
public class Main{
/** * Positions the specified dialog at a position relative to its parent. * * @param dialog the dialog to be positioned. * @param horizontalPercent the relative location. * @param verticalPercent the relative location. */ public static void positionDialogRelativeToParent(final Dialog dialog, final double horizontalPercent, final double verticalPercent) { final Dimension d = dialog.getSize(); final Container parent = dialog.getParent(); final Dimension p = parent.getSize(); final int baseX = parent.getX() - d.width; final int baseY = parent.getY() - d.height; final int w = d.width + p.width; final int h = d.height + p.height; int x = baseX + (int) (horizontalPercent * w); int y = baseY + (int) (verticalPercent * h); // make sure the dialog fits completely on the screen... final Rectangle s = getMaximumWindowBounds(); x = Math.min(x, (s.width - d.width)); x = Math.max(x, 0); y = Math.min(y, (s.height - d.height)); y = Math.max(y, 0); dialog.setBounds(x + s.x, y + s.y, d.width, d.height); } /** * Computes the maximum bounds of the current screen device. If this method is called on JDK 1.4, Xinerama-aware * results are returned. (See Sun-Bug-ID 4463949 for details). * * @return the maximum bounds of the current screen. */ public static Rectangle getMaximumWindowBounds () { final GraphicsEnvironment localGraphicsEnvironment = GraphicsEnvironment.getLocalGraphicsEnvironment(); try { final Method method = GraphicsEnvironment.class.getMethod("getMaximumWindowBounds", (Class[]) null); return (Rectangle) method.invoke(localGraphicsEnvironment, (Object[]) null); } catch(Exception e) { // ignore ... will fail if this is not a JDK 1.4 .. } final Dimension s = Toolkit.getDefaultToolkit().getScreenSize(); return new Rectangle (0, 0, s.width, s.height); }
}
</source>
Positions the specified frame at a random location on the screen while ensuring that the
<source lang="java">
entire frame is visible (provided that the frame is smaller than the screen). /*
* JCommon : a free general purpose class library for the Java(tm) platform * * * (C) Copyright 2000-2005, by Object Refinery Limited and Contributors. * * Project Info: http://www.jfree.org/jcommon/index.html * * This library is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation; either version 2.1 of the License, or * (at your option) any later version. * * This library 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 Lesser General Public * License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, * USA. * * [Java is a trademark or registered trademark of Sun Microsystems, Inc. * in the United States and other countries.] * * ---------------------- * RefineryUtilities.java * ---------------------- * (C) Copyright 2000-2005, by Object Refinery Limited. * * Original Author: David Gilbert (for Object Refinery Limited); * Contributor(s): Jon Iles; * * $Id: RefineryUtilities.java,v 1.11 2007/11/02 17:50:36 taqua Exp $ * * Changes (from 26-Oct-2001) * -------------------------- * 26-Oct-2001 : Changed package to com.jrefinery.ui.*; * 26-Nov-2001 : Changed name to SwingRefinery.java to make it obvious that this is not part of * the Java APIs (DG); * 10-Dec-2001 : Changed name (again) to JRefineryUtilities.java (DG); * 28-Feb-2002 : Moved system properties classes into com.jrefinery.ui.about (DG); * 19-Apr-2002 : Renamed JRefineryUtilities-->RefineryUtilities. Added drawRotatedString() * method (DG); * 21-May-2002 : Changed frame positioning methods to accept Window parameters, as suggested by * Laurence Vanhelsuwe (DG); * 27-May-2002 : Added getPointInRectangle method (DG); * 26-Jun-2002 : Removed unnecessary imports (DG); * 12-Jul-2002 : Added workaround for rotated text (JI); * 14-Oct-2002 : Fixed errors reported by Checkstyle (DG); * 08-May-2003 : Added a new drawRotatedString() method (DG); * 09-May-2003 : Added a drawRotatedShape() method (DG); * 10-Jun-2003 : Updated aligned and rotated string methods (DG); * 29-Oct-2003 : Added workaround for font alignment in PDF output (DG); * 07-Nov-2003 : Added rotateShape() method (DG); * 16-Mar-2004 : Moved rotateShape() method to ShapeUtils.java (DG); * 07-Apr-2004 : Modified text bounds calculation with TextUtilities.getTextBounds() (DG); * 21-May-2004 : Fixed bug 951870 - precision in drawAlignedString() method (DG); * 30-Sep-2004 : Deprecated and moved a number of methods to the TextUtilities class (DG); * 04-Oct-2004 : Renamed ShapeUtils --> ShapeUtilities (DG); * 11-Jan-2005 : Removed deprecated code in preparation for the 1.0.0 release (DG); * */
import java.awt.Dimension; import java.awt.GraphicsEnvironment; import java.awt.Rectangle; import java.awt.Toolkit; import java.awt.Window; import java.lang.reflect.Method; /**
* * * @author David Gilbert */
public class Main {
/** * Positions the specified frame at a random location on the screen while ensuring that the * entire frame is visible (provided that the frame is smaller than the screen). * * @param frame the frame. */ public static void positionFrameRandomly(final Window frame) { positionFrameOnScreen(frame, Math.random(), Math.random()); } /** * Positions the specified frame at a relative position in the screen, where * 50% is considered to be the center of the screen. * * @param frame * the frame. * @param horizontalPercent * the relative horizontal position of the frame (0.0 to 1.0, where * 0.5 is the center of the screen). * @param verticalPercent * the relative vertical position of the frame (0.0 to 1.0, where 0.5 * is the center of the screen). */ public static void positionFrameOnScreen(final Window frame, final double horizontalPercent, final double verticalPercent) { final Rectangle s = getMaximumWindowBounds(); final Dimension f = frame.getSize(); final int w = Math.max(s.width - f.width, 0); final int h = Math.max(s.height - f.height, 0); final int x = (int) (horizontalPercent * w) + s.x; final int y = (int) (verticalPercent * h) + s.y; frame.setBounds(x, y, f.width, f.height); } /** * Computes the maximum bounds of the current screen device. If this method is * called on JDK 1.4, Xinerama-aware results are returned. (See Sun-Bug-ID * 4463949 for details). * * @return the maximum bounds of the current screen. */ public static Rectangle getMaximumWindowBounds() { final GraphicsEnvironment localGraphicsEnvironment = GraphicsEnvironment .getLocalGraphicsEnvironment(); try { final Method method = GraphicsEnvironment.class.getMethod("getMaximumWindowBounds", (Class[]) null); return (Rectangle) method.invoke(localGraphicsEnvironment, (Object[]) null); } catch (Exception e) { // ignore ... will fail if this is not a JDK 1.4 .. } final Dimension s = Toolkit.getDefaultToolkit().getScreenSize(); return new Rectangle(0, 0, s.width, s.height); }
}
</source>
Positions the specified frame at a relative position in the screen, where 50% is considered to be the center of the screen.
<source lang="java">
/*
* JCommon : a free general purpose class library for the Java(tm) platform * * * (C) Copyright 2000-2005, by Object Refinery Limited and Contributors. * * Project Info: http://www.jfree.org/jcommon/index.html * * This library is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation; either version 2.1 of the License, or * (at your option) any later version. * * This library 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 Lesser General Public * License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, * USA. * * [Java is a trademark or registered trademark of Sun Microsystems, Inc. * in the United States and other countries.] * * ---------------------- * RefineryUtilities.java * ---------------------- * (C) Copyright 2000-2005, by Object Refinery Limited. * * Original Author: David Gilbert (for Object Refinery Limited); * Contributor(s): Jon Iles; * * $Id: RefineryUtilities.java,v 1.11 2007/11/02 17:50:36 taqua Exp $ * * Changes (from 26-Oct-2001) * -------------------------- * 26-Oct-2001 : Changed package to com.jrefinery.ui.*; * 26-Nov-2001 : Changed name to SwingRefinery.java to make it obvious that this is not part of * the Java APIs (DG); * 10-Dec-2001 : Changed name (again) to JRefineryUtilities.java (DG); * 28-Feb-2002 : Moved system properties classes into com.jrefinery.ui.about (DG); * 19-Apr-2002 : Renamed JRefineryUtilities-->RefineryUtilities. Added drawRotatedString() * method (DG); * 21-May-2002 : Changed frame positioning methods to accept Window parameters, as suggested by * Laurence Vanhelsuwe (DG); * 27-May-2002 : Added getPointInRectangle method (DG); * 26-Jun-2002 : Removed unnecessary imports (DG); * 12-Jul-2002 : Added workaround for rotated text (JI); * 14-Oct-2002 : Fixed errors reported by Checkstyle (DG); * 08-May-2003 : Added a new drawRotatedString() method (DG); * 09-May-2003 : Added a drawRotatedShape() method (DG); * 10-Jun-2003 : Updated aligned and rotated string methods (DG); * 29-Oct-2003 : Added workaround for font alignment in PDF output (DG); * 07-Nov-2003 : Added rotateShape() method (DG); * 16-Mar-2004 : Moved rotateShape() method to ShapeUtils.java (DG); * 07-Apr-2004 : Modified text bounds calculation with TextUtilities.getTextBounds() (DG); * 21-May-2004 : Fixed bug 951870 - precision in drawAlignedString() method (DG); * 30-Sep-2004 : Deprecated and moved a number of methods to the TextUtilities class (DG); * 04-Oct-2004 : Renamed ShapeUtils --> ShapeUtilities (DG); * 11-Jan-2005 : Removed deprecated code in preparation for the 1.0.0 release (DG); * */
import java.awt.Dimension; import java.awt.GraphicsEnvironment; import java.awt.Rectangle; import java.awt.Toolkit; import java.awt.Window; import java.lang.reflect.Method; /**
* * * @author David Gilbert */
public class Main {
/** * Positions the specified frame at a relative position in the screen, where * 50% is considered to be the center of the screen. * * @param frame * the frame. * @param horizontalPercent * the relative horizontal position of the frame (0.0 to 1.0, where * 0.5 is the center of the screen). * @param verticalPercent * the relative vertical position of the frame (0.0 to 1.0, where 0.5 * is the center of the screen). */ public static void positionFrameOnScreen(final Window frame, final double horizontalPercent, final double verticalPercent) { final Rectangle s = getMaximumWindowBounds(); final Dimension f = frame.getSize(); final int w = Math.max(s.width - f.width, 0); final int h = Math.max(s.height - f.height, 0); final int x = (int) (horizontalPercent * w) + s.x; final int y = (int) (verticalPercent * h) + s.y; frame.setBounds(x, y, f.width, f.height); } /** * Computes the maximum bounds of the current screen device. If this method is * called on JDK 1.4, Xinerama-aware results are returned. (See Sun-Bug-ID * 4463949 for details). * * @return the maximum bounds of the current screen. */ public static Rectangle getMaximumWindowBounds() { final GraphicsEnvironment localGraphicsEnvironment = GraphicsEnvironment .getLocalGraphicsEnvironment(); try { final Method method = GraphicsEnvironment.class.getMethod("getMaximumWindowBounds", (Class[]) null); return (Rectangle) method.invoke(localGraphicsEnvironment, (Object[]) null); } catch (Exception e) { // ignore ... will fail if this is not a JDK 1.4 .. } final Dimension s = Toolkit.getDefaultToolkit().getScreenSize(); return new Rectangle(0, 0, s.width, s.height); }
}
</source>
Positions the specified frame in the middle of the screen.
<source lang="java">
/*
* JCommon : a free general purpose class library for the Java(tm) platform * * * (C) Copyright 2000-2005, by Object Refinery Limited and Contributors. * * Project Info: http://www.jfree.org/jcommon/index.html * * This library is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation; either version 2.1 of the License, or * (at your option) any later version. * * This library 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 Lesser General Public * License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, * USA. * * [Java is a trademark or registered trademark of Sun Microsystems, Inc. * in the United States and other countries.] * * ---------------------- * RefineryUtilities.java * ---------------------- * (C) Copyright 2000-2005, by Object Refinery Limited. * * Original Author: David Gilbert (for Object Refinery Limited); * Contributor(s): Jon Iles; * * $Id: RefineryUtilities.java,v 1.11 2007/11/02 17:50:36 taqua Exp $ * * Changes (from 26-Oct-2001) * -------------------------- * 26-Oct-2001 : Changed package to com.jrefinery.ui.*; * 26-Nov-2001 : Changed name to SwingRefinery.java to make it obvious that this is not part of * the Java APIs (DG); * 10-Dec-2001 : Changed name (again) to JRefineryUtilities.java (DG); * 28-Feb-2002 : Moved system properties classes into com.jrefinery.ui.about (DG); * 19-Apr-2002 : Renamed JRefineryUtilities-->RefineryUtilities. Added drawRotatedString() * method (DG); * 21-May-2002 : Changed frame positioning methods to accept Window parameters, as suggested by * Laurence Vanhelsuwe (DG); * 27-May-2002 : Added getPointInRectangle method (DG); * 26-Jun-2002 : Removed unnecessary imports (DG); * 12-Jul-2002 : Added workaround for rotated text (JI); * 14-Oct-2002 : Fixed errors reported by Checkstyle (DG); * 08-May-2003 : Added a new drawRotatedString() method (DG); * 09-May-2003 : Added a drawRotatedShape() method (DG); * 10-Jun-2003 : Updated aligned and rotated string methods (DG); * 29-Oct-2003 : Added workaround for font alignment in PDF output (DG); * 07-Nov-2003 : Added rotateShape() method (DG); * 16-Mar-2004 : Moved rotateShape() method to ShapeUtils.java (DG); * 07-Apr-2004 : Modified text bounds calculation with TextUtilities.getTextBounds() (DG); * 21-May-2004 : Fixed bug 951870 - precision in drawAlignedString() method (DG); * 30-Sep-2004 : Deprecated and moved a number of methods to the TextUtilities class (DG); * 04-Oct-2004 : Renamed ShapeUtils --> ShapeUtilities (DG); * 11-Jan-2005 : Removed deprecated code in preparation for the 1.0.0 release (DG); * */
import java.awt.Dimension; import java.awt.GraphicsEnvironment; import java.awt.Rectangle; import java.awt.Toolkit; import java.awt.Window; import java.lang.reflect.Method; /**
* * * @author David Gilbert */
public class Main {
/** * Positions the specified frame in the middle of the screen. * * @param frame the frame to be centered on the screen. */ public static void centerFrameOnScreen(final Window frame) { positionFrameOnScreen(frame, 0.5, 0.5); } /** * Positions the specified frame at a relative position in the screen, where * 50% is considered to be the center of the screen. * * @param frame * the frame. * @param horizontalPercent * the relative horizontal position of the frame (0.0 to 1.0, where * 0.5 is the center of the screen). * @param verticalPercent * the relative vertical position of the frame (0.0 to 1.0, where 0.5 * is the center of the screen). */ public static void positionFrameOnScreen(final Window frame, final double horizontalPercent, final double verticalPercent) { final Rectangle s = getMaximumWindowBounds(); final Dimension f = frame.getSize(); final int w = Math.max(s.width - f.width, 0); final int h = Math.max(s.height - f.height, 0); final int x = (int) (horizontalPercent * w) + s.x; final int y = (int) (verticalPercent * h) + s.y; frame.setBounds(x, y, f.width, f.height); } /** * Computes the maximum bounds of the current screen device. If this method is * called on JDK 1.4, Xinerama-aware results are returned. (See Sun-Bug-ID * 4463949 for details). * * @return the maximum bounds of the current screen. */ public static Rectangle getMaximumWindowBounds() { final GraphicsEnvironment localGraphicsEnvironment = GraphicsEnvironment .getLocalGraphicsEnvironment(); try { final Method method = GraphicsEnvironment.class.getMethod("getMaximumWindowBounds", (Class[]) null); return (Rectangle) method.invoke(localGraphicsEnvironment, (Object[]) null); } catch (Exception e) { // ignore ... will fail if this is not a JDK 1.4 .. } final Dimension s = Toolkit.getDefaultToolkit().getScreenSize(); return new Rectangle(0, 0, s.width, s.height); }
}
</source>
Press a key pragmatically
<source lang="java">
import javax.swing.*; import java.awt.*; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.KeyEvent; import java.awt.event.KeyListener; public class KeyUtils {
public static void pressKey(Component component ) { if (component.getKeyListeners().length > 0) { KeyEvent event = new KeyEvent(component, KeyEvent.KEY_PRESSED, 0, 1, 32, (char)32); for (int i = 0; i < component.getKeyListeners().length; i++) { KeyListener keyListener = component.getKeyListeners()[i]; keyListener.keyPressed(event); } } if (JComponent.class.isInstance(component)) { KeyStroke keyStroke = KeyStroke.getKeyStroke(32, 1); final ActionListener actionForKeyStroke = ((JComponent)component).getActionForKeyStroke(keyStroke); if (actionForKeyStroke != null) { actionForKeyStroke.actionPerformed(new ActionEvent(component, KeyEvent.KEY_PRESSED, "")); } } }
}
</source>
Renders a component into an image
<source lang="java">
/*
* * Created on March 16, 2007, 4:34 PM * * Copyright 2006-2007 Nigel Hughes * * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except * in compliance with the License. You may obtain a copy of the License at http://www.apache.org/ * licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR * CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language * governing permissions and limitations under the License. */
import java.awt.Color; import java.awt.Font; import java.awt.Graphics; import java.awt.Graphics2D; import java.awt.GraphicsConfiguration; import java.awt.GraphicsEnvironment; import java.awt.RenderingHints; import java.awt.Transparency; import java.awt.font.FontRenderContext; import java.awt.font.LineBreakMeasurer; import java.awt.font.TextAttribute; import java.awt.font.TextLayout; import java.awt.image.BufferedImage; import java.text.AttributedCharacterIterator; import java.text.AttributedString; import java.util.Hashtable; import java.util.LinkedList; import javax.swing.JComponent; /**
* @author nigel */
public class Utils {
/** * Renders a component into an image, which is useful for playing with the component"s * resultant image in special effects or transitions * * @param component The component to render * @return A buffered image with the rendered component. */ public static BufferedImage renderComponentToImage(JComponent component){ //Create the image BufferedImage image = createCompatibleImage(component.getWidth(),component.getHeight()); //Render the component onto the image Graphics graphics = image.createGraphics();
// component.update(graphics);
component.paint(graphics); graphics.dispose(); return image; } /** * Creates an image compatible with the current display * * @return A BufferedImage with the appropriate color model */ public static BufferedImage createCompatibleImage(int width, int height) { GraphicsConfiguration configuration = GraphicsEnvironment.getLocalGraphicsEnvironment() .getDefaultScreenDevice().getDefaultConfiguration(); return configuration.createCompatibleImage(width, height, Transparency.TRANSLUCENT); }
}
</source>
Set All Opaque
<source lang="java">
import java.awt.ruponent; import java.awt.Container; import javax.swing.JComponent; /**
* Copyright (C) 2004 NNL Technology AB * Visit www.infonode.net for information about InfoNode(R) * products and how to contact NNL Technology AB. * * 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 (at your option) 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. */
// $Id: ComponentUtil.java,v 1.25 2005/12/04 13:46:04 jesper Exp $
public class Util {
public static void setAllOpaque(Container c, boolean opaque) { if (c instanceof JComponent) { ((JComponent) c).setOpaque(opaque); for (int i = 0; i < c.getComponentCount(); i++) { Component comp = c.getComponent(i); if (comp instanceof Container) setAllOpaque((Container) comp, opaque); } } }
}
</source>
Set Frame Location Relative To
<source lang="java">
import javax.swing.*; import java.awt.*; /**
* @author Adrian BER (beradrian@yahoo.ru) */
public class UIUtilities {
public static void setFrameLocationRelativeTo(JFrame f, Component c) { if (c == null) { // Setting the position of the dialog on the center of the screen // in 1.4 should be replaced by
// f.setLocationRelativeTo(null);
Dimension d = Toolkit.getDefaultToolkit().getScreenSize(); f.setLocation((int)d.getWidth()/2 - (int)f.getPreferredSize().getWidth()/2, (int)d.getHeight()/2 - (int)f.getPreferredSize().getHeight()/2); } }
}
</source>
Set Wait Cursor
<source lang="java">
// // GuiUtil // // Copyright (C) by Andrea Carboni. // This file may be distributed under the terms of the LGPL license.
import java.awt.Color; import java.awt.ruponent; import java.awt.Cursor; import java.awt.Frame; import java.awt.Graphics; import java.awt.Graphics2D; import java.awt.RenderingHints;
public class GuiUtil {
private static Cursor defCursor = Cursor.getDefaultCursor(); private static Cursor waitCursor = Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR); //--------------------------------------------------------------------------- public static void setWaitCursor(Component c, boolean yesno) { c.setCursor(yesno ? waitCursor : defCursor); getFrame(c).setCursor(yesno ? waitCursor : defCursor); } //--------------------------------------------------------------------------- public static void setWaitCursor(boolean yesno) { Frame.getFrames()[0].setCursor(yesno ? waitCursor : defCursor); } //--------------------------------------------------------------------------- public static Frame getFrame(Component c) { Object obj = c; while (!(obj instanceof Frame)) obj = ((Component)obj).getParent(); return (Frame)obj; } //--------------------------------------------------------------------------- public static Color cloneColor(Color c) { return new Color(c.getRed(), c.getGreen(), c.getBlue()); } //--------------------------------------------------------------------------- public static final void setTextAntiAliasing(Graphics g, boolean yesno) { Object obj = yesno ? RenderingHints.VALUE_TEXT_ANTIALIAS_ON : RenderingHints.VALUE_TEXT_ANTIALIAS_OFF; ((Graphics2D) g).setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING, obj); } //--------------------------------------------------------------------------- public static final void setAntiAliasing(Graphics g, boolean yesno) { Object obj = yesno ? RenderingHints.VALUE_ANTIALIAS_ON : RenderingHints.VALUE_ANTIALIAS_OFF; ((Graphics2D) g).setRenderingHint(RenderingHints.KEY_ANTIALIASING, obj); }
}
</source>
Shadow Popup Border
<source lang="java">
/*
* Copyright (c) 2001-2009 JGoodies Karsten Lentzsch. All Rights Reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: * * o Redistributions of source code must retain the above copyright notice, * this list of conditions and the following disclaimer. * * o 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. * * o Neither the name of JGoodies Karsten Lentzsch 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.ruponent; import java.awt.Graphics; import java.awt.Image; import java.awt.Insets; import javax.swing.ImageIcon; import javax.swing.JComponent; import javax.swing.border.AbstractBorder; /**
* A border with a drop shadow intended to be used as the outer border * of popups. Can paint the screen background if used with heavy-weight * popup windows. * * @author Karsten Lentzsch * @author Andrej Golovnin * @version $Revision: 1.6 $ * * @see ShadowPopup * @see ShadowPopupFactory */
final class ShadowPopupBorder extends AbstractBorder {
/** * The drop shadow needs 5 pixels at the bottom and the right hand side. */ private static final int SHADOW_SIZE = 5; /** * The singleton instance used to draw all borders. */ private static ShadowPopupBorder instance = new ShadowPopupBorder(); /** * The drop shadow is created from a PNG image with 8 bit alpha channel. */ private static Image shadow = new ImageIcon(ShadowPopupBorder.class.getResource("shadow.png")).getImage();
// Instance Creation ***************************************************** /** * Returns the singleton instance used to draw all borders. */ public static ShadowPopupBorder getInstance() { return instance; }
/** * Paints the border for the specified component with the specified * position and size. */ public void paintBorder(Component c, Graphics g, int x, int y, int width, int height) { // draw drop shadow g.drawImage(shadow, x + 5, y + height - 5, x + 10, y + height, 0, 6, 5, 11, null, c); g.drawImage(shadow, x + 10, y + height - 5, x + width - 5, y + height, 5, 6, 6, 11, null, c); g.drawImage(shadow, x + width - 5, y + 5, x + width, y + 10, 6, 0, 11, 5, null, c); g.drawImage(shadow, x + width - 5, y + 10, x + width, y + height - 5, 6, 5, 11, 6, null, c); g.drawImage(shadow, x + width - 5, y + height - 5, x + width, y + height, 6, 6, 11, 11, null, c); }
/** * Returns the insets of the border. */ public Insets getBorderInsets(Component c) { return new Insets(0, 0, SHADOW_SIZE, SHADOW_SIZE); }
/**
* Reinitializes the insets parameter with this Border"s current Insets.
* @param c the component for which this border insets value applies
* @param insets the object to be reinitialized
* @return the insets
object
*/
public Insets getBorderInsets(Component c, Insets insets) {
insets.left = insets.top = 0;
insets.right = insets.bottom = SHADOW_SIZE;
return insets;
}
}
</source>
Unit conversions
<source lang="java">
/*
* Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */
/* $Id: FixedLength.java 279656 2005-09-08 22:06:48Z pietsch $ */
/**
* Utility class for unit conversions. */
public final class UnitConv {
/** conversion factory from millimeters to inches. */ public static final float IN2MM = 25.4f; /** conversion factory from centimeters to inches. */ public static final float IN2CM = 2.54f; /** conversion factory from inches to points. */ public static final int IN2PT = 72; /** * Converts millimeters (mm) to points (pt) * @param mm the value in mm * @return the value in pt */ public static double mm2pt(double mm) { return mm * IN2PT / IN2MM; } /** * Converts millimeters (mm) to millipoints (mpt) * @param mm the value in mm * @return the value in mpt */ public static double mm2mpt(double mm) { return mm * 1000 * IN2PT / IN2MM; } /** * Converts points (pt) to millimeters (mm) * @param pt the value in pt * @return the value in mm */ public static double pt2mm(double pt) { return pt * IN2MM / IN2PT; } /** * Converts millimeters (mm) to inches (in) * @param mm the value in mm * @return the value in inches */ public static double mm2in(double mm) { return mm / IN2MM; } /** * Converts inches (in) to millimeters (mm) * @param in the value in inches * @return the value in mm */ public static double in2mm(double in) { return in * IN2MM; } /** * Converts inches (in) to millipoints (mpt) * @param in the value in inches * @return the value in mpt */ public static double in2mpt(double in) { return in * IN2PT * 1000; } /** * Converts inches (in) to points (pt) * @param in the value in inches * @return the value in pt */ public static double in2pt(double in) { return in * IN2PT; } /** * Converts millipoints (mpt) to inches (in) * @param mpt the value in mpt * @return the value in inches */ public static double mpt2in(double mpt) { return mpt / IN2PT / 1000; } /** * Converts millimeters (mm) to pixels (px) * @param mm the value in mm * @param resolution the resolution in dpi (dots per inch) * @return the value in pixels */ public static double mm2px(double mm, int resolution) { return mm2in(mm) * resolution; } /** * Converts millipoints (mpt) to pixels (px) * @param mpt the value in mpt * @param resolution the resolution in dpi (dots per inch) * @return the value in pixels */ public static double mpt2px(double mpt, int resolution) { return mpt2in(mpt) * resolution; }
}
</source>
Unit measure
<source lang="java">
/*
* Ruler.java * * Created on Oct 1, 2007, 8:33:09 AM * * To change this template, choose Tools | Templates * and open the template in the editor. */
import java.util.HashMap; /**
* * @author gtoffoli */
public class Unit {
public static final double PIXEL = 1.0; public static final double INCHES = 72.0; public static final double CENTIMETERS = 28.3464; public static final double MILLIMETERS = 2.83464; /** Holds value of property unitName. */ private String unitName; private String keyName; /** Holds value of property conversionValue. */ private double conversionValue; /** Creates a new instance of Unit */ public Unit(String unitName, double conversionValue) { this(unitName, conversionValue, unitName); } public Unit(String unitName, double conversionValue, String keyName) { this.unitName = unitName; this.conversionValue = conversionValue; this.setKeyName(keyName); } /** Getter for property unitName. * @return Value of property unitName. * */ public String getUnitName() { return this.unitName; } /** Setter for property unitName. * @param unitName New value of property unitName. * */ public void setUnitName(String unitName) { this.unitName = unitName; } /** Getter for property conversionValue. * @return Value of property conversionValue. * */ public double getConversionValue() { return this.conversionValue; } /** Setter for property conversionValue. * @param conversionValue New value of property conversionValue. * */ public void setConversionValue(double conversionValue) { this.conversionValue = conversionValue; } private static Unit[] units = null; private static HashMap<String,Unit> unitsMap = null; public static Unit[] getStandardUnits() { if (units == null) { unitsMap = new HashMap<String,Unit>(); units = new Unit[4]; units[0] = new Unit("pixels",Unit.PIXEL, "pixels"); unitsMap.put("pixels", units[0]); units[1] = new Unit("inches",Unit.INCHES, "inches"); unitsMap.put("inches", units[1]); units[2] = new Unit("cm", Unit.CENTIMETERS, "cm"); unitsMap.put("cm", units[2]); units[3] = new Unit("mm", Unit.MILLIMETERS, "mm"); unitsMap.put("mm", units[3]); } return units; } public static int getUnitIndex(String unitName) { Unit[] units = getStandardUnits(); for (int i=0; i<units.length; ++i) { if (units[i].getUnitName().equalsIgnoreCase(unitName)) return i; } return -1; } public String toString() { return getUnitName(); } /** * convert from pixel to the unit represented by this class * * @param pixel * @return */ public double convert(int pixels) { return ((double)pixels)/conversionValue; } /** * convert from pixel to the unit represented by this class * * @param pixel * @return */ public long toPixel(double val) { return (long)(val*conversionValue); } static public double convertPixelsToInches(long pixels) { return ((double)pixels)/INCHES; } static public long convertInchesToPixels(double inches) { return (long)(inches*INCHES); } static public double convertPixelsToCentimeters(long pixels) { return ((double)pixels)/CENTIMETERS; } static public long convertCentimetersToPixels(double centimeters) { return (long)(centimeters*CENTIMETERS); } static public double convertPixelsToMillimeters(long pixels) { return ((double)pixels)/MILLIMETERS; } static public long convertMillimetersToPixels(double millimeters) { return (long)(millimeters*CENTIMETERS); } static public long convertToPixels(double value, double convert) { return (long)(value*convert); } static public Unit getUnit(String unitName) { if (unitsMap == null) getStandardUnits(); return unitsMap.get(unitName); } public String getKeyName() { return keyName; } public void setKeyName(String keyName) { this.keyName = keyName; }
}
</source>
Utilities for GUI work.
<source lang="java">
/*
* Copyright (c) Ian F. Darwin, http://www.darwinsys.ru/, 1996-2002. * All rights reserved. Software written by Ian F. Darwin and others. * $Id: LICENSE,v 1.8 2004/02/09 03:33:38 ian Exp $ * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. 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. * * THIS SOFTWARE IS PROVIDED BY THE AUTHOR 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 AUTHOR 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. * * Java, the Duke mascot, and all variants of Sun"s Java "steaming coffee * cup" logo are trademarks of Sun Microsystems. Sun"s, and James Gosling"s, * pioneering role in inventing and promulgating (and standardizing) the Java * language and environment is gratefully acknowledged. * * The pioneering role of Dennis Ritchie and Bjarne Stroustrup, of AT&T, for * inventing predecessor languages C and C++ is also gratefully acknowledged. */
import java.awt.Dimension; import java.awt.Toolkit; import java.awt.Window; /**
* Utilities for GUI work. * * @version $Id: UtilGUI.java,v 1.6 2003/07/12 23:28:01 ian Exp $ */
public class UtilGUI {
/** Centre a Window, Frame, JFrame, Dialog, etc. */ public static void centre(Window w) { // After packing a Frame or Dialog, centre it on the screen. Dimension us = w.getSize(), them = Toolkit.getDefaultToolkit() .getScreenSize(); int newX = (them.width - us.width) / 2; int newY = (them.height - us.height) / 2; w.setLocation(newX, newY); } /** * Center a Window, Frame, JFrame, Dialog, etc., but do it the American * Spelling Way :-) */ public static void center(Window w) { UtilGUI.centre(w); } /** Maximize a window, the hard way. */ public static void maximize(Window w) { Dimension us = w.getSize(), them = Toolkit.getDefaultToolkit() .getScreenSize(); w.setBounds(0, 0, them.width, them.height); }
}
</source>