Verander de grootte van een JTextField in een JBorderLayout

Als ik de onderstaande code gebruik, verandert het formaat helemaal niet, het vult nog steeds het gebied in het raster.

JPanel displayPanel = new JPanel(new GridLayout(4, 2));
JTextField titleText = new JTextField("title");
displayPanel.add(titleText);
titleText.setSize(200, 24);

Antwoord 1, autoriteit 100%

Van de api op GridLayout:

De container is verdeeld in:
rechthoeken van gelijke grootte, en één
component wordt in elke rechthoek geplaatst.

Probeer FlowLayout of GridBagLayout te gebruiken om uw ingestelde grootte zinvol te maken. @Serplat heeft ook gelijk. U moet gebruiken setPreferredSize( Dimension)in plaats van 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 ) );

Antwoord 2, autoriteit 12%

Bij een BorderLayout moet je setPreferredSizegebruiken in plaats van setSize


Antwoord 3, autoriteit 6%

Probeer mee te spelen

setMinSize()
setMaxSize()
setPreferredSize()

Deze methode wordt gebruikt door de lay-out wanneer wordt bepaald wat de grootte van het huidige element moet zijn. De lay-outmanager roept setSize() aan en overschrijft in feite uw waarden.


Antwoord 4, autoriteit 6%

Elke component die aan de GridLayout wordt toegevoegd, wordt verkleind tot dezelfde grootte als de grootste toegevoegde component. Als je wilt dat een component de gewenste grootte behoudt, wikkel je die component dan in een JPanel en dan wordt het formaat van het paneel aangepast:

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

Other episodes