根据用户在图形界面中的决定执行某个main。JAVA FX
我会尽量简单。 在主屏幕的开头,我创建了一个新的舞台,其中显示了2个按钮。 根据单击的按钮,它将在舞台控制器中将数字设置为1或2。 然后我创建一个条件,如果数字是1,我执行主程序的某个部分。 如果数字为2,则执行main的另一部分 问题是我必须等待用户的响应。我做了一个while条件(当数字为0时,我会在while中返回),但程序不工作。 你有没有办法等待用户的回复? 这是代码的开头根据用户在图形界面中的决定执行某个main。JAVA FX,java,javafx,wait,scenebuilder,Java,Javafx,Wait,Scenebuilder,我会尽量简单。 在主屏幕的开头,我创建了一个新的舞台,其中显示了2个按钮。 根据单击的按钮,它将在舞台控制器中将数字设置为1或2。 然后我创建一个条件,如果数字是1,我执行主程序的某个部分。 如果数字为2,则执行main的另一部分 问题是我必须等待用户的响应。我做了一个while条件(当数字为0时,我会在while中返回),但程序不工作。 你有没有办法等待用户的回复? 这是代码的开头 public void start(Stage primaryStage) {
public void start(Stage primaryStage) {
try {
FXMLLoader loader1 = new FXMLLoader(getClass().getResource("SampleStart.fxml"));
Parent root1 = loader1.load();
SampleControllerStart StartController = (SampleControllerStart) loader1.getController();
Scene scene1 = new Scene(root1,474,435);
primaryStage.setScene(scene1);
primaryStage.show();
StartController.setEtat(0);
while(StartController.getEtat() == 0) {
System.out.println("ok");
}
if(StartController.getEtat() == 1) { ```
看起来你要做的是创建一个对话框,其中包含一个选项,该选项将影响程序的其余部分 JavaFX实现这一点有点过分了,但您可以使用
JavaFX.scene.control.Dialog
获得您想要的
样本:
public void start(Stage)抛出IOException{
ButtonType b1=新的ButtonType(“选项1”,ButtonData.左);
ButtonType b2=新的ButtonType(“选项2”,ButtonData.RIGHT);
Dialog diag=新建Dialog();
diag.setTitle(“我的程序”);//不需要
DialogPane=diag.getDialogPane();
pane.setHeaderText(“您需要做出选择”);//不是必需的
pane.setContentText(“选择1或2”);
圆圈图标=新圆圈(20);//应为图像
icon.setFill(Paint.valueOf(“蓝色”));
pane.setGraphic(图标);//不需要
pane.getButtonTypes().addAll(b1、b2);
可选res=diag.showAndWait();
如果(!res.isPresent())
返回;
System.out.println(res.get().getText()+“/”+res.get().getButtonData());
如果(res.get().等于(b1)){
System.out.println(“单击按钮1”);
//做点什么
}否则{
System.out.println(“点击按钮2”);
//做点别的
}
}
我正在使用对话框。show和wait
在这里暂停,直到用户做出选择。千万不要像没有至少一个Thread.sleep()
线程的循环那样执行循环:这会白白浪费CPU,可能会导致程序没有响应
最好使用JavaFX创建一个完整的UI,并在事件处理程序中为自己的控件处理用户的选择,然后在JavaFX.concurrent.Service
中执行操作,该服务将在后台运行,让UI响应状态显示或取消任务
或者,您并不真正需要UI,而是使用控制台从用户那里获取输入…您的结构完全错误。
start()
方法应该做的唯一一件事就是加载FXML并显示阶段。控制器应该有一个处理用户响应的事件处理程序,然后执行任何需要的操作。也就是说,将此逻辑放在控制器中,而不是放在start()
方法中。这是非常基本的设计。如果我们有您的FXML和SampleControllerStart
源代码(至少是按钮点击处理程序),我们可能会帮助您在公开显示代码时遵守java命名约定谢谢您的帮助这正是我想要做的。万分感谢@请考虑接受回答和投票。谢谢