2010-11-29 89 views
1

當我使用下面的代碼時,它根本不會改變大小,它仍會填充網格中的區域。更改JBorderLayout中JTextField的大小

JPanel displayPanel = new JPanel(new GridLayout(4, 2)); 

JTextField titleText = new JTextField("title"); 

displayPanel.add(titleText); 

titleText.setSize(200, 24); 

回答

12

從上GridLayout的所述API:

該容器被分成 大小相等的矩形,和一個 組件放置在每個矩形。

嘗試使用FlowLayout或GridBagLayout來使您的設置大小變得有意義。另外,@Serplat是正確的。您需要使用setPreferredSize(Dimension)而不是setSize(int, int)

JPanel displayPanel = new JPanel(); 
    // JPanel displayPanel = new JPanel(new GridLayout(4, 2)); 
    // JPanel displayPanel = new JPanel(new BorderLayout()); 
    // JPanel displayPanel = new JPanel(new GridBagLayout()); 

    JTextField titleText = new JTextField("title"); 

    titleText.setPreferredSize(new Dimension(200, 24)); 

    // For FlowLayout and GridLayout, uncomment: 
    displayPanel.add(titleText); 

    // For BorderLayout, uncomment: 
    // displayPanel.add(titleText, BorderLayout.NORTH); 

    // For GridBagLayout, uncomment: 
    // displayPanel.add(titleText, new GridBagConstraints(0, 0, 1, 1, 1.0, 
    // 1.0, GridBagConstraints.CENTER, GridBagConstraints.NONE, 
    // new Insets(0, 0, 0, 0), 0, 0)); 
+0

我喜歡的GridBagLayout做了一些研究就可以了。但是,這兩組數字意味着什麼?第一個括號之後的那些以及insets和insets中的那些? – Jon 2010-11-30 11:16:58

1

嘗試與

setMinSize() 
setMaxSize() 
setPreferredSize() 

這些佈局都使用的方法玩的時候就決定什麼應該是當前元素的大小。佈局管理器調用setSize()並實際覆蓋您的值。

2

隨着BorderLayout的,你需要使用setPreferredSize代替setSize

1

的最大組成部分添加添加到GridLayout的任何組件將被調整爲相同的大小。如果你想有一個組件保持在它的首選大小,然後包裹在一個JPanel該組件,然後面板將被調整:

JPanel displayPanel = new JPanel(new GridLayout(4, 2)); 
JTextField titleText = new JTextField("title"); 
JPanel wrapper = new JPanel(new FlowLayout(0, 0, FlowLayout.LEADING)); 
wrapper.add(titleText); 
displayPanel.add(wrapper); 
//displayPanel.add(titleText);