2014-07-20 77 views
-2

我一直在尝试使gridlayout给出与我在代码中指定的列相同的列,而我获得了3倍的规范数量,对于为什么它是这样以及如何解决此问题的任何想法将不胜感激。如何使GridLayout尊重列设置?

我有一个ArrayList类型的字符串大小为150字符串对象每个字符串都是JButton上的文本,然后JButton添加到带有gridLayout管理器的JPanel我想创建15行和10个colomns。

下面是代码

JPanel panel = new JPanel(); 
Gridlayout gridlayout = new GridLayout(); 
gridlayout.setRows(15); 
gridlayout.setColumns(10); 
gridlayout.setHgap(2); 
gridlayout.setVgap(6); 
panel.setLayout(gridlayout); 
// now arraylist of type string, each string on Jbutton 
for(ArrayList string: strings){ 
    panel.add(new JButton (string)); 
} 
+0

设置的行数为0,给人的列数更多地考虑当容器被布置 – MadProgrammer

+0

@MadProgrammer当我设置的行数为0,colomn保持它给了我下面的错误信息相同:“java.lang.IllegalArgumentException:行和列不能都为零” – user2586759

+1

为了更好地提供帮助,请发布[MCVE](http://stackoverflow.com/help/mcve)(最小,完整,可验证示例)。 –

回答

0

好吧,也许有没有你的数组中正好150串。 如果我们将更多的 按钮放入网格,GridLayout管理器不会投诉。它只是创建一个新的列或行。

在以下示例中,我创建了一个包含2列和2行的网格 ,但设法在其中添加了八个按钮,没有任何错误消息。

package com.zetcode; 

import java.awt.EventQueue; 
import java.awt.GridLayout; 
import javax.swing.JButton; 
import javax.swing.JFrame; 
import javax.swing.JPanel; 


public class GridLayoutDemo extends JFrame { 

    public GridLayoutDemo() { 

     initUI(); 

     setTitle("Grid of buttons"); 
     setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     setLocationRelativeTo(null); 
    } 

    private void initUI() { 

     JPanel pnl = new JPanel(new GridLayout(2, 2)); 

     pnl.add(new JButton("Button")); 
     pnl.add(new JButton("Button")); 
     pnl.add(new JButton("Button")); 
     pnl.add(new JButton("Button")); 
     pnl.add(new JButton("Button")); 
     pnl.add(new JButton("Button")); 
     pnl.add(new JButton("Button")); 
     pnl.add(new JButton("Button")); 

     add(pnl); 

     pack(); 
    } 

    public static void main(String[] args) { 

     EventQueue.invokeLater(new Runnable() { 
      @Override 
      public void run() { 
       GridLayoutDemo ex = new GridLayoutDemo(); 
       ex.setVisible(true); 
      } 
     }); 
    } 
} 

也就是说,应该避免使用GridLayout。还有其他简单的布局管理器。 在实践中,发现GridLayout可能有用的情况非常罕见。更好的学习&使用一些更强大的布局管理器,如MigLayoutGroupLayout

Grid of buttons