2010-11-06 29 views
1

我試圖防止在一個JPanel的GridLayout的從完全填充所述細胞和忽略組件在GridLayout的機智的JPanel填充錯誤

我使用此代碼部件的任何的setSize網格:

import javax.swing.*; 
import java.awt.*; 

public class GrideComponents{ 
    public static void main(String[] args) { 
    JFrame frame = new JFrame("Laying Out Components in a Grid"); 
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    JPanel panel = new JPanel(new GridLayout(5,2,0,0)); 
    panel.add(new JLabel("Enter name")); 
    JTextField a = new JTextField(5); 
    a.setSize(10, 10); 
    panel.add(a); 
    panel.add(new JLabel("Enter Roll")); 
    panel.add(new JTextField(3)); 
    panel.add(new JLabel("Enter Class")); 
    panel.add(new JTextField(3)); 
    panel.add(new JLabel("Enter Total Marks")); 
    panel.add(new JTextField(3)); 
    panel.add(new JButton("Ok")); 
    panel.add(new JButton("Cancel")); 
    frame.add(panel); 
    frame.setSize(400,400); 
    frame.setVisible(true); 
    } 
} 

每個組件都填充格里斯單元格,而不是指定的大小。

謝謝

回答

1

閱讀關於Using Layout Managers的Swing教程,以便了解佈局管理器如何工作的基礎知識。

GridLayout將所有組件的大小調整爲相同大小。

創建表單時,您通常會使用不同的佈局管理器嵌套不同的面板以獲得所需的效果。

在這種情況下,您可以使用FlowLayout作爲按鈕。然後,您可以使用GridBagLayout或SpringLayout作爲其他組件。

+0

謝謝你的回答,我會嘗試你的建議。與此同時,我剛創建了一些網格佈局的面板,以更好地放置我的組件。 – 2010-11-06 23:01:54

1

您是否嘗試過設置setMaximumSize和setPreferredSize?

無論如何,我建議您嘗試MiGLayout滿足您的所有佈局需求。你會因簡單而感到驚訝!

+0

GridLayout是一個簡單的規則佈局管理器。由於與jackrabbit所解釋的相同的原因,我打算投降。我相信在使用/推薦第三方庫之前,人們應該知道默認版面管理器的工作原理。 – camickr 2010-11-06 15:29:15

+0

雖然我同意這一點,但我相信MiGLayout可能是個例外,因爲a)這個單一的佈局管理器可以替換所有內置的管理器b)它的尺寸非常小(〜75 kb)c)http://bugs.sun .com/bugdatabase/view_bug.do?bug_id = 6530906(許多人希望它被包含在JDK 7中) – pek 2010-11-06 16:21:59

1

GridLayout的全部要點是在規則網格中佈局組件。您的setSize調用將被佈局管理器覆蓋。可能setPreferredSizesetMaximumSize可能會起作用,但由佈局經理決定是否考慮到它們。

+0

-1,使用setPreferredSize()或setMaximumSize()在使用GridLayout時不起作用。閱讀API文檔或閱讀Swing教程。 GridLayout的全部要點是每個組件的大小都調整爲添加到網格中的最大組件的大小。 – camickr 2010-11-06 15:26:05

+0

這就是爲什麼我說:「可能...可能會工作,但直到佈局經理」。 OP可以閱讀文檔,不是嗎? – jackrabbit 2010-11-06 20:37:01