/* AbsoluteLayout.java
usage example:
jPanel1.setLayout(new AbsoluteLayout());
bt = new JButton("Test");
jPanel1.add(bt, new AbsoluteConstraints(100, 100));
*/
import java.awt.*;
import java.io.*;
import java.util.*;
public class AbsoluteLayout implements LayoutManager2, Serializable {
static final long serialVersionUID = 0xe55b4b7098765c98L;
protected Hashtable constraints;
public AbsoluteLayout() {
constraints = new Hashtable();
}
public void addLayoutComponent(final String s, final Component component) {
throw new IllegalArgumentException();
}
public void removeLayoutComponent(final Component component) {
constraints.remove(component);
}
public Dimension preferredLayoutSize(final Container container) {
int i = 0;
int j = 0;
Enumeration enumeration = constraints.keys();
do {
if (!enumeration.hasMoreElements()) {
break;
}
Component component = (Component) enumeration.nextElement();
AbsoluteConstraints absoluteconstraints = (AbsoluteConstraints) constraints.get(component);
Dimension dimension = component.getPreferredSize();
int k = absoluteconstraints.getWidth();
if (k == -1) {
k = dimension.width;
}
int l = absoluteconstraints.getHeight();
if (l == -1) {
l = dimension.height;
}
if (absoluteconstraints.x + k > i) {
i = absoluteconstraints.x + k;
}
if (absoluteconstraints.y + l > j) {
j = absoluteconstraints.y + l;
}
} while (true);
return new Dimension(i, j);
}
public Dimension minimumLayoutSize(final Container container) {
int i = 0;
int j = 0;
Enumeration enumeration = constraints.keys();
do {
if (!enumeration.hasMoreElements()) {
break;
}
Component component = (Component) enumeration.nextElement();
AbsoluteConstraints absoluteconstraints = (AbsoluteConstraints) constraints.get(component);
Dimension dimension = component.getMinimumSize();
int k = absoluteconstraints.getWidth();
if (k == -1) {
k = dimension.width;
}
int l = absoluteconstraints.getHeight();
if (l == -1) {
l = dimension.height;
}
if (absoluteconstraints.x + k > i) {
i = absoluteconstraints.x + k;
}
if (absoluteconstraints.y + l > j) {
j = absoluteconstraints.y + l;
}
} while (true);
return new Dimension(i, j);
}
public void layoutContainer(final Container container) {
Component component;
AbsoluteConstraints absoluteconstraints;
int i;
int j;
for (Enumeration enumeration = constraints.keys(); enumeration.hasMoreElements(); component.setBounds(absoluteconstraints.x, absoluteconstraints.y, i, j)) {
component = (Component) enumeration.nextElement();
absoluteconstraints = (AbsoluteConstraints) constraints.get(component);
Dimension dimension = component.getPreferredSize();
i = absoluteconstraints.getWidth();
if (i == -1) {
i = dimension.width;
}
j = absoluteconstraints.getHeight();
if (j == -1) {
j = dimension.height;
}
}
}
public void addLayoutComponent(final Component component, final Object obj) {
if (!(obj instanceof AbsoluteConstraints)) {
throw new IllegalArgumentException();
} else {
constraints.put(component, obj);
return;
}
}
public Dimension maximumLayoutSize(final Container container) {
return new Dimension(0x7fffffff, 0x7fffffff);
}
public float getLayoutAlignmentX(final Container container) {
return 0.0F;
}
public float getLayoutAlignmentY(final Container container) {
return 0.0F;
}
public void invalidateLayout(final Container container) {
}
}
class AbsoluteConstraints implements Serializable {
static final long serialVersionUID = 0x490476a535ef832eL;
public int x;
public int y;
public int width;
public int height;
public AbsoluteConstraints(final Point point) {
this(point.x, point.y);
}
public AbsoluteConstraints(final int x1, final int y1) {
width = -1;
height = -1;
x = x1;
y = y1;
}
public AbsoluteConstraints(final Point point, final Dimension dimension) {
width = -1;
height = -1;
x = point.x;
y = point.y;
if (dimension != null) {
width = dimension.width;
height = dimension.height;
}
}
public AbsoluteConstraints(final int x1, final int y1, final int width1, final int height1) {
width = -1;
height = -1;
x = x1;
y = y1;
width = width1;
height = height1;
}
public int getX() {
return x;
}
public int getY() {
return y;
}
public int getWidth() {
return width;
}
public int getHeight() {
return height;
}
@Override
public String toString() {
return super.toString() + " [x=" + x + ", y=" + y + ", width=" + width + ", height=" + height + "]";
}
}