2017-07-25 105 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