我有3个窗口......
main
:主要应用
mod-win1
:从main
打开的模态窗口,用于编辑/创建特定对象,
mod-win2
:从mod-win1
打开的模态窗口,作为自定义文件选择器。
mod-win2
上的按钮创建/打开 mod-win1
,这将在此窗口的布局控制器中执行。 mod-win1
将对自身的引用传递给mod-win2
,mod-win2
用于在需要时调用close方法(取消/选择时)。
问题在于,只要窗户关闭,它就会变得模糊不清。声音 - 我知道,小气,但它加重了我!如果您尝试点击它,模态窗口后面的锁定窗口会产生相同的声音,所以我想它是因为我回到了布局控制器锁定的窗口,以关闭当前的窗口。我的所有其他模态窗口都是静默关闭的,它们不是从另一个窗口的布局控制器中创建的!
任何人都可以确认这是否会导致这种噪音?
另外,有没有办法让窗口关闭(从布局控制器内部),所以我不必访问调用对象?
...或者我应该创建一个全新的对象来包含所有文件选择器功能,然后调用该对象(而不是mod-win1
布局控制器)来关闭窗口?
答案 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();
}
}
我的猜测是,您没有正确设置窗口所有者,但没有示例代码,这是不可能的。