Java examples for Swing:Screen
Ensures the rectangle is visible on the screen.
/*/*w w w .jav a 2 s .c om*/ * @(#)PortingUtils.java 4/12/2006 * * Copyright 2002 - 2006 JIDE Software Inc. All rights reserved. */ import javax.swing.*; import java.awt.*; import java.awt.event.MouseEvent; import java.awt.geom.Area; import java.util.ArrayList; import java.util.List; public class Main{ /** * Ensures the rectangle is visible on the screen. * * @param invoker the invoking component * @param bounds the input bounds * @return the modified bounds. */ public static Rectangle ensureVisible(Component invoker, Rectangle bounds) { Rectangle mainScreenBounds = PortingUtils.getLocalScreenBounds(); // this is fast. Only if it is outside this bounds, we try the more expensive one. if (!mainScreenBounds.contains(bounds.getLocation())) { Rectangle screenBounds = PortingUtils.getScreenBounds(invoker, false); if (bounds.x > screenBounds.x + screenBounds.width || bounds.x < screenBounds.x) { bounds.x = screenBounds.x; } if (bounds.y > screenBounds.y + screenBounds.height || bounds.y < screenBounds.y) { bounds.y = screenBounds.y; } } return bounds; } /** * Gets the local monitor's screen bounds. * * @return the screen bounds. */ public static Rectangle getLocalScreenBounds() { GraphicsEnvironment e = GraphicsEnvironment .getLocalGraphicsEnvironment(); return e.getMaximumWindowBounds(); } /** * Gets the screen bounds. In JDK1.4+, the returned bounds will exclude task bar area on Windows OS. If the invoker * is null, the whole screen bounds including all display devices will be returned. If the invoker is not null and * the useInvokeDevice flag is true, the screen of the display device for the invoker will be returned. * * @param invoker the invoker component * @param useInvokerDevice the flag to return invoker device or not * @return the screen bounds. */ public static Rectangle getScreenBounds(Component invoker, boolean useInvokerDevice) { // to handle multi-display case Rectangle bounds = (!useInvokerDevice || invoker == null || invoker .getGraphicsConfiguration() == null) ? (Rectangle) getScreenBounds() .clone() : invoker.getGraphicsConfiguration().getBounds(); // TODO // jdk1.4 only if (invoker != null && !(invoker instanceof JApplet) && invoker.getGraphicsConfiguration() != null) { Insets insets = Toolkit.getDefaultToolkit().getScreenInsets( invoker.getGraphicsConfiguration()); bounds.x += insets.left; bounds.y += insets.top; bounds.width -= insets.left + insets.right; bounds.height -= insets.top + insets.bottom; } return bounds; } /** * Gets the screen bounds. In JDK1.4+, the returned bounds will exclude task bar area on Windows OS. * <p/> * By default, it will not use invoker graphic device automatically. * * @param invoker the invoker component * @return the screen bounds. * @see #getScreenBounds(java.awt.Component, boolean) */ public static Rectangle getScreenBounds(Component invoker) { return getScreenBounds(invoker, false); } private static Rectangle getScreenBounds() { Rectangle SCREEN_BOUNDS = new Rectangle(); GraphicsEnvironment ge = GraphicsEnvironment .getLocalGraphicsEnvironment(); GraphicsDevice[] gs = ge.getScreenDevices(); for (GraphicsDevice gd : gs) { GraphicsConfiguration gc = gd.getDefaultConfiguration(); SCREEN_BOUNDS = SCREEN_BOUNDS.union(gc.getBounds()); } return SCREEN_BOUNDS; } }