Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/363.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中的关闭对话框_Java_Javafx 2_Javafx - Fatal编程技术网

JavaFX中的关闭对话框

JavaFX中的关闭对话框,java,javafx-2,javafx,Java,Javafx 2,Javafx,我在JavaFX中有一个简单的对话框: Stage dialogStage = new Stage(); dialogStage.initModality(Modality.WINDOW_MODAL); dialogStage.setScene(new Scene(VBoxBuilder.create() .children(new Text(text), new Button("Close")).alignment(Pos.CENTER).padding(new

我在JavaFX中有一个简单的对话框:

Stage dialogStage = new Stage();
dialogStage.initModality(Modality.WINDOW_MODAL);
dialogStage.setScene(new Scene(VBoxBuilder.create()
                .children(new Text(text), new Button("Close")).alignment(Pos.CENTER).padding(new Insets(5)).build(), xSize, ySize, backgroundColor));
dialogStage.show();
我想在单击
close
按钮时关闭对话框,因此我对代码进行了如下修改:

Stage dialogStage = new Stage();
dialogStage.initModality(Modality.WINDOW_MODAL);
dialogStage.setScene(new Scene(VBoxBuilder.create()
                .children(new Text(text), new Button("Close").setOnAction(new EventHandler<ActionEvent>() {
    @Override
    public void handle(ActionEvent e) {
        aboutDialog();
    }
})).alignment(Pos.CENTER).padding(new Insets(5)).build(), xSize, ySize, backgroundColor));
dialogStage.show();
Stage dialogStage=newstage();
dialogStage.InitModal(MODAL.WINDOW_MODAL);
dialogStage.setScene(新场景(VBoxBuilder.create())
.children(新文本)、新按钮(“关闭”).setOnAction(新事件处理程序(){
@凌驾
公共无效句柄(ActionEvent e){
aboutDialog();
}
})).alignment(Pos.CENTER).padding(新插图(5)).build(),xSize,ySize,backgroundColor));
dialogStage.show();
但是我在Netbeans中得到了这个错误消息:
这里不允许使用'void'类型

您能告诉em使用
close
按钮关闭对话框的正确方法是什么吗?

而不是

@Override
public void handle(ActionEvent e) {
  aboutDialog();
}
试一试


此处不允许使用
'void'类型
,因为当调用
setOnAction
方法时,它返回一个
void
对象。要避免此问题,您需要将处理程序置于生成器外部,如下所示:

Button but = new Button("Close");
but.setOnAction(new EventHandler<ActionEvent>() {
   @Override
   public void handle(ActionEvent e) {
      aboutDialog();
   }
});

Stage dialogStage = new Stage();
dialogStage.initModality(Modality.WINDOW_MODAL);
dialogStage.setScene(new Scene(VBoxBuilder.create()
                .children(new Text(text), but).alignment(Pos.CENTER).padding(new Insets(5)).build(), xSize, ySize, backgroundColor));
dialogStage.show();
按钮,但=新按钮(“关闭”);
但是.setOnAction(新的EventHandler(){
@凌驾
公共无效句柄(ActionEvent e){
aboutDialog();
}
});
Stage dialogStage=新阶段();
dialogStage.InitModal(MODAL.WINDOW_MODAL);
dialogStage.setScene(新场景(VBoxBuilder.create())
.children(新文本(Text),但是).alignment(Pos.CENTER).padding(新插入(5)).build(),xSize,ySize,backgroundColor));
dialogStage.show();

当前,当按下关闭按钮时,将调用名为“aboutDialog”的方法。它的作用是什么?它只是一个小的对话框窗口。这不是我的问题,但是,我只是发布了一个代码片段,它适用于您想要做的事情。为什么不使用showAndWait()而不是show()?只是为了提供一些信息,您可以简化“onAction”声明:
new Button(“Close”)。setOnAction(e->aboutDialog())
。谢谢!我可以问您如何将按钮放置在对话框底部吗?您应该创建一个
边框窗格
而不是
VBox
,并使用
setBottom
方法将按钮添加到底部,然后将文本添加到中间部分hmm我很好奇,因为我认为
close()
会释放对话框中的资源,而
hide
只会使对话框消失,我可能是错的
Button but = new Button("Close");
but.setOnAction(new EventHandler<ActionEvent>() {
   @Override
   public void handle(ActionEvent e) {
      aboutDialog();
   }
});

Stage dialogStage = new Stage();
dialogStage.initModality(Modality.WINDOW_MODAL);
dialogStage.setScene(new Scene(VBoxBuilder.create()
                .children(new Text(text), but).alignment(Pos.CENTER).padding(new Insets(5)).build(), xSize, ySize, backgroundColor));
dialogStage.show();