javafx按钮单击顺序然后播放



我希望按照单击它们的顺序播放按钮。例如,如果我单击按钮3、4和6,我想单击一个"播放"按钮,然后单击我单击的相同模式。

此代码看起来像按下按钮

button.arm();
PauseTransition pause = new PauseTransition(Duration.seconds(0.5));
pause.setOnFinished(e -> {
    button.disarm();
});
pause.play();

如果您要按钮实际发射不仅看起来像它确实像它一样,请在button.disarm();

之后添加button.fire();

然后您只需要记录按下的按钮

这是如何实现此问题的粗略示例。TimeLineSequentialTransitions是关键。评论在代码中。

import java.util.ArrayList;
import java.util.List;
import javafx.animation.KeyFrame;
import javafx.animation.SequentialTransition;
import javafx.animation.Timeline;
import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.control.ToggleButton;
import javafx.scene.layout.VBox;
import javafx.stage.Stage;
import javafx.util.Duration;
/**
 *
 * @author blj0011
 */
public class JavaFXApplication57 extends Application
{
    @Override
    public void start(Stage primaryStage)
    {
        List<ToggleButton> order = new ArrayList();//The buttons will be added to see ArrayList as they are pressed. ArrayList maintains order
        ToggleButton btn4 = new ToggleButton();
        btn4.setText("btn4");
        btn4.setOnAction(actionEvent ->
        {
            btn4.setSelected(false);//When you selected a ToggleButton it stays pressed until it is pressed again. So we use code to unpress it.
            order.add(btn4);
        });
        ToggleButton btn3 = new ToggleButton();
        btn3.setText("btn3'");
        btn3.setOnAction(actionEvent ->
        {
            btn3.setSelected(false);//When you selected a ToggleButton it stays pressed until it is pressed again. So we use code to unpress it.
            order.add(btn3);
        });
        ToggleButton btn2 = new ToggleButton();
        btn2.setText("btn2");
        btn2.setOnAction(actionEvent ->
        {
            btn2.setSelected(false);//When you selected a ToggleButton it stays pressed until it is pressed again. So we use code to unpress it.
            order.add(btn2);
        });
        ToggleButton btn1 = new ToggleButton();
        btn1.setText("btn1");
        btn1.setOnAction(actionEvent ->
        {
            btn1.setSelected(false);//When you selected a ToggleButton it stays pressed until it is pressed again. So we use code to unpress it.
            order.add(btn1);
        });
        Button btnPlay = new Button("play");
        btnPlay.setOnAction(actionEvent ->
        {
            List<Timeline> timeLines = new ArrayList();//This List will hold the TimeLines so that it can be used later to play the animation in order.
            for (ToggleButton tempToggleButton : order)//Create a press animation and a release animation for each ToggleButton in the List order
            {
                KeyFrame pressButton = new KeyFrame(Duration.seconds(1),
                        (kfActionEvent) ->
                {
                    System.out.println(tempToggleButton.getText() + "Selected!");
                    tempToggleButton.setSelected(true);
                });
                Timeline pressTimeline = new Timeline();
                pressTimeline.getKeyFrames().addAll(pressButton);
                timeLines.add(pressTimeline);
                KeyFrame releaseButton = new KeyFrame(Duration.seconds(1),
                        (kfActionEvent) ->
                {
                    System.out.println(tempToggleButton.getText() + "Unselected!");
                    tempToggleButton.setSelected(false);
                });
                Timeline releaseTimeline = new Timeline();
                releaseTimeline.getKeyFrames().addAll(releaseButton);
                timeLines.add(releaseTimeline);
            }
            SequentialTransition sequentialTransition = new SequentialTransition();
            sequentialTransition.getChildren().addAll(timeLines);//Add all the Timelines created to a SequentialTransition
            sequentialTransition.play();
            sequentialTransition.setOnFinished(stActionEvent -> {
                timeLines.clear();//Once done, clear the animations
            });
        });
        VBox root = new VBox();
        root.getChildren().addAll(btn1, btn2, btn3, btn4, btnPlay);
        Scene scene = new Scene(root, 300, 250);
        primaryStage.setTitle("Hello World!");
        primaryStage.setScene(scene);
        primaryStage.show();
    }
    /**
     * @param args the command line arguments
     */
    public static void main(String[] args)
    {
        launch(args);
    }
}

最新更新