当我使用下面的代码时,它根本不会改变大小,它仍会填充网格中的区域。更改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