2015-03-07 2 views
0

У меня есть JTextPane с реализованным изменением размера изображения в нем. Я сделал это, объявив свой собственный IconView и свой редактор EditorKit, который использует этот IconView. Каждый раз, когда пользователь меняет размер изображения, я вызываю метод JTextPane paintAll().Zorder в JTextPane (порядок рисования)

До и после изменения размера все в порядке. Но во время перетаскивания картинки я хочу иметь фотографию спереди.

Перед перетаскиванием (правильный)

Before dragging

При перемещении первого снимка (плохо ZOrder)

enter image description here

После перетаскивания (правильный)

enter image description here

Во время перетаскивания второго снимка (правильно, потому что вторая картина написана после первой картины)

enter image description here

Я понимаю, что это вызвано порядка компонентов в JTextPane, но я не знаю, как сделать заказ на JTextPane, чтобы нарисовать это изображение как последнее. Любая идея, как это сделать?

ответ

1

Существует несколько возможных способов. Прежде всего, вы должны игнорировать краску представления во время процесса перетаскивания. Затем либо

  1. Создайте JWindow без рамки, но только с одним изображением. Измените размер окна и после окончания перетаскивания просто получите размеры окна и примените его обратно к изображению.

  2. Переопределить paintComponent() JTextPane и сохранить ссылку draggedPicture. Во время перетаскивания перетащите перетаскиваемый вид, но вместо этого измените размер и нарисуйте (после вызова супер) перетаскиваемое изображение в paintComponent()

  3. Сохраните перетаскиваемый прямоугольник и исключите его из клипа Graphics в методе paint() для всех не перетаскиваемые представления. Как это


Shape oldCliep=g.getClip(); 
Area newClip=new Area(oldClip); 
newClip.subtract(draggedImageBoundRect); 
g.setClip(newClip); 
//do all your paint e.g. super.paint() and restore clip 
g.setClip(oldClip); 
+0

Большое спасибо за исчерпывающий ответ. Первое решение кажется лучшим для меня, потому что у меня есть другие проблемы с изменением размера. Надеюсь, в отдельном окне все будет хорошо. Мне нужно некоторое время для реализации этого. Я дам вам знать, если это сработает. –

Смежные вопросы