2013-05-04 100 views
3

我有主面板,我正在將組件動態添加到該面板中。具有固定寬度和高度的組件的GridLayout?

主面板的GridLayout限制爲3列0行(0行將允許行無限增長),但問題是我希望所有組件具有固定的大小或組件的優先大小。

我可以用其他的佈局,如果它符合我的要求......但現在只有GridLayout的讓我列限制爲3 ...

...我忘了提,主面板添加到JScrollPane的,所以我可以垂直滾動。

+0

'我可以用其他的佈局,如果它符合我的要求...' - 是的,這是你需要做什麼。 GridLayout總是調整組件大小。嘗試GridBagLayout。 – camickr 2013-05-04 00:04:10

+0

從描述中很難分辨出來,但是我會建議使用像GridBagLayout甚至FlowLayout這樣的東西,它們(如果配置正確的話)會尊重組件的首選大小(如果它們有空間的話)... – MadProgrammer 2013-05-04 00:04:55

+0

@ camickr如何將GridBagLayout限制爲3列? – jovanMeshkov 2013-05-04 00:08:17

回答

2

要做到這一點的一種方法是使用JPanels。 GridLayout將伸展你的組件,但是如果你將組件包裝在一個JPanel中,那麼JPanel會被拉伸。由於JPanel使用FlowLayout,它不擴展組件,因此組件保持其首選大小。

下面是一個使用JButton的例子。注意我如何將它們添加到每個循環的(新)JPanel中,然後將面板添加到網格佈局。

import javax.swing.*; 

    public class GridLayout { 
    public static void main(String[] args) { 
     SwingUtilities.invokeLater(new Runnable() { 
      public void run() { 

       JFrame frame = new JFrame(); 

       frame.setLayout(new java.awt.GridLayout(0, 3)); 
       for(int i = 0; i < 21; i++) { 
       JPanel panel = new JPanel(); // Make a new panel 
       JButton button = new JButton("Button "+i); 
       panel.add(button); // add the button to the panel... 
       frame.add(panel); // ...then add the panel to the layout 
       } 
       frame.pack(); 
       frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
       frame.setLocationRelativeTo(null); 
       frame.setVisible(true); 
      } 
     }); 
    } 
    } 
相關問題