在JBorderLayout中更改JTextField的大小

时间:2010-11-29 21:44:36

标签: java resize size jframe jtextfield

当我使用下面的代码时,它根本不会改变大小,它仍会填充网格中的区域。

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

JTextField titleText = new JTextField("title");

displayPanel.add(titleText);

titleText.setSize(200, 24);

4 个答案:

答案 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);