當我使用下面的代碼時,它根本不會改變大小,它仍會填充網格中的區域。更改JBorderLayout中JTextField的大小
JPanel displayPanel = new JPanel(new GridLayout(4, 2));
JTextField titleText = new JTextField("title");
displayPanel.add(titleText);
titleText.setSize(200, 24);
當我使用下面的代碼時,它根本不會改變大小,它仍會填充網格中的區域。更改JBorderLayout中JTextField的大小
JPanel displayPanel = new JPanel(new GridLayout(4, 2));
JTextField titleText = new JTextField("title");
displayPanel.add(titleText);
titleText.setSize(200, 24);
從上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));
嘗試與
setMinSize()
setMaxSize()
setPreferredSize()
這些佈局都使用的方法玩的時候就決定什麼應該是當前元素的大小。佈局管理器調用setSize()並實際覆蓋您的值。
隨着BorderLayout的,你需要使用setPreferredSize
代替setSize
的最大組成部分添加添加到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);
我喜歡的GridBagLayout做了一些研究就可以了。但是,這兩組數字意味着什麼?第一個括號之後的那些以及insets和insets中的那些? – Jon 2010-11-30 11:16:58