Исчезновение Jpanels в JFrame - PullRequest
2 голосов
/ 13 мая 2011

Я хотел бы создать игру с несколькими JPanels в одном глобальном JFrame.Я хотел бы переключить эти JPanels, но с хорошей анимацией, такой как постепенное появление и исчезновение.Как бы вы могли исчезнуть из JPanel, переключить JPanel на новую и добавить новую (желательно без внешней библиотеки)?

Большое спасибо

Ответы [ 4 ]

4 голосов
/ 13 мая 2011

Может быть http://filthyrichclients.org/
имеет несколько хороших идей и примеров (онлайн) для начала.Он содержит много деталей анимации свинга.

2 голосов
/ 13 мая 2011

Может сделать что-то подобное на панели и компонентах, чтобы они исчезли:


Color bgColor = getBackground();

for(int alpha = bgColor.getAlpha(); alpha &gt = 0; alpha--)
{
    setBackground(new Color(
    bgColor.getRed(),
    bgColor.getGreen(),
    bgColor.getBlue(),
    alpha));
}

Вам, вероятно, нужно добавить туда Thread.sleep ().

Также взгляните на:

com.sun.awt.AWTUtilities.setWindowOpacity(this,opacity );

Но обратите внимание, что это делает все приложение

1 голос
/ 14 мая 2011

Для справки: FlashTest показывает, как постепенно исчезать, изменяя насыщенность цвета, в то время как AlphaTest показывает, как исчезать, изменяя альфа цвета.

0 голосов
/ 12 июля 2018

Я предлагаю создать фиктивный узел javafx, установить для него анимацию и связать свойство непрозрачности фиктивного узла с вашим элементом качания.это было бы что-то вроде этого

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();
        }
    }
}
...