JLearner: GridBagLayout links oben platzieren!

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

  1. 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

    1. 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

      1. 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

        1. ...danke Slyh, ich werde das mit den JPanels ausprobieren!

          Gruss JLearner