Изменить размер JTextField внутри JBorderLayout
Когда я использую приведенный ниже код, он совсем не меняет размер, он все равно заполняет область в сетке.
JPanel displayPanel = new JPanel(new GridLayout(4, 2));
JTextField titleText = new JTextField("title");
displayPanel.add(titleText);
titleText.setSize(200, 24);
4 ответа
Из API на GridLayout:
Контейнер разделен на прямоугольники одинакового размера, и в каждом прямоугольнике размещается один компонент.
Попробуйте использовать 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 ) );
Размер любого компонента, добавленного в 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);
С BorderLayout вам нужно использовать setPreferredSize
вместо setSize
Попробуйте поиграть с
setMinSize()
setMaxSize()
setPreferredSize()
Эти методы используются макетом, когда он решает, каким должен быть размер текущего элемента. Менеджер по расположению вызывает setSize() и фактически переопределяет ваши значения.