![]() |
Модераторы: LSD, AntonSaburov |
![]() ![]() ![]() |
|
mgarin |
|
||||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 128 Регистрация: 19.8.2009 Где: Санкт-Петербург Репутация: 2 Всего: 3 |
Вот возникла интересная задача, опишу поподробнее...
Предположим есть некий использованный для панели LayoutManager:
Собственно, задача такова - отрисовать бордеры в данной панели по краям указанным для компонентов использованным LayoutManager'ом - в данном случае TableLayout (но впринципе может быть и другой). Что бы стало более понятно о чем речь, приведу кусок HTML кода, в котором данная задача выполнена:
Конечно, это немного не тот бордер что я захочу отрисовать, но как вариант - тоже сойдет. (От него можно будет плясать дальше, по крайней мере) Собственно, в данной задаче есть несколько проблем - сам LayoutManager по сути не может отдать координаты компонентов, он лишь позволяет их добавлять в контейнер по некоторым константам понятным ему. Контейнер, в свою очередь, не может выдать координаты тех частей в лэйауте, куда не были вставлены какие-либо компоненты Получается, необходимо будет шпиговать в контейнер пустые объекты, только лишь ради отрисовки бордера? Или переписывать LayoutManager под себя, чтобы была возможность получить координаты? Что-то это не похоже на оптимальные варианты, с чего собственно и возник данный вопрос |
||||
|
|||||
Skipy |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 487 Регистрация: 24.8.2006 Где: Москва, Россия Репутация: 4 Всего: 16 |
Не совсем понятно, о каких "тех частей в лэйауте, куда не были вставлены какие-либо компоненты" идет речь. Очень бы помог визуальный пример.
Приведенный HTML дает таблицу 2х2 без каких-либо пропусков. В таком случае кто Вам мешает получить из контейнера все компоненты и выставить им рамки? В общем, не совсем понятна задача. |
|||
|
||||
mgarin |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 128 Регистрация: 19.8.2009 Где: Санкт-Петербург Репутация: 2 Всего: 3 |
Да, HTML вероятно не лучший пример. А заполнил я всю таблицу чисто для корректного отображения, в Java же не факт что каждая ячейка будет содержать компонент. (это как раз к "о каких "тех частей в лэйауте, куда не были вставлены какие-либо компоненты" идет речь") Приведу несколько скринов: 1) Так выглядит лэйаут (3х2, TableLayout, все ячейки TableLayout.FILL) - в некотором графическом редакторе для Swing (не суть): ![]() 2) Так выглядит его обычный просмотр в обычном JFrame'е: ![]() 3) А вот та самая сетка (или бордер, или граница, или кайма - называйте как угодно), которая мне нужна: (Photoshopped) ![]() Сразу скажу, я умею работать с Graphics, могу спокойно нарисовать любой коспонент с нуля - с этим помощь не понадобится, тут проблема состоит в том, чтобы понять, как же мне определить координаты для данной сетки P.S. Надеюсь теперь суть ясна Это сообщение отредактировал(а) mgarin - 21.10.2010, 19:35 |
|||
|
||||
Skipy |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 487 Регистрация: 24.8.2006 Где: Москва, Россия Репутация: 4 Всего: 16 |
Ох... Боюсь, без вмешательства в Layout manager это не получится. Либо второй вариант, Вами же озвученный, - вставлять заполнители. Например, непрозрачные, а фон сделать цветным, толга только в промежутках между компонентами он и будет светиться.
UPD. Кстати, посмотрел сейчас на API. Я правильно понимаю - https://tablelayout.dev.java.net/ ? Так вот, всё внутреннее состояние менеджера - protected. Наследуетесь от него, делаете методы для получения размеров ячеек - что-то мне подсказывает, что crSize и crOffset будет достаточно для Ваших целей. И всё, после изменения размеров компоненты вызываете doLayout, а дальше из менеджера считываете все координаты и устанавливаете их в свою панель для отрисовки сетки. Это сообщение отредактировал(а) Skipy - 22.10.2010, 10:24 |
|||
|
||||
mgarin |
|
||||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 128 Регистрация: 19.8.2009 Где: Санкт-Петербург Репутация: 2 Всего: 3 |
Это как раз то, чего хочется избежать)
Именно оно. А вот это можно сказать "Bingo!" ![]() Большое спасибо, что-то
я сначала не заметил там. Впринципе, я и TableLayout'ом обойдусь на самом деле ![]() На его основе можно и все остальное сделать |
||||
|
|||||
mgarin |
|
||||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 128 Регистрация: 19.8.2009 Где: Санкт-Петербург Репутация: 2 Всего: 3 |
Собственно, вот решение:
И небольшое дополнение к TableLayout'у:
Данный вариант будет работать с любым бордером вокруг панели а также любым расстоянием между ячейками TableLayout'а. Также не обязательно наличие объектов во всех "ячейках" лэйаута |
||||
|
|||||
![]() ![]() ![]() |
Правила форума "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. |