2017-07-25 106 views
1

我试图阻止用户能够移动弹出的警报。我发现一种选择是将样式设置为UNDECORATED以删除它们点击以移动警报的边框,但我个人认为这看起来非常难看。不可移动警报窗口

还有其他的选择吗?

+3

听起来非常不好的用户体验给我。 – Michael

+0

我并不积极,但理论上你可以通过重写窗口的事件监听器来吞噬与弹出窗口相关的拖放事件。基本上创建一个扩展任何窗口类的类,覆盖事件监听器方法并检查拖放事件,如果它们发生则返回,如果不存在则调用'super(...)'。并且不要将样式设置为'UNDECORATED'。 –

+2

我没有说你做过。尽管如此,它总是值得质疑哪些要求来自哪里以及它们存在的原因。如果您认为没有考虑到要求,那么您可能会经常这样做。令人沮丧,真的。 – Michael

回答

3

我建议去StageStyle.UNDECORATED并添加你想要的任何装饰里面。

没有系统装饰,在这种情况下,是好处。因为人们习惯了标准控件(关闭按钮,通过拖动标题等来移动),并且通过删除它们,您可以清楚地看到您不希望此窗口可移动。

小例子:

Stage alert = new Stage(StageStyle.UNDECORATED); 
    alert.initModality(Modality.APPLICATION_MODAL); 
    VBox root = new VBox(30); 
    root.setStyle("-fx-background-color: antiquewhite"); 
    root.setAlignment(Pos.CENTER); 
    root.setPadding(new Insets(25)); 
    root.setBorder(new Border(new BorderStroke(Color.BLACK, 
     BorderStrokeStyle.SOLID, CornerRadii.EMPTY, BorderWidths.DEFAULT))); 

    Button btn = new Button("Got it!"); 
    btn.setOnAction((e)-> {alert.close();}); 
    Label label = new Label("Alert!"); 
    label.setFont(Font.font("Verdana", 20)); 
    root.getChildren().addAll(label, btn); 

    alert.setScene(new Scene(root, 200, 150)); 

,让你在下一个窗口:

enter image description here

+0

感谢您提出解决方案!我的问题仍然是,我个人发现“未修饰”的窗口刺耳而丑陋。我已经尝试向他们添加边框,但似乎没有任何东西阻止我想要在看到其中的一个时将我的眼睛挖出来。 – Biscuit