Ich versuche momentan einen eigenen kleinen Layoutmanager zu schreiben, welcher eine Kordinatensystem erzeugt auf welchen man die Componenten dann plazieren kann und ihnen ihre größe zuweisen kann.Der Layoutmanger soll dies dann am ende immer an die aktuelle fenstergröße anpassen.
Mein Problem ist momentan, dass ich diese Eigenschaften später noch ändern will, zb das mann buttons verschieben oder ihre Größe ändern kann
//edit Lösung gefunden
ist relativ einfach zum nutzen
Layout erstellen durch
setLayout(new CoordLayout(x,y)); //größe des Koordinatensystems bestimmen
und dann
.add(component,new prefBounds(x,y,w,h);//Position im system festlegen (mit float)
Mein Problem ist momentan, dass ich diese Eigenschaften später noch ändern will, zb das mann buttons verschieben oder ihre Größe ändern kann
//edit Lösung gefunden
ist relativ einfach zum nutzen
Layout erstellen durch
setLayout(new CoordLayout(x,y)); //größe des Koordinatensystems bestimmen
und dann
.add(component,new prefBounds(x,y,w,h);//Position im system festlegen (mit float)
Java:
class CoordLayout implements LayoutManager2
{
float x;
float y;
private HashMap<Component,prefBounds> components;
public CoordLayout(float x,float y) {
super();
this.x=x;
this.y=y;
components = new HashMap<Component,prefBounds>();
}
public void addLayoutComponent(Component comp, Object constraints){
if (constraints instanceof prefBounds){
components.put(comp,(prefBounds) constraints);
}else {
try {
throw new missingRectangle("missing prefBounds");
} catch (missingRectangle e) {
e.printStackTrace();
}
}
}
public void layoutContainer(Container parent)
{
for (Component key :components.keySet()){
prefBounds z = components.get(key);
float xfact = (float)parent.getWidth()/x;
float yfact = (float)parent.getHeight()/y;
key.setLocation((int)(xfact * z.x), (int) (yfact*z.y));
key.setSize((int) (z.w*xfact), (int)(z.h*yfact));
System.out.println(z.w);
}
}
public void removeLayoutComponent(Component comp)
{
components.remove(comp);
}
public Dimension preferredLayoutSize(Container parent)
{
return parent.getSize();
}
public void invalidateLayout(Container target) {}
public void addLayoutComponent(String name, Component comp) {
}
public float getLayoutAlignmentY(Container target) { return 0; }
public float getLayoutAlignmentX(Container target) { return 0; }
public Dimension maximumLayoutSize(Container target) { return(preferredLayoutSize(target)); }
public Dimension minimumLayoutSize(Container parent) { return(preferredLayoutSize(parent)); }
}
class missingRectangle
extends Exception
{
public missingRectangle()
{
}
public missingRectangle(String s)
{
super(s);
}
}
class prefBounds {
float x;
float y;
float w;
float h;
public prefBounds(float x,float y,float w,float h){
this.x = x;
this.y = y;
this.w = w;
this.h = h;
}
}
Zuletzt bearbeitet: