Re: GridBagLayout not behaving as specified



Qu0ll wrote:
"Ian Wilson" <scobloke2@xxxxxxxxxxxxx> wrote in message news:46273424$0$10730$db0fefd9@xxxxxxxxxxxxxxxxx

import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.EventQueue;
import java.awt.GridBagConstraints;
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;

import net.miginfocom.swing.MigLayout;

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(10);
private JTextField dbTextField = new JTextField(14);
private JPasswordField passwordField = new JPasswordField(8);
private JButton dbButton = new JButton("...");

public GBTest() {
setLayout(new BorderLayout());
panel.setLayout(new MigLayout("wrap 4"));

panel.add(userLabel);
panel.add(userTextField);
panel.add(passwordLabel);
panel.add(passwordField, "span 2");
panel.add(dbLabel);
panel.add(dbTextField, "span 3");
panel.add(dbButton);

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);
}
});
}
}


Thanks Ian. I am impressed with the conciseness of this layout but unfortunately when I run that it puts the button on the next line and not next to the text field as desired. Do you get the same result? I have just downloaded the latest MiGLayout and am using Java 6 Update 2.


I must have an older version of MigLayout.

1) Try

panel.setLayout(new MigLayout()); // ***

panel.add(userLabel);
panel.add(userTextField);
panel.add(passwordLabel);
panel.add(passwordField, "span 2, wrap"); // ***
panel.add(dbLabel);
panel.add(dbTextField, "span 3");
panel.add(dbButton);

2) If that doesn't work read
http://www.miglayout.com/QuickStart.pdf
http://www.miglayout.com/whitepaper.html

I'd bear in mind how long you have spent learning GridBagLayout so far and allow yourself at least a tenth of that time to read the above documents and learn the basics of MigLayout.

MigLayout has some powerful, and hence complex looking, options, so don't try to understand all of them to start with. As you can see, you usually only need a very few directives to get the layout you want.
.


Quantcast