Как добавить различные формы частично на JPanel + изображение, которое находится на JPanel - PullRequest
0 голосов
/ 31 марта 2009

Мой проект на Java Swing.

У меня есть JPanel, на котором я добавляю несколько изображений с расширением .png (которые находятся на JLabels) в центре.

Теперь я хочу добавить строку, которая будет частично на JPanel и частично на этом изображении. В настоящее время, когда я добавляю строку, JPanel показывает ее, но когда я изменяю размер изображения и перетаскиваю его на изображение, оно скрывает линию.

Что можно сделать, чтобы изображение не скрывало мою линию и отображало ее на изображении?

Ответы [ 3 ]

2 голосов
/ 31 марта 2009

Вам, вероятно, лучше нарисовать изображение самостоятельно и нарисовать линию поверх в том же элементе управления. Создайте класс, расширяющий Canvas, и в методе paint напишите собственный код для рисования изображения, а затем нарисуйте линию.

1 голос
/ 31 марта 2009

Другой вариант - использовать JLayeredPane вместо JPanel в качестве основного контейнера и поместить непрозрачный (setOpaque (false)) JPanel на более высокий слой. Используйте JLayeredPane.setLayer (yourPanel, highNumber) и заполните свой JLayeredPane, используя что-то вроде GridBagLayout или простой пользовательский LayoutManager.

Затем вы можете реализовать пользовательскую роспись на этой панели.

0 голосов
/ 31 марта 2009

Вы можете попробовать использовать JXLayer и определить для него пользовательский LayerUI, который будет рисовать линии. Затем они появятся над компонентами, которые вам нужно нарисовать. Это немного более сложный процесс, включающий использование стороннего (с открытым исходным кодом) пользовательского компонента, но позволит вам передумать о том, какой компонент Swing вы используете для рендеринга ваших изображений позже. Я думаю, эта статья лучше всего описывает, как добиться того, чего вы хотите.

В прошлом я решал множество подобных проблем различными способами, и ни один из них не обладал гибкостью и удобством сопровождения JXLayer.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...