我的环境: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);
}
}
任何想法如何处理这个问题? 感谢