当所有者Stage被图标化/显示时,JavaFX模态对话框消失

时间:2013-11-14 10:25:50

标签: modal-dialog javafx stage owner

我的环境:Linux Suse 12.3,JDK 1.7.0_45,JavaFX 2.2,编译器合规性级别1.7。

在ButtonAction上打开一个模态对话框,Dialog Stage有一个所有者Stage。

现在对话框已打开,但如果我将所有者图标化并再次显示,则对话框不可见。 (只有当我设置dialog.initModality(Modality.WINDOW_MODAL);dialog.initModality(Modality.APPLICATION_MODAL);时才会发生这种情况)如果我删除了模态,它的工作正常。 更新(模态也不是原因,请参阅我的第二次更新)

更新: 如果应用程序已最大化,我有此问题。如果我单击窗口最大化图标然后显示对话框,然后图标化所有者,现在如果我再次显示所有者应用程序,对话框不可见!

这是代码:

import javafx.beans.value.ChangeListener;
import javafx.beans.value.ObservableValue;
import javafx.scene.Scene;
import javafx.scene.layout.StackPane;
import javafx.scene.paint.Color;
import javafx.scene.text.Text;
import javafx.stage.Modality;
import javafx.stage.Stage;
import javafx.stage.StageStyle;
import you.faces.resources.YF;

public class Alert {

    private String title = new String();
    private String message = new String();

    public Alert(Stage owner){
        final Stage dialog = new Stage();

        dialog.initOwner(owner); 
        dialog.initModality(Modality.WINDOW_MODAL);
        dialog.initStyle(StageStyle.TRANSPARENT);
            // i tried to redisplay the dialog like this, but still not working
        owner.iconifiedProperty().addListener(new ChangeListener<Boolean>() {
            @Override
            public void changed(
                    final ObservableValue<? extends Boolean> paramObservableValue,
                    final Boolean oldValue,
                    final Boolean newValue) {
                    if(newValue){

                    }else{  // none of these affect anything, dialog still not visible

                        dialog.setIconified(false);
                        dialog.show();
                        dialog.toFront();                       
                    }               
            }
        });

        StackPane root = new StackPane();
        root.getStyleClass().add("YOU-FACES-MODAL-DIALOG");
        root.getChildren().add(new Text(25, 25, "Hello World!"));
        Scene scene = new Scene(root,200, 100);
        scene.getStylesheets().add(YF.INSTANCE.getFile("clientUI.css"));
        scene.setFill(Color.TRANSPARENT);
        dialog.setScene(scene);
        //relativeToOwner(dialog,owner);
        dialog.show();
    }

    private void relativeToOwner(Stage stage, Stage owner) {
        stage.setX(owner.getX() + owner.getWidth() / 2 - stage.getWidth() / 2);
        stage.setY(owner.getY() + owner.getHeight() / 2 - stage.getHeight() / 2);

    }
}

任何想法如何处理这个问题? 感谢

0 个答案:

没有答案