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(null);
this.target = targetComponent;
this.Delay = DelayMilisec;
this.setSize(target.getSize());
this.setLayout(new BorderLayout());
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();
g2.setComposite(AlphaComposite.SrcOver.derive(opacity));
super.paintChildren(g2);
g2.dispose();
}
}
}
< /code>
Здесь я совершил свой код, добавив накладку в класс Fade под названием Janimator, где я могу назвать различные анимации в будущем. Проблема заключается в том, что когда я называю Playout (); 
или playin (); у него есть странный сбой, где кнопка выходит на нора и исчезает на 0,0 вместо исчезновения в том же месте, которое является целью .getLocation (); Настройка местоположения на Paint Kids, похоже, исправляют его только для статических значений, когда я использую целевое местоположение, оно продолжает исчезать на xy 0,0.

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

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

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

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

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

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