GridBagLayout goes crazy
I have a GridBagLayout, but one label (maxSizeLbl) goes crazy and an other one (maxDateLbl) isnt visible, anyone knows what I've done wrong?
Here is the Picture:
And here is the Code:
import java.awt.Component;
import java.awt.Container;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import javax.swing.JButton;
import javax.swing.JCheckBox;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;
public class SearchGUI {
public static void main(String args[]) {
JFrame frame = new JFrame("Search Files");
JPanel panel = new JPanel(开发者_运维百科);
JTextField rootTF = new JTextField(20);
JTextField containsTF = new JTextField(20);
JTextField containsNotTF = new JTextField(20);
JTextField minSizeTF = new JTextField(10);
JTextField maxSizeTF = new JTextField(10);
JTextField suffixTF = new JTextField(10);
JTextField prefixTF= new JTextField(10);
JTextField minDateTF = new JTextField(10);
JTextField maxDateTF = new JTextField(10);
JCheckBox hiddenCB = new JCheckBox("search hidden");
JCheckBox recursiveCB = new JCheckBox("search subfolders");
JButton searchBtn = new JButton("search");
JLabel rootLbl = new JLabel("search in: ", JLabel.CENTER);
JLabel containsLbl = new JLabel("Filename contains: ", JLabel.CENTER);
JLabel containsNotLbl = new JLabel(" Filename contains not", JLabel.CENTER);
JLabel minSizeLbl = new JLabel("min. Size", JLabel.CENTER);
JLabel maxSizeLbl = new JLabel("max. Size", JLabel.CENTER);
JLabel suffixLbl = new JLabel("Filetypes", JLabel.CENTER);
JLabel prefixLbl = new JLabel("begins with", JLabel.CENTER);
JLabel minDateLbl = new JLabel("min. Date", JLabel.CENTER);
JLabel maxDateLbl = new JLabel("max Date", JLabel.CENTER);
frame.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );
Container c = frame.getContentPane();
GridBagLayout gbl = new GridBagLayout();
c.setLayout(gbl);
// addComponent(c, gbl, );
// x y w h wx wy
addComponent(c, gbl, rootLbl, 0, 0, 2, 1, 1.0, 0.0);
addComponent(c, gbl, rootTF, 0, 1, 2, 1, 1.0, 0.0);
addComponent(c, gbl, containsLbl, 0, 2, 2, 1, 1.0, 0.0);
addComponent(c, gbl, containsTF, 0, 3, 2, 1, 1.0, 0.0);
addComponent(c, gbl, containsNotLbl, 0, 4, 2, 1, 1.0, 0.0);
addComponent(c, gbl, containsNotTF, 0, 5, 2, 1, 1.0, 0.0);
addComponent(c, gbl, minSizeLbl, 0, 6, 1, 1, 1.0, 0.0);
addComponent(c, gbl, maxSizeLbl, 1, 6, 1, 1, 1.0, 0.0);
addComponent(c, gbl, minSizeTF, 0, 7, 1, 1, 1.0, 0.0);
addComponent(c, gbl, maxSizeTF, 1, 7, 1, 1, 1.0, 0.0);
addComponent(c, gbl, suffixLbl, 0, 8, 2, 1, 1.0, 0.0);
addComponent(c, gbl, suffixTF, 0, 9, 2, 1, 1.0, 0.0);
addComponent(c, gbl, minDateLbl, 0, 10, 1, 1, 1.0, 0.0);
addComponent(c, gbl, maxSizeLbl, 1, 10, 1, 1, 1.0, 0.0);
addComponent(c, gbl, minDateTF, 0, 11, 1, 1, 1.0, 0.0);
addComponent(c, gbl, maxDateTF, 1, 11, 1, 1, 1.0, 0.0);
addComponent(c, gbl, searchBtn, 0, 12, 2, 1, 1.0, 0.0);
frame.setSize(gbl.preferredLayoutSize(c));
frame.setVisible(true);
}
static void addComponent( Container cont,
GridBagLayout gbl,
Component c,
int x, int y,
int width, int height,
double weightx, double weighty )
{
GridBagConstraints gbc = new GridBagConstraints();
gbc.fill = GridBagConstraints.BOTH;
gbc.gridx = x; gbc.gridy = y;
gbc.gridwidth = width; gbc.gridheight = height;
gbc.weightx = weightx; gbc.weighty = weighty;
gbl.setConstraints( c, gbc );
cont.add( c );
}
}
Thanks in advance.
You added the maxSizeLbl twice (instead of maxDateLbl)
Make sure you thoroughly study the indispensable GridBagLayout
tutorial at http://madbean.com/anim/totallygridbag/ first.
It seems like you don't use any IDE. Eclipse shows a curious yellow squiggly line below maxDateLbl
--it's not being used. And if you click on maxSizeLbl
, you'll see it's being used twice.
Replace the second maxSizeLbl
with maxDateLbl
.
And watch the tutorial again.
Including Geoffrey's discovery about maxSizeLbl/maxDateLbl, this is what worked for me and assumes the field labels occupy the left side of the text field and not the top. (Only the relevant section of code shown.)
addComponent(c, gbl, rootLbl, 0, 0, 1, 1, 1.0, 0.0);
addComponent(c, gbl, rootTF, 1, 0, 3, 1, 1.0, 0.0);
addComponent(c, gbl, containsLbl, 0, 1, 1, 1, 1.0, 0.0);
addComponent(c, gbl, containsTF, 1, 1, 3, 1, 1.0, 0.0);
addComponent(c, gbl, containsNotLbl, 0, 2, 1, 1, 1.0, 0.0);
addComponent(c, gbl, containsNotTF, 1, 2, 3, 1, 1.0, 0.0);
addComponent(c, gbl, minSizeLbl, 0, 3, 1, 1, 1.0, 0.0);
addComponent(c, gbl, minSizeTF, 1, 3, 1, 1, 1.0, 0.0);
addComponent(c, gbl, maxSizeLbl, 2, 3, 1, 1, 1.0, 0.0);
addComponent(c, gbl, maxSizeTF, 3, 3, 1, 1, 1.0, 0.0);
addComponent(c, gbl, suffixLbl, 0, 4, 1, 1, 1.0, 0.0);
addComponent(c, gbl, suffixTF, 1, 4, 3, 1, 1.0, 0.0);
addComponent(c, gbl, minDateLbl, 0, 5, 1, 1, 1.0, 0.0);
addComponent(c, gbl, minDateTF, 1, 5, 1, 1, 1.0, 0.0);
addComponent(c, gbl, maxDateLbl, 2, 5, 1, 1, 1.0, 0.0);
addComponent(c, gbl, maxDateTF, 3, 5, 1, 1, 1.0, 0.0);
addComponent(c, gbl, searchBtn, 0, 6, 4, 1, 1.0, 0.0);
精彩评论