JPanel Fade анимация Java Swing не работаетJAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 JPanel Fade анимация Java Swing не работает

Сообщение Anonymous »

Обновленный код:

Код: Выделить всё

package JAnimator;

import java.awt.AlphaComposite;
import java.awt.BorderLayout;
import java.awt.EventQueue;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Point;
import java.awt.event.ActionEvent;
import javax.swing.JComponent;
import javax.swing.JPanel;
import javax.swing.Timer;

public class JAnimator {

public static enum AnimationType {
FADE_ANIMATION,
ERASE_ANIMATION,
ROTATE_ANIMATION,
ZOOM_ANIMATION,
SLIDE_ANIMATION,
FLASH_ANIMATION
}

public fade_animation fadeobj;
private int AniType;
private final Point xytarget;
public JAnimator(JComponent Target_component, int Speed_in_miliseconds, int Delay_in_miliseconds, AnimationType Animation_type) {
xytarget = Target_component.getLocation();
switch (Animation_type) {
case FADE_ANIMATION:
fadeobj = new fade_animation(Target_component, Speed_in_miliseconds, Delay_in_miliseconds);
AniType = 1;
break;
}
}

public void playIn() {
if (AniType == 1) {
fadeobj.fadeIntoView();
}
}

public void playOut() {
if (AniType == 1) {
fadeobj.fadeOutOfView();
}
}

public class fade_animation extends JPanel {
private float opacity = 0.0f;
private Timer timer;
private JComponent target;
private boolean fadingIn;

private int Delay;

private fade_animation(JComponent targetComponent, int SpeedMilisec, int DelayMilisec) {
super.setLayout(new BorderLayout());
this.target = targetComponent;
this.Delay = DelayMilisec;
this.setSize(target.getSize());
add(target);

this.timer = new Timer(SpeedMilisec, (ActionEvent e) -> fade());
}

private void fade() {
if (fadingIn) {
opacity += 0.1f;
target.setEnabled(true);
if (opacity >= 1.0f) {
opacity = 1.0f;
timer.stop();
}
} else {
opacity -= 0.1f;
if (opacity  {
opacity = 0.0f;
fadingIn = true;
Timer delayTimer = new Timer(Delay, e -> timer.restart());
delayTimer.setRepeats(false);
delayTimer.start();
});
}

public void fadeOutOfView() {
EventQueue.invokeLater(() -> {
opacity = 1.0f;
fadingIn = false;
Timer delayTimer = new Timer(Delay, e -> timer.restart());
delayTimer.setRepeats(false);
delayTimer.start();
});
}

@Override
protected void paintChildren(Graphics g) {
Graphics2D g2 = (Graphics2D) g.create();
setLocation(xytarget);
g2.setComposite(AlphaComposite.SrcOver.derive(opacity));
super.paintChildren(g2);
g2.dispose();
}
}
}
Здесь я улучшил свой код, добавив оболочку к классу затухания под названием JAnimator, где я могу вызывать различные анимации в будущем. Проблема в том, что когда я вызываю playOut(); или playIn();, возникает странный сбой, когда кнопка перемещается и исчезает в 0,0 вместо того, чтобы исчезать в том же месте, которое является целью. .getLocation(); установка местоположения в дочерних элементах рисования, кажется, исправляет это, хотя только для статических значений, когда я использую целевое местоположение, оно продолжает исчезать при xy 0,0.

Подробнее здесь: https://stackoverflow.com/questions/793 ... oesnt-work
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «JAVA»