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

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

Сообщение Anonymous »

Я пытаюсь создать анимацию затухания, которая будет работать для любого компонента

Я переопределяю альфа-композит компонента рисования, но кажется, что он абсолютно ничего не делает.

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

/*
* Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
* Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Class.java to edit this template
*/
package JAnimator;

import java.awt.AlphaComposite;
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Component;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Insets;
import java.awt.Rectangle;
import java.awt.RenderingHints;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.JComponent;
import javax.swing.JPanel;
import javax.swing.SwingUtilities;
import javax.swing.Timer;

public class JAnimator {
public static class fade_animation extends JPanel {
private float opacity = 1.0f;
private final Rectangle innerArea = new Rectangle();
private Timer timer;
private JComponent target;
private JComponent parent;
private int Delay;
private boolean HasStarted = false;
private boolean isIn = true;

public fade_animation(JComponent targetComponent, int SpeedMilisec, int DelayMilisec, JPanel myParent) {
this.target = targetComponent;
this.Delay = DelayMilisec;
this.parent = myParent;
setSize(target.getSize());
setLocation(target.getLocation());

// Timer to control the fade effect
timer = new Timer(SpeedMilisec, new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {

if (isIn) {
opacity += 0.1f;
if (opacity >= 1.0f) {
opacity = 1.0f;
timer.stop();
}
} else {
opacity -= 0.1f;
if (opacity  {
try {
Thread.sleep(Delay + 200);
HasStarted = true;
timer.restart();
} catch (InterruptedException ex) {
Logger.getLogger(JAnimator.class.getName()).log(Level.SEVERE, null, ex);
}
}).start();
} catch (Exception e) {
}
}

public void playOut() {
isIn = false;
opacity = 1.0f;

try {
new Thread(() -> {
try {
Thread.sleep(Delay + 200);
HasStarted = true;
timer.restart();
} catch (InterruptedException ex) {
Logger.getLogger(JAnimator.class.getName()).log(Level.SEVERE, null, ex);
}
}).start();
} catch (Exception e) {
}
}

@Override
public Dimension getPreferredSize() {
Dimension size = target.getPreferredSize();
return size;
}

@Override
protected void paintComponent(Graphics g) {
super.paintComponent(g); // Paint the background (transparent)
System.out.println(opacity);
if (HasStarted) {
Graphics2D g2 = (Graphics2D) g.create();
parent.paintAll(g);
g2.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER, opacity));  // Set opacity
g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
SwingUtilities.calculateInnerArea(this, innerArea);
SwingUtilities.paintComponent(g2, target, parent, innerArea);
g2.dispose();
}
}
}
}
Эта панель была создана из дизайнера NetBeans 16.
Я пробовал повторно проверять и обновлять методы пользовательского интерфейса для целевого компонента, но это не дало никакого эффекта< /п>

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

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

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

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

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

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