Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > comp.lang.java.gui > #1494

Re: GridBagLayout not beh

From "Axel Hallez" <axel.hallez@THRWHITE.remove-dii-this>
Subject Re: GridBagLayout not beh
Message-ID <f077fo$ml2$1@gaudi2.UGent.be> (permalink)
Newsgroups comp.lang.java.gui
References <4625ea23$0$25471$5a62ac22@per-qv1-newsreader-01.iinet.net.au>
Date 2011-04-27 15:33 +0000
Organization TDS.net

Show all headers | View raw


  To: comp.lang.java.gui
Qu0ll wrote:
> I have a problem with GridBagLayout that I would appreciate some help 
> with in solving.
> 
> In the following simple example I am trying to have a user label and 
> text field plus a password label and field evenly spaced across the 
> panel with a database field below it and a button all the way over to 
> the right taking up very little space.  To do this I have set up a 2 x 
> 16 grid but it's not behaving as I believe I am specifying it.  The 
> problem is that the button is taking up the same amount of space as the 
> password field even though the password field has a grid width of 4 and 
> the button only 1.  The result is that the top line is not evenly spaced 
> and too much room is allocated for the button.
> 
> Why is this?  What's wrong with my GridBagLayout definition or usage?
> 

First of all, you seem to think that the gridwidth is used to determine 
the size ratios of the components (eg. a component with gridwidth 2 must 
be double as wide as one with gridwidth 1).
This is not true. The width of a column is determined by the size of the 
components in that column.
However, if you have a component with a gridwidth of 2 (or more), gb 
layout makes sure that the total width of both columns is at least the 
size of the component. If one of those colums has no other components 
(that have their anchor in that column) this column is assigned a width 
of 0 and all of the width of the component is assigned to the other 
column. This is why the last column in your layout is as wide as the 
password field.

If there is space left in the container, the remaining space is 
distributed over the columns. The weights of the columns determines how 
much extra space is allocated to each column.

As far as I can see, the exact layout you want te achieve is not 
possible using gridbaglayout. The closest I could get is putting the 
dbButton next to the password field.

I've changed your code in this sense.

Hope this helps,
Axel Hallez



import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.EventQueue;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.Insets;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JPasswordField;
import javax.swing.JTextField;

public class GBTest extends JFrame {

private JPanel panel = new JPanel();
private JLabel userLabel = new JLabel("User:");
private JLabel passwordLabel = new JLabel("Password:");
private JLabel dbLabel = new JLabel("Database:");
private JTextField userTextField = new JTextField();
private JTextField dbTextField = new JTextField();
private JPasswordField passwordField = new JPasswordField();
private JButton dbButton = new JButton("...");

public GBTest() {
  setLayout(new BorderLayout());
  panel.setLayout(new GridBagLayout());

  userLabel.setText("User:");
  GridBagConstraints gbc = new GridBagConstraints();
  gbc.gridx = 0;
  gbc.gridy = 0;
  gbc.gridwidth = 1;
  gbc.weightx = 0.0;
  gbc.anchor = GridBagConstraints.EAST;
  gbc.insets = new Insets(0, 4, 18, 0);
  gbc.ipadx = 0;
  panel.add(userLabel, gbc);

  gbc.gridx = 1;
  gbc.gridy = 0;
  gbc.gridwidth = 1;
  gbc.anchor = GridBagConstraints.WEST;
  gbc.fill = GridBagConstraints.HORIZONTAL;
  gbc.weightx = 1.0;
  gbc.weighty = 0.0;
  gbc.insets = new Insets(0, 4, 18, 4);
  gbc.ipadx = 0;
  panel.add(userTextField, gbc);

  gbc = new GridBagConstraints();
  gbc.gridx = 2;
  gbc.gridy = 0;
  gbc.weightx = 0.0;
  gbc.gridwidth = 1;
  gbc.anchor = GridBagConstraints.EAST;
  gbc.insets = new Insets(0, 4, 18, 0);
  gbc.ipadx = 0;
  panel.add(passwordLabel, gbc);

  gbc.gridx = 3;
  gbc.gridy = 0;
  gbc.gridwidth = 1;
  gbc.anchor = GridBagConstraints.WEST;
  gbc.fill = GridBagConstraints.HORIZONTAL;
  gbc.weightx = 1.0;
  gbc.weighty = 0.0;
  gbc.insets = new Insets(0, 4, 18, 8);
  gbc.ipadx = 0;
  panel.add(passwordField, gbc);

  gbc.gridx = 0;
  gbc.gridy = 1;
  gbc.gridwidth = 1;
  gbc.weightx = 0.0;
  gbc.anchor = GridBagConstraints.EAST;
  gbc.insets = new Insets(0, 4, 18, 0);
  gbc.ipadx = 0;
  panel.add(dbLabel, gbc);

  gbc.gridx = 1;
  gbc.gridy = 1;
  gbc.gridwidth = 3;
  gbc.anchor = GridBagConstraints.WEST;
  gbc.fill = GridBagConstraints.HORIZONTAL;
  gbc.weightx = 0;
  gbc.weighty = 0.0;
  gbc.insets = new Insets(0, 4, 18, 0);
  gbc.ipadx = 0;
  panel.add(dbTextField, gbc);

  gbc.gridx = 4;
  gbc.gridy = 1;
  gbc.gridwidth = 1;
  gbc.fill = GridBagConstraints.NONE;
  gbc.anchor = GridBagConstraints.EAST;
  gbc.weightx = 0.0;
  gbc.weighty = 0.0;
  gbc.insets = new Insets(0, 4, 18, 8);
  gbc.ipadx = 0;
  panel.add(dbButton, gbc);

  add(panel, BorderLayout.CENTER);

  pack();
  setPreferredSize(new Dimension(400, 250));
  setSize(new Dimension(400, 250));
  setLocationRelativeTo(null);
  setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}

public static void main(String[] args) {
  EventQueue.invokeLater(new Runnable() {
   public void run() {
    new GBTest().setVisible(true);
   }
  });
}
}

---
 * Synchronet * The Whitehouse BBS --- whitehouse.hulds.com --- check it out free usenet!
--- Synchronet 3.15a-Win32 NewsLink 1.92
Time Warp of the Future BBS - telnet://time.synchro.net:24

Back to comp.lang.java.gui | Previous | NextPrevious in thread | Next in thread | Find similar | Unroll thread


Thread

GridBagLayout not behavin "Qu0ll" <qu0ll@THRWHITE.remove-dii-this> - 2011-04-27 15:33 +0000
  Re: GridBagLayout not beh "Ian Wilson" <ian.wilson@THRWHITE.remove-dii-this> - 2011-04-27 15:33 +0000
    Re: GridBagLayout not beh "Qu0ll" <qu0ll@THRWHITE.remove-dii-this> - 2011-04-27 15:33 +0000
      Re: GridBagLayout not beh "Ian Wilson" <ian.wilson@THRWHITE.remove-dii-this> - 2011-04-27 15:33 +0000
        Re: GridBagLayout not beh "Qu0ll" <qu0ll@THRWHITE.remove-dii-this> - 2011-04-27 15:33 +0000
      Re: GridBagLayout not beh "Ian Wilson" <ian.wilson@THRWHITE.remove-dii-this> - 2011-04-27 15:33 +0000
        Re: GridBagLayout not beh "Qu0ll" <qu0ll@THRWHITE.remove-dii-this> - 2011-04-27 15:33 +0000
          Re: GridBagLayout not beh "Ian Wilson" <ian.wilson@THRWHITE.remove-dii-this> - 2011-04-27 15:33 +0000
  Re: GridBagLayout not beh "Axel Hallez" <axel.hallez@THRWHITE.remove-dii-this> - 2011-04-27 15:33 +0000
    Re: GridBagLayout not beh "Qu0ll" <qu0ll@THRWHITE.remove-dii-this> - 2011-04-27 15:33 +0000
      Re: GridBagLayout not beh "Andrew Thompson" <andrew.thompson@THRWHITE.remove-dii-this> - 2011-04-27 15:33 +0000

csiph-web