当我使用下面的代码时,它根本不会改变大小,它仍会填充网格中的区域。
JPanel displayPanel = new JPanel(new GridLayout(4, 2));
JTextField titleText = new JTextField("title");
displayPanel.add(titleText);
titleText.setSize(200, 24);
答案 0 :(得分:14)
来自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 ) );
答案 1 :(得分:2)
使用BorderLayout,您需要使用setPreferredSize
代替setSize
答案 2 :(得分:1)
尝试使用
setMinSize()
setMaxSize()
setPreferredSize()
当决定当前元素的大小时,布局会使用这些方法。布局管理器调用setSize()并实际覆盖您的值。
答案 3 :(得分: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);