jpanel无法使用7行和2列进行gridlayout

时间:2015-11-14 14:33:29

标签: java jpanel grid-layout border-layout

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

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

在不打开评论的情况下显示以下图片

enter image description here

以下图片显示为取消注释

enter image description here

我的代码出了什么问题?

1 个答案:

答案 0 :(得分:0)

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

接下来,根据GridLayout Javadoc,当GridLayout实例构造有两个非零参数时,行数得到修复,列数根据数量调整组件放入父Container

我建议使用BorderLayout来设置主表单布局。将标题置于NORTH,并保留CENTER标签和字段(您当前的JPanel)。

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

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

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