jpanel 无法制作 7 行 2 列的网格布局

jpanel cannot make gridlayout with 7 rows and 2 cols

我想问一下我的代码是否有问题。我用 borderlayout 设置了我的框架。在中心部分,我想使用 gridlayout 其中有 7 行和 2 列。

        paneltengah= new JPanel();
        paneltengah.setLayout(new GridLayout(7,2));


        labelname = new JLabel(lbl_name,SwingConstants.LEFT);       
        labelusername = new JLabel(lbl_username,SwingConstants.LEFT);                                                                           
        labelpassword = new JLabel(lbl_password,SwingConstants.LEFT);               
        labelgender = new JLabel(lbl_gender,SwingConstants.LEFT);               
        labelemail = new JLabel(lbl_email,SwingConstants.LEFT);         
        labelhobby = new JLabel(lbl_hobby,SwingConstants.LEFT);             
        labelrole = new JLabel(lbl_role,SwingConstants.LEFT);

        textname = new JTextField(20);
        textusername = new JTextField(20);
        textpassword = new JPasswordField(20);
        textemail = new JTextField(20);
        comboboxhobby = new JComboBox();
        comboboxrole = new JComboBox();
        radiobuttonmale = new JRadioButton("Male");
        radiobuttonfemale = new JRadioButton("Female");
        ButtonGroup btngroup = new ButtonGroup();
        btngroup.add(radiobuttonmale);
        btngroup.add(radiobuttonfemale);



        paneltengah.add(labelname);
        paneltengah.add(labelusername);
        paneltengah.add(labelpassword);
        paneltengah.add(labelgender);
        paneltengah.add(labelemail);
        paneltengah.add(labelrole);
        paneltengah.add(labelhobby);

////        paneltengah.add(textname); when i open this, the layout become awkward      
////        paneltengah.add(textusername);
////        paneltengah.add(textpassword);
////        paneltengah.add(radiobuttonmale);
////        paneltengah.add(radiobuttonfemale);
////        paneltengah.add(comboboxhobby);
////        paneltengah.add(comboboxrole);


        pane.add(paneltengah, BorderLayout.CENTER);     

以下图片未打开评论显示

下图显示取消注释

我的代码有什么问题?

首先,GridLayout 在其关联的 Container 中均匀地调整所有组件的大小,这解释了为什么您的标签和字段大小相同。例如,如果您的 JPanel 中有一个 JTextArea 200 列 × 20 行,那么即使是最小的标签也会占用这么大的一个 space!

接下来,根据 GridLayout Javadoc,当 GridLayout 实例使用两个 non-zero 参数构造时,行数固定,行数列数根据放入 parent Container.

的组件数进行调整

我的建议是使用 BorderLayout 来设置主窗体布局。将您的标题放在 NORTH 并保留标签和字段的 CENTER(您当前的 JPanel)。

对于您的标签和字段,最简单的解决方案可能是使用 GridLayout(0, 2)(固定列数)。但是您的所有组件的大小仍然相同。

如果您需要更好地控制组件的大小(例如,字段比标签宽),那么我建议使用另一个布局管理器,例如 GridBagLayout。我知道管理起来更复杂,但使用 GridBagLayout 格式预览实用程序应该会有所帮助。这样的程序可以命名为 GridBagLab(我知道 David Geary 的书 Graphic Java 第 2 卷 — Swing 在其配套 CD 上有一个)。

https://www.youtube.com/watch?v=Ts5fsHXIuvI 上还有一个 GridBagLayout 教程。