2013-03-12 27 views
1

嘿我做了3 for循环来创建Jbutton将3个不同的阵列。然后我将其放入Gridlayout。左侧和右侧的结果很好,但中心只会填满面板。的Java:JButton的数组不会改变大小

这里是我的右侧代码:

 rightPanel = new JPanel(); 
    rightPanel.setLayout(new GridLayout(12, 4, 5, 5)); 
    rightPanel.setBorder(new EmptyBorder(10 ,10 ,10 ,10)); 


    for (int a = 0; a < 12; a++) { 
     for (int b = 0; b < 4; b++) { 
      battons[b][a] = new feedbackKnop.RechterKnop(); 
      battons[b][a].setPreferredSize(new Dimension(50, 50)); 
      rightPanel.add(battons[b][a]); 
      battons[b][a].setEnabled(false); 
     } 
    } 

这是我为中心的代码:

 btnPanel = new JPanel(); 
    btnPanel.setLayout(new GridLayout(12, 4, 5, 5)); 
    btnPanel.setBorder(new EmptyBorder(10 ,10 ,10 ,10)); 

    for (int i = 0; i < 12; i++) { 
     for (int j = 0; j < 4; j++) { 
      buttons[j][i] = new KleurenButton(""); 
      buttons[j][i].setPreferredSize(new Dimension (50, 50)); 
      btnPanel.add(buttons[j][i]); 
      buttons[j][i].setEnabled(false); 

     } 

    } 

我希望它有大小有如圆圈右侧

结果:

result

+0

什么是您使用了三个小组的布局管理器。它看起来像'BorderLayout' – MadProgrammer 2013-03-12 21:40:24

+0

是的,它的BorderLayout – Glenndisimo 2013-03-12 21:41:40

+0

@Glenndisimo'BorderLayout'总是给人边界的最小空间和中心空间的其余部分。 – 2013-03-12 21:46:28

回答

1

的网格布局使所有网格是相同的大小和BorderLayout的扩展中心,以填补窗口。要解决这个问题,您需要强制修复窗口大小(或以某种宽高比),或者选择不会自动扩展其组件的不同布局。 GroupLayout非常受欢迎。

1

正如评论者认为,这是BorderLayout的一个问题。 BorderLayout有一个“贪婪的”CENTER面板,这意味着默认情况下它会将任何JComponent在那里伸展到整个尺寸。这与使用preferredSize的边界(NORTH,SOUTH等)不同。这就是为什么你的右和左面板没有拉伸。

一个简单的解决方案(没有剧烈的变化到你的布局)可能是一个JPanel添加到中心,给它的FlowLayout,然后添加你的中心网格面板这一点。这并不理想,但可能是一种快速创建视图的原型。