Почему компоненты JList и TextArea не меняют размер с помощью GridBagLayout?

http://pastebin.com/VaaTRsuf

Я хотел бы, чтобы размеры JList и JTextArea изменялись вместе с окном, но JPanel остается в центре.

1 ответ

Решение

Ваш класс LogView расширяет JPanel и, таким образом, если вы не измените его, он использует макет JPanel по умолчанию FlowLayout. Компоненты, содержащиеся в контейнере, использующем FlowLayout, не изменяют размер, когда контейнер меняет размер, и поэтому, если вы хотите, чтобы это происходило, вам не нужен слушатель компонента - вам просто нужно изменить менеджер макета для LogView JPanel на BorderLayout или что-то подобное, что позволяет расширить его компонент, вот и все. Одна строка кода:

public LogView(final JFrame contentPane) {

  // .......

  setLayout(new BorderLayout());  // add this, that's it
  add(mainPanel);
}

Другой вариант - избавиться от mainPanel, так как в этом нет необходимости, установить макет вашего объекта LogView равным GridBagLayout и добавить ваши компоненты непосредственно в объект LogView.

Другие вопросы по тегам