Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ember.js/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
JavaFx按钮按顺序单击,然后播放_Javafx - Fatal编程技术网

JavaFx按钮按顺序单击,然后播放

JavaFx按钮按顺序单击,然后播放,javafx,Javafx,我希望有按钮发挥的顺序,他们被点击。例如,如果我单击按钮3、4和6,我想单击一个“播放”按钮,此按钮然后单击与我单击的模式相同的模式。此代码使其看起来像是按下了按钮 button.arm(); PauseTransition pause = new PauseTransition(Duration.seconds(0.5)); pause.setOnFinished(e -> { button.disarm(); }); pause.play(); 如果您想让按钮实际启动,而不仅

我希望有按钮发挥的顺序,他们被点击。例如,如果我单击按钮3、4和6,我想单击一个“播放”按钮,此按钮然后单击与我单击的模式相同的模式。

此代码使其看起来像是按下了按钮

button.arm();
PauseTransition pause = new PauseTransition(Duration.seconds(0.5));
pause.setOnFinished(e -> {
    button.disarm();
});
pause.play();
如果您想让按钮实际启动,而不仅仅是看起来像它,那么添加
button.fire()按钮后的code>。解除武装()


然后您只需要记录按下的按钮,下面是一个如何实现这一点的粗略示例。这是关键。注释在代码中

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

}
import java.util.ArrayList;
导入java.util.List;
导入javafx.animation.KeyFrame;
导入javafx.animation.SequentialTransition;
导入javafx.animation.Timeline;
导入javafx.application.application;
导入javafx.scene.scene;
导入javafx.scene.control.Button;
导入javafx.scene.control.ToggleButton;
导入javafx.scene.layout.VBox;
导入javafx.stage.stage;
导入javafx.util.Duration;
/**
*
*@author blj0011
*/
公共类JavaFXApplication57扩展了应用程序
{
@凌驾
公共无效开始(阶段primaryStage)
{
List order=new ArrayList();//按钮按下时将被添加以查看ArrayList。ArrayList保持顺序
ToggleButton btn4=新的ToggleButton();
btn4.setText(“btn4”);
btn4.设置动作(动作事件->
{
btn4.setSelected(false);//当您选择一个ToggleButton时,它会一直保持按下状态,直到再次按下为止。所以我们使用代码来取消按下它。
订单。添加(btn4);
});
ToggleButton btn3=新的ToggleButton();
btn3.setText(“btn3’”);
btn3.设置动作(动作事件->
{
btn3.setSelected(false);//当您选择一个ToggleButton时,它将保持按下状态,直到再次按下为止。因此,我们使用代码将其取消按下。
订单。添加(btn3);
});
ToggleButton btn2=新的ToggleButton();
btn2.setText(“btn2”);
btn2.设置动作(动作事件->
{
btn2.setSelected(false);//当您选择一个ToggleButton时,它会一直保持按下状态,直到再次按下为止。所以我们使用代码来取消按下它。
订单。添加(btn2);
});
ToggleButton btn1=新的ToggleButton();
btn1.setText(“btn1”);
btn1.设置动作(动作事件->
{
btn1.setSelected(false);//当您选择一个ToggleButton时,它将保持按下状态,直到再次按下为止。因此,我们使用代码将其取消按下。
订单。添加(btn1);
});
按钮btnPlay=新按钮(“播放”);
btnPlay.setOnAction(actionEvent->
{
List timeline=new ArrayList();//此列表将保存时间线,以便以后可以使用它按顺序播放动画。
for(ToggleButton试探ToggleButton:order)//按列表顺序为每个ToggleButton创建按下动画和释放动画
{
关键帧按下按钮=新关键帧(持续时间。秒(1),
(kfActionEvent)->
{
System.out.println(testogglebutton.getText()+“选中!”);
TestLoggleButton.setSelected(真);
});
Timeline press Timeline=新时间线();
按Timeline.getKeyFrames().addAll(按按钮);
时间表。添加(按Timeline);
关键帧释放按钮=新关键帧(持续时间。秒(1),
(kfActionEvent)->
{
System.out.println(testogglebutton.getText()+“未选中!”);
TestLoggleButton.setSelected(假);
});
Timeline releaseTimeline=新时间线();
releaseTimeline.getKeyFrames().addAll(releaseButton);
时间线。添加(发布时间线);
}
SequentialTransition SequentialTransition=新的SequentialTransition();
sequentialTransition.getChildren().addAll(时间线);//将创建的所有时间线添加到sequentialTransition
顺序转换。play();
sequentialTransition.setOnFinished(stActionEvent->{
timeLines.clear();//完成后,清除动画
});
});
VBox root=新的VBox();
root.getChildren().addAll(btn1、btn2、btn3、btn4、btnPlay);
场景=新场景(根,300,250);
setTitle(“你好,世界!”);
初级阶段。场景(场景);
primaryStage.show();
}
/**
*@param指定命令行参数
*/
公共静态void main(字符串[]args)
{
发射(args);
}
}

您肯定需要重新措辞。请描述“按钮点击”的含义。您是否试图操纵光标,为突出显示某些按钮的序列设置动画,只是为按钮触发一些事件处理程序,或者…?这在大多数情况下都有效,但现在我尝试为每个按钮设置不同的操作。例如,某个声音,我是否可以使用order array list并像这样调用它;命令,开火?如果此答案解决了您的原始问题,则@sedrickjeffersoni不会打印出选中或未选中的输出,除非它作为答案。如果你有一个新问题,试着先解决它。如果你在尝试自己解决问题后仍然有问题,请随意在新的帖子上提出新的问题。将再次感谢这真的很有帮助@SedrickJefferson