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.
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 (); [/code] или playin (); у него есть странный сбой, где кнопка выходит на нора и исчезает на 0,0 вместо исчезновения в том же месте, которое является целью .getLocation (); Настройка местоположения на Paint Kids, похоже, исправляют его только для статических значений, когда я использую целевое местоположение, оно продолжает исчезать на xy 0,0.