Изменить размер JTextField внутри JBorderLayout - PullRequest
2 голосов
/ 30 ноября 2010

Когда я использую приведенный ниже код, он вообще не изменяет размер, он все равно заполняет область в сетке.

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

JTextField titleText = new JTextField("title");

displayPanel.add(titleText);

titleText.setSize(200, 24);

Ответы [ 4 ]

14 голосов
/ 30 ноября 2010

Из 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 ) );
2 голосов
/ 30 ноября 2010

При использовании BorderLayout вам нужно использовать setPreferredSize вместо setSize

1 голос
/ 30 ноября 2010

Любой компонент, добавленный в 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); 
1 голос
/ 30 ноября 2010

Попробуйте поиграть с

setMinSize()
setMaxSize()
setPreferredSize()

. Этот метод используется макетом, когда он решает, каким должен быть размер текущего элемента.Менеджер по расположению вызывает setSize () и фактически переопределяет ваши значения.

...