GridBagLayout links oben platzieren!
JLearner
- java
Hallo
Ich habe ein GridBagLayout für mein JInternalFrame um die Komponenten zu platzieren. Soweit klappt alles. Nur - wie kriege ich es hin, dass alle Komponenten Links oben im JInternalFrame platziert werden? Wenn ich das JInternalFrame vergrössere bleiben alle Komponenten in der Mitte des JInternalFrames!
Gruss JLearner
Hallo,
Ich habe ein GridBagLayout für mein JInternalFrame um die Komponenten zu platzieren. Soweit klappt alles. Nur - wie kriege ich es hin, dass alle Komponenten Links oben im JInternalFrame platziert werden? Wenn ich das JInternalFrame vergrössere bleiben alle Komponenten in der Mitte des JInternalFrames!
Werd mal ein wenig genauer. Befindet sich im InternalFrame beispielweise
ein Panel, das dann das GridBagLayout verwendet? Oder verwendet das
InternalFrame direkt das GridBagLayout?
Gib am besten mal ein wenig(!) relevanten(!) Code an.
Gruß
Slyh
Also gut:
public class FrameForm
extends ChildFrame implements ActionListener
{
public JTextArea txtComment;
public JTextField txtID;
public int intCurrIndex=0;
GridBagLayout gbl;
public FrameForm(String strTitle)
{
super(strTitle);
cp.setBackground(Color.WHITE);
gbl = new GridBagLayout();
new LookFeel(this);
}
public void init() {
//Initialisiert Layout
final int LABELHEIGHT=1;
final int LABELWIDTH=40;
place(new JLabel("ID"),0,0,LABELWIDTH,LABELHEIGHT,1,1,20);
place(txtID = new JTextField(),0,1,FIELDWIDTH,FIELDHEIGHT,1,1,80);
//... und so weitere Felder...
***************************************************
public class ChildFrame
extends JInternalFrame
{
public Container cp;
public GridBagLayout gbl;
public GridBagConstraints gbc;
public ChildFrame(String strTitle)
{
super(strTitle);
cp = this.getContentPane();
gbl = new GridBagLayout();
gbc = new GridBagConstraints();
setIconifiable(true);
setMaximizable(true);
setResizable(true);
setClosable(true);
setDefaultCloseOperation(JInternalFrame.DISPOSE_ON_CLOSE);
}
public void place(JComponent comp, int row, int col, int width,int height)
{
place(comp,row,col,width,height,1,1,0);
}
public void place(JComponent comp, int row, int col, int width,int height,int rowspan,int colspan,int weightx)
{
cp.setLayout(gbl);
gbc.gridy = row;
gbc.gridx = col;
gbc.gridwidth = colspan;
gbc.gridheight = rowspan;
gbc.ipadx = width;
gbc.ipady = height;
gbc.anchor = GridBagConstraints.WEST;
gbc.insets = new Insets(1,3,1,1);
gbc.weightx = weightx;
gbc.fill = GridBagConstraints.BOTH;
gbl.setConstraints(comp,gbc);
cp.add(comp);
}
public void init(){ }
}
So sieht das aus..aber alle Felder werden beim vergrössern zentriert. Die Frage ist wie ich das JGridBagLayout im JInternalFrame links oben platzieren kann...?
Gruss JLearner
Hallo,
du setzt also das GridBagLayout direkt für die InternalFrames.
Wie mir scheint, bietet das GridBagLayout gar keine Möglichkeit das
eigene Gitternetz innerhalb des Containers auszurichten, wenn dieses
nicht den ganzen Platz des Containers einnimmt.
Bist du dir eigentlich sicher, daß du das Internalframe ab einer
bestimmten Größe nur einen Teil (bei dir die linke obere Ecke) des
zur Verfügung stehenden Platzes zur Darstellung der Komponenten
verwenden soll? Eigentlich machen sich riesige unbenutzte Flächen
in der Regel nicht so gut. Der Benutzer möchte durch das Vergrößern
von Fenstern eigentlich immer ein Ziel erreichen: Er möchte, daß die
Komponenten den zur Verfügung stehenden Platz auch nutzen.
Wie dem auch sei. Du kannst deinen Inhalt durch die Schachtelung von
Layoutmanagern in der linken oberen Ecke platzieren.
Füge dazu deine Komponenten nicht direkt in den InternalFrame ein,
sondern zuerst einmal in ein (J)Panel. Diesem Panel weist du -- wie
bisher dem InternalFrame -- das GridBagLayout zu und fügst dort alle
Komponenten ein. Eben wie bisher beim InternalFrame.
Das Panel fügst du (also einzige Komponente) in das InternalFrame
ein. Das InternalFrame erhält nicht mehr das GridBagLayout als
LayoutManager, sondern einen beliebigen anderen Layoutmanager, der
seinen Ursprung eben in der linken oberen Ecke hat. Das FlowLayout
sollte es hier beispielweise tun.
Gruß
Slyh
...danke Slyh, ich werde das mit den JPanels ausprobieren!
Gruss JLearner