Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
Groups > comp.lang.java.gui > #1494
| 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 |
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 | Next — Previous in thread | Next in thread | Find similar | Unroll 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