2014-07-20 114 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