📄 absolutelayout.java
字号:
//$Id: AbsoluteLayout.java,v 1.3 2002/08/27 08:32:26 per_nyfelt Exp $
//from the NetBeans redist directory
package org.ozoneDB.core.monitor;
import java.awt.*;
/**
* AbsoluteLayout is a LayoutManager that works as a replacement
* for "null" layout to allow placement of components in absolute
* positions.
*
*
* @version 1.01, Aug 19, 1998 ($Revision: 1.3 $)
* @author Ian Formanek (modified softwarebuero m&b
*/
public class AbsoluteLayout implements LayoutManager2, java.io.Serializable {
/** A mapping <Component, AbsoluteConstraints> */
protected java.util.Hashtable constraints = new java.util.Hashtable();
/** urspruengliche groesse des umgebenden containers*/
public Dimension bounds;
/** generated Serialized Version UID */
final static long serialVersionUID = -1919857869177070440L;
/**
* Adds the specified component with the specified name to
* the layout.
* @param name the component name
* @param comp the component to be added
*/
public void addLayoutComponent( String name, Component comp ) {
throw new IllegalArgumentException();
}
/**
* Removes the specified component from the layout.
* @param comp the component to be removed
*/
public void removeLayoutComponent( Component comp ) {
constraints.remove( comp );
}
/**
* Calculates the preferred dimension for the specified
* panel given the components in the specified parent container.
* @param parent the component to be laid out
*
* @see #minimumLayoutSize
*/
public Dimension preferredLayoutSize( Container parent ) {
int maxWidth = 0;
int maxHeight = 0;
for (java.util.Enumeration e = constraints.keys(); e.hasMoreElements();) {
Component comp = (Component)e.nextElement();
AbsoluteConstraints ac = (AbsoluteConstraints)constraints.get( comp );
Dimension size = comp.getPreferredSize();
int width = ac.getWidth() == -1 ? size.width : ac.getWidth();
int height = ac.getHeight() == -1 ? size.height : ac.getHeight();
if (ac.x + width > maxWidth) {
maxWidth = ac.x + width;
}
if (ac.y + height > maxHeight) {
maxHeight = ac.y + height;
}
}
return new Dimension( maxWidth, maxHeight );
}
/**
* Calculates the minimum dimension for the specified
* panel given the components in the specified parent container.
* @param parent the component to be laid out
* @see #preferredLayoutSize
*/
public Dimension minimumLayoutSize( Container parent ) {
int maxWidth = 0;
int maxHeight = 0;
for (java.util.Enumeration e = constraints.keys(); e.hasMoreElements();) {
Component comp = (Component)e.nextElement();
AbsoluteConstraints ac = (AbsoluteConstraints)constraints.get( comp );
Dimension size = comp.getMinimumSize();
int width = ac.getWidth() == -1 ? size.width : ac.getWidth();
int height = ac.getHeight() == -1 ? size.height : ac.getHeight();
if (ac.x + width > maxWidth) {
maxWidth = ac.x + width;
}
if (ac.y + height > maxHeight) {
maxHeight = ac.y + height;
}
}
return new Dimension( maxWidth, maxHeight );
}
/**
* Sets the original size of the parent container. Needs not
* to be called in any case.
*/
public void realizeSize( Dimension bounds ) {
bounds = new Dimension( bounds );
}
/**
* Lays out the container in the specified panel.
* @param parent the component which needs to be laid out
*/
public void layoutContainer( Container parent ) {
Dimension parentSize = parent.getSize();
if (bounds == null) {
bounds = new Dimension( parentSize );
}
for (java.util.Enumeration e = constraints.keys(); e.hasMoreElements();) {
Component comp = (Component)e.nextElement();
AbsoluteConstraints ac = (AbsoluteConstraints)constraints.get( comp );
Dimension size = comp.getPreferredSize();
int x = ac.x;
int y = ac.y;
int width = ac.getWidth() == -1 ? size.width : ac.getWidth();
int height = ac.getHeight() == -1 ? size.height : ac.getHeight();
if ((ac.policy & AbsoluteConstraints.X_PROP) != 0) {
x = (int)((double)ac.x / (double)bounds.width * (double)parentSize.width);
}
if ((ac.policy & AbsoluteConstraints.Y_PROP) != 0) {
y = (int)((double)ac.y / (double)bounds.height * (double)parentSize.height);
}
if ((ac.policy & AbsoluteConstraints.X_ABS) != 0) {
x = (parentSize.width - (bounds.width - ac.x));
}
if ((ac.policy & AbsoluteConstraints.Y_ABS) != 0) {
y = (parentSize.height - (bounds.height - ac.y));
}
if ((ac.policy & AbsoluteConstraints.X2_PROP) != 0) {
width = ((int)((double)(ac.x + width) / (double)bounds.width * (double)parentSize.width) - x);
}
if ((ac.policy & AbsoluteConstraints.Y2_PROP) != 0) {
height = ((int)((double)(ac.y + height) / (double)bounds.height * (double)parentSize.height) - y);
}
if ((ac.policy & AbsoluteConstraints.X2_ABS) != 0) {
int x2 = bounds.width - ac.x + width;
width = (parentSize.width - x - x2);
}
if ((ac.policy & AbsoluteConstraints.Y2_ABS) != 0) {
int y2 = bounds.height - ac.y + height;
height = (parentSize.height - y - y2);
}
comp.setBounds( x, y, width, height );
}
}
/**
* Adds the specified component to the layout, using the specified
* constraint object.
* @param comp the component to be added
* @param constr where/how the component is added to the layout.
*/
public void addLayoutComponent( Component comp, Object constr ) {
if (!(constr instanceof AbsoluteConstraints)) {
throw new IllegalArgumentException();
}
constraints.put( comp, constr );
}
/**
* Returns the maximum size of this component.
* @see java.awt.Component#getMinimumSize()
* @see java.awt.Component#getPreferredSize()
* @see LayoutManager
*/
public Dimension maximumLayoutSize( Container target ) {
return new Dimension( Integer.MAX_VALUE, Integer.MAX_VALUE );
}
/**
* Returns the alignment along the x axis. This specifies how
* the component would like to be aligned relative to other
* components. The value should be a number between 0 and 1
* where 0 represents alignment along the origin, 1 is aligned
* the furthest away from the origin, 0.5 is centered, etc.
*/
public float getLayoutAlignmentX( Container target ) {
return 0;
}
/**
* Returns the alignment along the y axis. This specifies how
* the component would like to be aligned relative to other
* components. The value should be a number between 0 and 1
* where 0 represents alignment along the origin, 1 is aligned
* the furthest away from the origin, 0.5 is centered, etc.
*/
public float getLayoutAlignmentY( Container target ) {
return 0;
}
/**
* Invalidates the layout, indicating that if the layout manager
* has cached information it should be discarded.
*/
public void invalidateLayout( Container target ) {
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -