Изображения стандартных компонентов06.07.2014, 14:55. Показов 1026. Ответов 10
Метки нет (Все метки)
Всем привет.
Столкнулся с небольшой проблемой в ходе разработки приложения. Суть приложения такова - есть панель Toolkit с набором компонентов, доступных для использования (перетаскивания) и панель рабочего пространства, куда элементы перетаскиваются. Процесс перетаскивания реализую через MouseMotionListener интерфейс.
Если мы добавим кнопку как слушателя событий мыши - это сработает, но результат будет отвратным - отображение на экране будет двоиться, кнопка будет отпрыгивать от курсора при нажатии и так далее. Можете убедиться скомпилировав и запустив код, приведенный выше... Я придумал довольно простое решение - создать панель, установить такой размер, чтобы туда могла поместиться только кнопка (аналогичный размер), переопределить метод paintComponent() и при каждой прорисовке панели рисовать изображение (иконку) кнопки. Когда я перетащу кнопку на рабочую панель, я получу событие EnterEvent и на месте панели размещу самую натуральную кнопку... Возможно, это довольно глупое решение, но пока ничего лучше в голову не пришло. Если вы знаете, как решить проблему с перемещением кнопки с корректным отображением - буду рад выслушать. А пока вопрос такой - как получить иконку кнопки? P.S. button.getIcon() возвращает null.
0
|
|||||||||||
| 06.07.2014, 14:55 | |
|
Ответы с готовыми решениями:
10
Просмотреть листинг стандартных компонентов Переопределение свойств у стандартных компонентов |
|
Форумчанин
5958 / 4192 / 406
Регистрация: 28.12.2013
Сообщений: 24,134
|
|||||||
| 06.07.2014, 18:23 | |||||||
|
Добавлено через 12 минут
0
|
|||||||
| 06.07.2014, 19:10 [ТС] | |
|
Дальше в тексте я объясняю, почему не получится. Кнопка - интерактивный компонент, она сама является источником событий, и у нее свои слушатели. То есть если мы попытаемся добавить слушателя в панель, потом в панель добавить кнопку, то нажав и переталкивая кнопку по панели, ничего не получится, если пиксели события принадлежат кнопке, причину выше написал. Получается, мы никак не сможем узнать - тащит ли программист кнопку, если будем слушать панель.
Я расписал оптимальный вариант, но для этого нужны иконки, а как их получить программно - я не разобрался.
0
|
|
|
Форумчанин
5958 / 4192 / 406
Регистрация: 28.12.2013
Сообщений: 24,134
|
|
| 06.07.2014, 19:32 | |
|
тоесть ты хочешь с 1 панели перетащить элемент в другую?А что если сделать прозрачную панель и перетаскивать элементы по ней?
Забавная задачка попробую сегодня.
0
|
|
| 06.07.2014, 19:54 [ТС] | |
|
У компонентов из инструментария есть переходное состояние - смена овнера. Когда мы выходим за рамки панели инструментов - фрейм становится слушателем, потом при заходе на основное пространство слушатель переходит к ворк спейсу, другие компоненты удаляют слушателя. С этим проблем нет. Но мне нужны иконки...
0
|
|
|
Форумчанин
5958 / 4192 / 406
Регистрация: 28.12.2013
Сообщений: 24,134
|
|
| 06.07.2014, 19:58 | |
|
0
|
|
|
Форумчанин
5958 / 4192 / 406
Регистрация: 28.12.2013
Сообщений: 24,134
|
|
| 06.07.2014, 23:33 | |
|
в принципе,кнопка может быть просто прямоугольником с градиентом,так же как и менюбар
![]() Не думаю что ява скрывает иконку после вызова метода гетикон. Добавлено через 2 часа 59 минут в исходниках явки конструктор по умолчанию дает параметр иконки null
0
|
|
|
Форумчанин
5958 / 4192 / 406
Регистрация: 28.12.2013
Сообщений: 24,134
|
|
| 07.07.2014, 01:53 | |
|
забавная проблема,хотя для моей работы и не нужная
![]() Просерчил исходники,что-то зацепов пока не вижу на иконку.
0
|
|
| 07.07.2014, 22:23 [ТС] | |
|
В общем, пошел другим путем. Прорисовка переталкивания фигур вышла накладной - нужно определять верные пиксели относительно сразу двух панелей, вычислять относительное положение компонента и от сюда получать пиксели верные. К тому же во время переходного состояния компонент должен обрисовывываться сразу в 3х контейнерах, поэтому пришлось добавлять в каждый контейнер компонент, который "растет" по мере переталкивания, а потом и вовсе удаляется. Пусть это и не занимает много памяти, но трата все же идет больше, чем можно было ожидать. Ну и естественно такой подход не дает никакой гибкости.
В раздумьях был и пришел к такому варианту. Есть панель инструментов - она представляет собой кастомный лист (список JLabel - иконка и текст). При выборе элемента - его изображение переносится в Clipboard - буфер, в котором хранится выдранный из списка элемент. Как только элемент попал в буфер - можно тыкнуть на любую область в workspace панели и установится изображение кнопки (не оригинальное). Буфер очищается, выдранный элемент перестает быть выбранным. Компоненты на рабочей панеле можно переталкивать. Но это не все. Когда нужно посмотреть - как будет выглядеть кнопка на этом месте - все компоненты удаляются, сериализуются (для восстановления) и на их местах появляются самые настоящие кнопки. Их двигать нельзя - они самостоятельные компоненты. Когда нужно изменить позиции - возвращается к рабочему состоянию, удаляем кнопки и на их местах появляются десермализованные компоненты. Пока есть один нюанс - как при крепить маленькую иконку к курсору? Конечно, можно сделать кастомный курсор, но наверняка есть способ это сделать через API. Буду рад помощи. P.S. Рад бы и сам порыскать API, но приходится временно вечера коротать с одним телефоном и медленным интернетом.
0
|
|
| 07.07.2014, 22:23 | |
|
Помогаю со студенческими работами здесь
11
Использование стандартных компонентов stl Разработка приложений с использованием стандартных компонентов. Модификация стандартных компонентов использующих TStrings UDP чат без использования стандартных компонентов UDP чат без использования стандартных компонентов Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Первый деплой
lagorue 16.01.2026
Не спеша развернул своё 1ое приложение в kubernetes.
А дальше мне интересно создать 1фронтэнд приложения и 2 бэкэнд приложения
развернуть 2 деплоя в кубере получится 2 сервиса и что-бы они. . .
|
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ *
Дана цепь постоянного тока с R, L, C, k(ключ), U, E, J. Программа составляет систему уравнений по 1 и 2 законам
Кирхгофа, решает её и находит токи на L и напряжения на C в установ. режимах до и. . .
|
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым.
Но восстановить их можно так.
Для этого понадобится консольная утилита. . .
|
Изучаю kubernetes
lagorue 13.01.2026
А пригодятся-ли мне знания kubernetes в России?
|
|
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
|
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11
— это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
|
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11
Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
|
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
|