Установить постоянный размер JScrollPane

У меня есть JTabbedPane с макетом границы.

введите здесь описание изображения

Вот код, который я использую для добавления компонентов:

add(columnNames, BorderLayout.NORTH);
add(scroll, BorderLayout.CENTER);
add(useCtrl, BorderLayout.SOUTH);
setVisible(true);

Вопрос: обратите внимание на лишние пробелы справа внутри JScrollPane. Я не хочу этого там. Я хотел бы, чтобы JScrollPane вообще не менял размер при изменении размера JFrame. Я пробовал setSize() и setPreferredSize(), но размер JScrollPane всегда меняется. Я пытался использовать GridLayout, но я получаю тот же результат.


person Joel Christophel    schedule 05.01.2013    source источник
comment
Чтобы быстрее получить помощь, опубликуйте SSCCE.   -  person Andrew Thompson    schedule 05.01.2013
comment
Взгляните на визуальное руководство по менеджерам компоновки. Как уже было сказано, BorderLayout по умолчанию отдаст все доступное пространство центральному компоненту...   -  person MadProgrammer    schedule 05.01.2013


Ответы (2)


Поместите JScrollPane в JPanel с другим макетом. (например, BoxLayout или GridBagLayout). И добавьте JPanel в центр.

person StanislavL    schedule 05.01.2013

Размер графического объекта контролируется менеджером компоновки. BorderLayout всегда будет расширять объект CENTER, чтобы занять все доступное пространство. GridLayout пропорционально расширяет все свои дочерние элементы. Если вы попробуете GridBagLayout и установите для weightx значение 0, это предотвратит расширение по горизонтали.

Доступно множество менеджеров компоновки, просмотрите API, чтобы найти дополнительные варианты, и экспериментируйте, пока не найдете нужное поведение при изменении размера. У каждого есть довольно хорошее объяснение того, как это работает в javadoc.

person Mel Nicholson    schedule 05.01.2013