I suggest creating a dummy javafx node, setting an animation for it, and binding the opacity property of the dummy node with your swing item.
it would be something like this
import javafx.animation.KeyFrame;
import javafx.animation.KeyValue;
import javafx.animation.Timeline;
import javafx.scene.Node;
import javafx.scene.control.Button;
import javafx.util.Duration;
import javax.swing.*;
class transitions
{
Button fade_reference = new Button();
transitions.fade fade_transistion;
JFrame frame = new JFrame();
transitions()
{
fade_transistion = new fade(fade_reference, 250, 0.2, 0.9);
fade_reference.opacityProperty().addListener(observable-> {
frame.setOpacity((float)fade_reference.getOpacity());
});
}
class fade
{
private final Timeline show_timeline, hide_timeline;
Node node;
double min_opacity;
double max_opacity;
int annimation_duration;
fade(Node node, int annimation_duration, double min_opacity, double max_opacity)
{
this.min_opacity = min_opacity;
this.max_opacity = max_opacity;
this.node = node;
this.annimation_duration = annimation_duration;
show_timeline = setupShowTransition();
hide_timeline = setupDismissTransition();
}
private Timeline setupShowTransition()
{
return create_timeline(max_opacity);
}
private Timeline setupDismissTransition()
{
return create_timeline(min_opacity);
}
private Timeline create_timeline(double target_opacity)
{
Timeline tl = new Timeline();
KeyValue kv1 = new KeyValue(node.opacityProperty(), node.getOpacity());
KeyFrame kf1 = new KeyFrame(Duration.ZERO, kv1);
KeyValue kv2 = new KeyValue(node.opacityProperty(), target_opacity);
KeyFrame kf2 = new KeyFrame(Duration.millis(annimation_duration), kv2);
tl.getKeyFrames().addAll(kf1, kf2);
return tl;
}
void fade_up()
{
show_timeline.play();
}
void fade_down()
{
hide_timeline.play();
}
}
}