?

Log in

No account? Create an account

Previous Entry | Next Entry

Очередная статья родилась. Времени на нее я потратил чуть не четыре месяца – было много работы, да и статья обширная, иллюстративных примеров много потребовалось. Статья посвящена внутреннему устройству GUI в Java, а точнее в Swing, ибо AWT, во-первых, устарел, во-вторых, устроен немного по-другому.

В общем, сама статья выложена: http://www.skipy.ru/technics/gui_int.html. Здесь будем ее обсуждать.

Comments

skipy_ru
Feb. 14th, 2011 01:34 pm (UTC)
Re: расширение класса Highlighter
Добрый день, Павел!

JLabel не имеет никакого отношения к отрисовке компонентов дерева и таблицы. Он берется исключительно для удобства, т.е. умеет отрисовывать изображения. Я могу нарисовать свой компонент и точно также использовать в качестве CellRenderer-а.

UI JLabel переопределять, имхо, не стоит. Дело в том, что он будет работать исключительно при отрисовке, а отслеживать перемещения мыши не будет по любому - нет соответствующей компоненты на форме. Перемещения мыши могут отслеживать только JTable/JTree. Причем алгоритм определения элемента под мышью будет принципиально отличаться.

Навскидку я бы писал CellRenderer-ы (разные!) на основе JLabel, слушающие на таблице или дереве перемещения мыши. По движению они должны отслеживать, какой элемент под мышью, при смене вызывать перерисовку. При перерисовке сравнивать элементы с запомненным активным, если совпал (по ссылке!) - отрисовывать выделенным.

P.S. Сорри за задержку с ответом - запарка на работе.
magicien
Aug. 11th, 2011 12:12 pm (UTC)
Re: расширение класса Highlighter
Евгений, спасибо за статьи. Помогите решить след:
Есть класс расш. DefaultTreeCellRenderer у которого есть метод getComponent, он возвращает JPanel, в котором два JLabel-а. При наведении мыши на узел дерева, надо определить, какой JLable находится под мышкой. Возможно ли такое сделать? Не получается Renderer-у слушать перемещение мыши.