![]() |
Модераторы: LSD, AntonSaburov |
![]() ![]() ![]() |
|
Старовъръ |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 491 Регистрация: 8.5.2008 Репутация: нет Всего: 10 |
Ну вобщем-то size трогать, мне кажется, не следует. Может подобрать подходящий менеджер?
-------------------- |
|||
|
||||
Dims |
|
||||||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1016 Регистрация: 21.11.2006 Репутация: 1 Всего: 11 |
Вообще-то в инструкции предлагается переопределять действительно getPreferredSize: https://www.cs.auckland.ac.nz/references/ja...g/practice.html
Но мне всё равно кажется это нелогичным. Добавлено через 6 минут и 16 секунд
Зависит от того, насколько Вы решаете использовать функционал базового класса.
Я воспринимаю иначе. size -- это действительно объективный размер, а вот preferredSize -- это не субъективный, а желаемый размер. Если Вы переопределили paint и нарисовали в нём, допустим, квадрат размером 100х100, то у вас будет объективный размер 100х100. Это не желаемый размер, на который менеджер может наплевать, а именно реальный размер компонента. И тут уже неважно, что там хранится в переменных width и height. Их надо либо правильно заполнить, либо скрыть. Добавлено через 9 минут и 24 секунды
Не совсем понятно, что происходит. Наоборот, setSize задаёт размер нежёстко, так как после задания размера при помощи setSize, никто не мешает менеджеру раскладок задать другой размер. Вероятно, надо переопределить ещё и minimunSize и maximumSize |
||||||
|
|||||||
Dims |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1016 Регистрация: 21.11.2006 Репутация: 1 Всего: 11 |
Вот кусочек кода BorderLayout:
Видно, что он смотрит getPreferredSize, думает, а затем тупо вызывает setSize и setBounds. Отсюда выводы: 1) getSize переопределять бессмысленно 2) нужно уметь реагировать на setSize Иными словами, в общем случае, изнутри компонента никаким образом нельзя добиться, чтобы он имел какой-то заданный размер. Компонент должен подчиняться лэйаут менеджеру и может только скромно просить его о чём-то при помощи preferred. Я был неправ, когда отождествлял размер рисунка с размером компонента. Размер рисунка, если можно так выразиться, это размер содержимого компонента. Отключить изменение размера компонента со стороны менеджера мы не можем, поэтому варианта только 2: либо рисовать рисунок такого размера, какой велит менеджер, либо рисовать свой размер, но тогда рисунок будет либо обрезан, либо будет болтаться в углу компонента. |
|||
|
||||
Lisus |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 93 Регистрация: 21.10.2007 Репутация: 1 Всего: 2 |
У меня в большом фрейме после программного добавления размер становиться таким, каким я задал в setSize. соответственно фон рисуется только в длину 500 пикселов, в то время как сам фрейм в длину 700, и поэтому разница 200 не перерисовывается (не заполняется фоном). как только повести размер фрейма чуть-чуть , то компонент принимает уже нормальные размеры - во весь фрейм. Вот и нужно чтобы он это делал уже при добавлении строк. Корочве вот так получается: +++++++++++++++++++++++++++ +@@@@@@@@@@@@@ + +@@@@@@@@@@@@@ + +@@@@@@@@@@@@@ + +@@@@@@@@@@@@@ + +@@@@@@@@@@@@@ + +++++++++++++++++++++++++++ А надо чтобы менеджер растягивал. При вызове setSize - размеры устанавливаются жестко и никакой менеджер не вызывается. А НАДОБЫ. возможно стоит дополнить минимумом и максимумом. Добавлено через 10 минут и 11 секунд Как заставить этот грёбанный менеджер врубиться? Пока для меня это главная проблема. ... либо добавлять свойство align, и рисовать Справа , в Центре, Слева компонента. Насчёт субъективного, я имел в виду, что желания сами по себе субъективны. |
|||
|
||||
Lisus |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 93 Регистрация: 21.10.2007 Репутация: 1 Всего: 2 |
Странно, я всегда думал, что setBounds внутри себя должен сам вызывать setSize и setLocation. Т.е. что размер, и расположение пользуются теме же переменными, что и Bounds? Я считал, что setLocation и setSize - это обрезанный setBounds, когда надо переопределить только 2 размера из 4-х. |
|||
|
||||
dorogoyIV |
|
|||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1503 Регистрация: 26.3.2007 Репутация: 36 Всего: 46 |
||||
|
||||
Lisus |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 93 Регистрация: 21.10.2007 Репутация: 1 Всего: 2 |
Блин, как всё просто...
А на Нулл проверять не надо? а то может нет менеджера. |
|||
|
||||
dorogoyIV |
|
|||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1503 Регистрация: 26.3.2007 Репутация: 36 Всего: 46 |
||||
|
||||
![]() ![]() ![]() |
Правила форума "Java" | |
|
Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, jk1. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Java: GUI и Java FX приложения | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |