![]() |
|
Модераторы: LSD, AntonSaburov |
![]()
|
|
| celeir |
|
||||
|
Новичок Профиль Группа: Участник Сообщений: 8 Регистрация: 4.3.2010 Репутация: нет Всего: нет |
Здравствуйте.
Вот самый примитивный код - фрейм с тремя панелями, хочу поставить в верхней панели кнопку указанных размеров. setSize игнорируется, setBounds игнорируется, если убрать у панели Layout по-умолчанию, кнопка вообще не отображается на панели.
Я в замешательстве. Это же не какие-то продвинутые операции, это самые основы основ. Почему они не работают? К слову, если поставить среднюю панель вот такой:
то окно будет с каждым запуском отображаться по-разному. Это как-то связано с перерисовкой или что? И ещё вопрос вдогонку - где должна лежать картинка и как к ней обратиться вместо "здесь полный путь", чтоб её нашло автоматом? Сохранял в папку src проекта, обращался File("/pic.gif") - не видит. Заранее спасибо за уделённое время. |
||||
|
|||||
| jk1 |
|
||||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 1168 Регистрация: 17.10.2008 Где: Санкт-Петербург Репутация: 21 Всего: 75 |
Как раз поэтому и не работают. Абсолютное позиционирования числами применяется в самых крайних случаях, потому что дизайн ваших форм должен прилично выглядеть на любом экране при любом размере окна. В пределах разумного. Поэтому применяется схема, основанная на LayoutManager'ах. Она обеспекчивает растягивание или сужение нужных компонент при изменении размеров окна. Для получения требуемого поведения необходимо подобрать нужный менеджер для каждого контенера и (опционально) сконфигурировать его под ваши нужды. О том, как это сделать. Разумеется, всегда можно отказаться от использования менеджеров, мало ли какие обстоятельства возникают. В этом отношении вы все сделали правильно, кроме одного: если контейнер остается без менеджера, то вам придется руками определять его размер:
Теперь о методах установки размеров: setSize() имеет невысокий приоритет и может помочь в случае отсутствия менеджера. В общем случае можно дать рекомендацию компоненту придерживаться по возможности заданного размера методом setPreferredSize(). Также можно задавать минимальный и максимальный размеры, но соблюдены они будут только если менеджер сочтет это возможным. -------------------- Opinions are like assholes — everybody has one |
||||
|
|||||
| celeir |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 8 Регистрация: 4.3.2010 Репутация: нет Всего: нет |
setPreferredSize() помог, спасибо большое. Выходит, использование этого метода тоже откладывается на крайний случай?
А если так: -читаем размеры окна -вычитаем из них какое-то число по осям -результат передаём в setPreferredSize каждому элементу или элементу, который должен быть больше остальных того же типа (одна кнопка длиннее других), то это можно назвать глупой затеей или заслуживающей права на жизнь? Попробовал ещё setMinimumSize и setMaximumSize, как не растягивал/сжимал окно, кнопка в размерах не изменилась. Когда их в таком случае использовать? О, сейчас столкнулся ещё с одним моментом - если кнопка одна, её не хочет прижимать к краю через BorderLayout.West Сто-то я не помню, чтоб BorderLayout просто центрировал всё без вариантов. Или всё же проглядел? Это сообщение отредактировал(а) celeir - 28.4.2010, 13:40 |
|||
|
||||
| jk1 |
|
||||||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 1168 Регистрация: 17.10.2008 Где: Санкт-Петербург Репутация: 21 Всего: 75 |
Мне доводилось делать сложные формы со вкладками и раздвижными панелями, где число компонентов переваливало за сотню. И для всего этого писать обработчики ресайза окна и калькуляторы размеров? Я бы сразу застрелился от такой перспективы. А с Layout Manager'ами выходило аккуратно и без лишних усилий со стороны разработчиков.
он для этого не предназначен. С одним компонентом лучше использовать FlowLayout, у него кстати есть параметр, определяющий, по какому краю выравнивать.
обычно в этом нет необходимости, так как компоненты сами неплохо справляются с определением границ своих размеров. Эти значения носят рекомендательный характер: если менеджер сочтет возможным их выполнить, он их выполнит. Единственный случай, где мне приходилось их применять постоянно - при задании ширины столбцов в таблицах. -------------------- Opinions are like assholes — everybody has one |
||||||
|
|||||||
![]()
|
| Правила форума "Java" | |
|
|
Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, jk1. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Java: GUI и Java FX приложения | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |