java unreasonable jtextfield sizing issue
Asked Answered
R

2

6

I have searched all problems like this but I couldn't find the solution.

public class FormPanel extends JPanel
{
    private JLabel namelabel;
    private JLabel occlabel;
    private JTextField nametext;
    private JTextField occtext;
    private JButton okButton;

    public FormPanel() {
        Dimension dim = getPreferredSize();
        dim.width = 250;
        setPreferredSize(dim);
        namelabel = new JLabel("Name : ");
        occlabel = new JLabel("Occupation : ");
        nametext = new JTextField();
        nametext.setPreferredSize(new Dimension(80,20));
        occtext = new JTextField();
        occtext.setColumns(20);
        okButton = new JButton("OK");

        Border inner = BorderFactory.createTitledBorder("Add Person : ");
        Border outer = BorderFactory.createEmptyBorder(5,5,5,5);

        setBorder(BorderFactory.createCompoundBorder(inner,outer));
        setLayout(new GridBagLayout());
        GridBagConstraints gc = new GridBagConstraints();
        gc.gridx = 0;
        gc.gridy = 0;
        gc.weightx = 1;
        gc.weighty = 1;
        gc.fill = GridBagConstraints.NONE;

        add(namelabel,gc);
        gc.gridx = 1;
        gc.gridy = 0;
        add(nametext,gc);

        gc.gridy = 1;
        gc.gridx = 0;
        add(occlabel,gc);

        gc.gridy = 1;
        gc.gridx = 1;
        add(occtext,gc);

        gc.gridy = 2;
        gc.gridx = 1;
        add(okButton,gc);

    }
}

nametext and occtext are extremely small. I tried new JTextField(20) , and string version, I tried setPreferredSize as above class, and also I tried setColumn but none of them works.

Reg answered 15/12, 2014 at 2:30 Comment(0)
N
6

Get rid of setPreferredSize(dim);. Let the GUI size itself via calling pack() on the top-level Window and your problem will likely go away. You're constraining the size of the container likely to smaller than is best for it, and by doing so, the GridBagLayout will then shrink its components, including your JTextFields, in a bad way.

Nazareth answered 15/12, 2014 at 2:33 Comment(0)
A
0

In case of you are use pack() it might be a good idea to set dim.height.

Dimension dim = getPreferredSize();
dim.width = 500;
dim.height = 200;
setPreferredSize(dim);

namelabel = new JLabel("Name : ");
nametext = new JTextField();

occlabel = new JLabel("Occupation : ");
occtext = new JTextField();

okButton = new JButton("OK");

Border inner = BorderFactory.createTitledBorder("Add Person : ");
Border outer = BorderFactory.createEmptyBorder(5, 5, 5, 5);
setBorder(BorderFactory.createCompoundBorder(inner, outer));

GridBagLayout gl = new GridBagLayout();
GridBagConstraints gc = new GridBagConstraints();
setLayout(gl);

gc.fill = GridBagConstraints.HORIZONTAL;
gc.gridwidth = 1;
add(namelabel, gc);

gc.gridy = 1;
add(occlabel, gc);

gc.gridx = 1;
gc.gridy = 0;
gc.weightx = .5;
add(nametext, gc);

gc.gridy = 1;
add(occtext, gc);

gc.fill = GridBagConstraints.NONE;
gc.anchor = GridBagConstraints.EAST;
gc.gridy = 2;
gc.gridx = 1;
gc.weightx = 0;
gc.insets = new Insets(10,0,0,0);
add(okButton, gc);  
Aardwolf answered 15/12, 2014 at 3:12 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.