关闭嵌套的模态窗口,没有" blurp"声音

时间:2016-07-13 05:15:21

标签: java javafx

我有3个窗口......

  1. main:主要应用

  2. mod-win1:从main打开的模态窗口,用于编辑/创建特定对象,

  3. mod-win2:从mod-win1打开的模态窗口,作为自定义文件选择器。

  4. 单击mod-win2上的按钮创建/打开

    mod-win1,这将在此窗口的布局控制器中执行。 mod-win1将对自身的引用传递给mod-win2mod-win2用于在需要时调用close方法(取消/选择时)。

    问题在于,只要窗户关闭,它就会变得模糊不清。声音 - 我知道,小气,但它加重了我!如果您尝试点击它,模态窗口后面的锁定窗口会产生相同的声音,所以我想它是因为我回到了布局控制器锁定的窗口,以关闭当前的窗口。我的所有其他模态窗口都是静默关闭的,它们不是从另一个窗口的布局控制器中创建的!

    任何人都可以确认这是否会导致这种噪音?

    另外,有没有办法让窗口关闭(从布局控制器内部),所以我不必访问调用对象? ...或者我应该创建一个全新的对象来包含所有文件选择器功能,然后调用该对象(而不是mod-win1布局控制器)来关闭窗口?

1 个答案:

答案 0 :(得分:0)

可以通过调用close方法随时关闭Stage。我无法使用JDK1.8.0_92在我的Windows 10机器上重现您的模糊声音。但请查看此示例:

package com.isp.stackoverflow;/**
 * Created by okr on 13.07.2016.
 */

import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.layout.StackPane;
import javafx.stage.Modality;
import javafx.stage.Stage;

public class ModalWindowsClosing extends Application
{

  public static void main( String[] args )
  {
    launch( args );
  }

  @Override
  public void start( Stage primaryStage )
  {
    final Button btn = new Button( "click me!" );
    btn.setOnAction( __ ->
    {
      final Stage dialog = new Stage();
      final Button dialogBtn = new Button( "click me again, fool!" );
      dialogBtn.setOnAction( ___ ->
      {
        final Button closeBtn = new Button( "close dialog" );
        closeBtn.setOnAction( ____ -> dialog.close() );
        final Stage innerDialog = new Stage();
        innerDialog.initOwner( dialog );
        innerDialog.initModality( Modality.APPLICATION_MODAL );
        innerDialog.setScene( new Scene( new StackPane( closeBtn ) ) );
        innerDialog.show();
      } );
      dialog.initOwner( primaryStage );
      dialog.initModality( Modality.APPLICATION_MODAL );
      dialog.setScene( new Scene( new StackPane( dialogBtn ) ) );
      dialog.show();
    } );
    primaryStage.setScene( new Scene( new StackPane( btn ) ) );
    primaryStage.show();
  }
}

我的猜测是,您没有正确设置窗口所有者,但没有示例代码,这是不可能的。