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