📄 awtutilities.java
字号:
if (ret == null) ret = new Rectangle(); ret.setBounds(base.x + insets.left, base.y + insets.top, base.width - (insets.left + insets.right), base.height - (insets.top + insets.bottom)); return ret; } /** * Calculates the bounds of a component in the component's own coordinate * space. The result has the same height and width as the component's * bounds, but its location is set to (0,0). * * @param aComponent The component to measure * * @return The component's bounds in its local coordinate space */ public static Rectangle getLocalBounds(Component aComponent) { Rectangle bounds = aComponent.getBounds(); return new Rectangle(0, 0, bounds.width, bounds.height); } /** * Returns the font metrics object for a given font. The metrics can be * used to calculate crude bounding boxes and positioning information, * for laying out components with textual elements. * * @param font The font to get metrics for * * @return The font's metrics * * @see java.awt.font.GlyphMetrics */ public static FontMetrics getFontMetrics(Font font) { return Toolkit.getDefaultToolkit().getFontMetrics(font); } /** * Returns the least ancestor of <code>comp</code> which has the * specified name. * * @param name The name to search for * @param comp The component to search the ancestors of * * @return The nearest ancestor of <code>comp</code> with the given * name, or <code>null</code> if no such ancestor exists * * @see java.awt.Component#getName * @see #getAncestorOfClass */ public static Container getAncestorNamed(String name, Component comp) { while (comp != null && (comp.getName() != name)) comp = comp.getParent(); return (Container) comp; } /** * Returns the least ancestor of <code>comp</code> which is an instance * of the specified class. * * @param c The class to search for * @param comp The component to search the ancestors of * * @return The nearest ancestor of <code>comp</code> which is an instance * of the given class, or <code>null</code> if no such ancestor exists * * @see #getAncestorOfClass * @see #windowForComponent * @see * */ public static Container getAncestorOfClass(Class c, Component comp) { while (comp != null && (! c.isInstance(comp))) comp = comp.getParent(); return (Container) comp; } /** * Equivalent to calling <code>getAncestorOfClass(Window, comp)</code>. * * @param comp The component to search for an ancestor window * * @return An ancestral window, or <code>null</code> if none exists */ public static Window windowForComponent(Component comp) { return (Window) getAncestorOfClass(Window.class, comp); } /** * Returns the "root" of the component tree containint <code>comp</code> * The root is defined as either the <em>least</em> ancestor of * <code>comp</code> which is a {@link Window}, or the <em>greatest</em> * ancestor of <code>comp</code> which is a {@link Applet} if no {@link * Window} ancestors are found. * * @param comp The component to search for a root * * @return The root of the component's tree, or <code>null</code> */ public static Component getRoot(Component comp) { Applet app = null; Window win = null; while (comp != null) { if (win == null && comp instanceof Window) win = (Window) comp; else if (comp instanceof Applet) app = (Applet) comp; comp = comp.getParent(); } if (win != null) return win; else return app; } /** * Return true if a descends from b, in other words if b is an * ancestor of a. * * @param a The child to search the ancestry of * @param b The potential ancestor to search for * * @return true if a is a descendent of b, false otherwise */ public static boolean isDescendingFrom(Component a, Component b) { while (true) { if (a == null || b == null) return false; if (a == b) return true; a = a.getParent(); } } /** * Returns the deepest descendent of parent which is both visible and * contains the point <code>(x,y)</code>. Returns parent when either * parent is not a container, or has no children which contain * <code>(x,y)</code>. Returns <code>null</code> when either * <code>(x,y)</code> is outside the bounds of parent, or parent is * <code>null</code>. * * @param parent The component to search the descendents of * @param x Horizontal coordinate to search for * @param y Vertical coordinate to search for * * @return A component containing <code>(x,y)</code>, or * <code>null</code> * * @see java.awt.Container#findComponentAt */ public static Component getDeepestComponentAt(Component parent, int x, int y) { if (parent == null || (! parent.contains(x, y))) return null; if (! (parent instanceof Container)) return parent; Container c = (Container) parent; return c.findComponentAt(x, y); } /** * Converts a point from a component's local coordinate space to "screen" * coordinates (such as the coordinate space mouse events are delivered * in). This operation is equivalent to translating the point by the * location of the component (which is the origin of its coordinate * space). * * @param p The point to convert * @param c The component which the point is expressed in terms of * * @see convertPointFromScreen */ public static void convertPointToScreen(Point p, Component c) { Point c0 = c.getLocationOnScreen(); p.translate(c0.x, c0.y); } /** * Converts a point from "screen" coordinates (such as the coordinate * space mouse events are delivered in) to a component's local coordinate * space. This operation is equivalent to translating the point by the * negation of the component's location (which is the origin of its * coordinate space). * * @param p The point to convert * @param c The component which the point should be expressed in terms of */ public static void convertPointFromScreen(Point p, Component c) { Point c0 = c.getLocationOnScreen(); p.translate(-c0.x, -c0.y); } /** * Converts a point <code>(x,y)</code> from the coordinate space of one * component to another. This is equivalent to converting the point from * <code>source</code> space to screen space, then back from screen space * to <code>destination</code> space. If exactly one of the two * Components is <code>null</code>, it is taken to refer to the root * ancestor of the other component. If both are <code>null</code>, no * transformation is done. * * @param source The component which the point is expressed in terms of * @param x Horizontal coordinate of point to transform * @param y Vertical coordinate of point to transform * @param destination The component which the return value will be * expressed in terms of * * @return The point <code>(x,y)</code> converted from the coordinate * space of the * source component to the coordinate space of the destination component * * @see #convertPointToScreen * @see #convertPointFromScreen * @see #convertRectangle * @see #getRoot */ public static Point convertPoint(Component source, int x, int y, Component destination) { Point pt = new Point(x, y); if (source == null && destination == null) return pt; if (source == null) source = getRoot(destination); if (destination == null) destination = getRoot(source); if (source.isShowing() && destination.isShowing()) { convertPointToScreen(pt, source); convertPointFromScreen(pt, destination); } return pt; } /** * Converts a rectangle from the coordinate space of one component to * another. This is equivalent to converting the rectangle from * <code>source</code> space to screen space, then back from screen space * to <code>destination</code> space. If exactly one of the two * Components is <code>null</code>, it is taken to refer to the root * ancestor of the other component. If both are <code>null</code>, no * transformation is done. * * @param source The component which the rectangle is expressed in terms of * @param rect The rectangle to convert * @param destination The component which the return value will be * expressed in terms of * * @return A new rectangle, equal in size to the input rectangle, but * with its position converted from the coordinate space of the source * component to the coordinate space of the destination component * * @see #convertPointToScreen * @see #convertPointFromScreen * @see #convertPoint * @see #getRoot */ public static Rectangle convertRectangle(Component source, Rectangle rect, Component destination) { Point pt = convertPoint(source, rect.x, rect.y, destination); return new Rectangle(pt.x, pt.y, rect.width, rect.height); } /** * Convert a mouse event which refrers to one component to another. This * includes changing the mouse event's coordinate space, as well as the * source property of the event. If <code>source</code> is * <code>null</code>, it is taken to refer to <code>destination</code>'s * root component. If <code>destination</code> is <code>null</code>, the * new event will remain expressed in <code>source</code>'s coordinate * system. * * @param source The component the mouse event currently refers to * @param sourceEvent The mouse event to convert * @param destination The component the new mouse event should refer to * * @return A new mouse event expressed in terms of the destination * component's coordinate space, and with the destination component as * its source * * @see #convertPoint */ public static MouseEvent convertMouseEvent(Component source, MouseEvent sourceEvent, Component destination) { Point newpt = convertPoint(source, sourceEvent.getX(), sourceEvent.getY(), destination); return new MouseEvent(destination, sourceEvent.getID(), sourceEvent.getWhen(), sourceEvent.getModifiers(), newpt.x, newpt.y, sourceEvent.getClickCount(), sourceEvent.isPopupTrigger(), sourceEvent.getButton()); } /** * Calls {@link java.awt.EventQueue.invokeLater} with the * specified {@link Runnable}. */ public static void invokeLater(Runnable doRun) { java.awt.EventQueue.invokeLater(doRun); } /** * Calls {@link java.awt.EventQueue.invokeAndWait} with the * specified {@link Runnable}. */ public static void invokeAndWait(Runnable doRun) throws InterruptedException, InvocationTargetException { java.awt.EventQueue.invokeAndWait(doRun); } /** * Calls {@link java.awt.EventQueue.isEventDispatchThread}. */ public static boolean isEventDispatchThread() { return java.awt.EventQueue.isDispatchThread(); }}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -