2012-05-03 2 views
1

Я пытаюсь реализовать анимацию fade in/fade out в swing. Я использую JPanel, который не имеет в нем никаких компонентов. Он полностью нарисован методом paintComponent().Затухание части графики в Java Swing

Теперь в одной из частей этого JPanel я хочу реализовать анимацию fade in/fade-out. Когда я пытался использовать AlphaComposite, анимация запускается для всего JPanel.

Могу ли я ограничить эту анимацию небольшим обрезанным регионом на этой панели?

Graphics2D g2d = (Graphics2D) g; 
    g2d.setComposite(AlphaComposite.getInstance(
      AlphaComposite.XOR, alpha)); 
+0

Чтобы лучше помочь, опубликуйте [SSCCE] (http://sscce.org/). –

ответ

1

Вы пытались использовать объект Graphics (например, прямоугольник, круг и т. Д.) Для вашего fade in/out? Таким образом, он не будет запущен для всей панели.

Удачи вам!

1

Возможно, это может быть труднее достичь, чем того, что стоит. Создайте JComponent размера, который хотите оживить (или выцветать), добавьте его в свой JPanel и перерисуйте() на свой меньший компонент во время анимации вместо более крупного JPanel.

1

Вы можете использовать setClip() перед рисованием, чтобы ограничить область замирания. Предположим, вам нужен небольшой затухающий прямоугольник. Использование класса Area создает 2 фигуры. Пересечение исходного клипа и затухания прямоугольника и вычитания (вычесть прямоугольник затухания из исходного клипа).

Вызов super.paintComponent() дважды с двумя различными клипами. Для второй краски вы можете установить свой альфа-фильтр.

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