Search code examples
javaresizesizejframejtextfield

Change the size of a JTextField inside a JBorderLayout


When I use the code below it doesn't alter the size at all, it still fills the area in the grid.

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

JTextField titleText = new JTextField("title");

displayPanel.add(titleText);

titleText.setSize(200, 24);

Solution

  • From the api on GridLayout:

    The container is divided into equal-sized rectangles, and one component is placed in each rectangle.

    Try using FlowLayout or GridBagLayout for your set size to be meaningful. Also, @Serplat is correct. You need to use setPreferredSize( Dimension ) instead of 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 ) );