【问题标题】:java unreasonable jtextfield sizing issuejava不合理的jtextfield大小问题
【发布时间】:2015-02-13 02:33:58
【问题描述】:

我已经搜索了所有类似的问题,但我找不到解决方案。

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

    }
}

nametextocctext 非常小。 我尝试了 new JTextField(20) 和字符串版本, 我尝试了 setPreferredSize 作为上面的类, 我也尝试了 setColumn 但它们都不起作用。

【问题讨论】:

    标签: java swing jtextfield gridbaglayout preferredsize


    【解决方案1】:

    摆脱setPreferredSize(dim);。通过在顶层 Window 上调用 pack() 让 GUI 自己调整大小,您的问题可能会消失。您将容器的大小限制为可能小于最适合它的大小,并且通过这样做,GridBagLayout 将以一种不好的方式收缩其组件,包括您的 JTextField。

    【讨论】:

    • @VivianMaya:很高兴它有帮助。要查看实际情况,只需使用鼠标在上面的 JPanel 中重新调整 GUI 的大小,然后观察 JTextField 变小,但随后在某个临界大小时,会变得非常小且无法使用。
    【解决方案2】:

    如果您使用pack(),设置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);  
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-02-08
      • 1970-01-01
      • 1970-01-01
      • 2012-12-27
      • 2010-10-11
      • 1970-01-01
      相关资源
      最近更新 更多