2017-11-20 37 views
4

警告ダイアログボックスが表示された後、右下隅に警告ダイアログボックスの位置を設定したいと思います。ここでJavaFX警告ダイアログが表示される前に設定する方法は?

はコードです:

package alert; 

import javafx.application.Application; 
import javafx.geometry.Rectangle2D; 
import javafx.scene.Parent; 
import javafx.scene.Scene; 
import javafx.scene.control.Alert; 
import javafx.scene.control.Button; 
import javafx.scene.layout.StackPane; 
import javafx.stage.Screen; 
import javafx.stage.Stage; 

public class MainAlert extends Application { 

    @Override 
    public void start(Stage stage) throws Exception { 

     Scene scene = new Scene(createContent()); 
     stage.setScene(scene); 
     stage.setMaximized(true); 
     stage.show(); 
    } 

    private Parent createContent() { 

     StackPane stackPane = new StackPane(); 

     Alert alert = new Alert(Alert.AlertType.ERROR); 
     alert.setTitle("Error Dialog"); 
     alert.setHeaderText("Something went wrong"); 
     alert.setContentText("There is an error!"); 

     Button alertButton = new Button("Alert test"); 
     alertButton.setOnAction(event -> { 
      Rectangle2D bounds = Screen.getPrimary().getVisualBounds(); 

      System.out.println("alert.getWidth() = " + alert.getWidth()); 
      System.out.println("alert.getHeight() = " + alert.getHeight()); 

      alert.setX(bounds.getMaxX() - alert.getWidth()); 
      alert.setY(bounds.getMaxY() - alert.getHeight()); 
      alert.showAndWait(); 
     }); 

     stackPane.getChildren().add(alertButton); 

     return stackPane; 
    } 
} 

しかし、その位置が左上隅にあります。理由はalert.getWidth()で、alert.getHeight()は常にNaNです。私はすでにPlatform.runLater()を試しましたが、残念ながら使用しません。

修正方法?

答えて

0

使用、ハードコードされたアラートの幅と高さalert.setX()alert.setY()を設定し、Actionイベント

private Parent createContent() { 

     StackPane stackPane = new StackPane(); 

     Button alertButton = new Button("Alert test"); 
     alertButton.setOnAction(event -> { 

      Alert alert = new Alert(Alert.AlertType.ERROR); 
      alert.setTitle("Error Dialog"); 
      alert.setHeaderText("Something went wrong"); 
      alert.setContentText("There is an error!"); 
      Rectangle2D bounds = Screen.getPrimary().getVisualBounds(); 
      alert.setX(bounds.getMaxX() - 366); 
      alert.setY(bounds.getMaxY() - 185); 

      alert.showAndWait(); 

     }); 

     stackPane.getChildren().add(alertButton); 

     return stackPane; 
    } 
+0

しかし、この位置はとにかく変更されることはありません。 – Grolisc

+0

@Grolisc更新された回答を参照 – aKilleR

+0

アラートダイアログのOSやフォントなどのサイズが違うことがありますか?この場合、どのようにするのですか? – Grolisc

1

Alertをインスタンス化する

Alert alert = new Alert(Alert.AlertType.ERROR); 
DialogPane pane = alert.getDialogPane(); 
pane.setPrefHeight(150.0); 
alert.setWidth(pane.getWidth()); 
Rectangle2D bounds = Screen.getPrimary().getBounds(); 
alert.setX(bounds.getMaxX() - alert.getWidth()); 
alert.setY(bounds.getMaxY() - pane.getPrefHeight() - 25); 

を試してみてください - あなたが飾ら警告ウィンドウを持っている場合は25が必要とされています。それはかなり醜いですが、今のところ最高のソリューションは私が思い付くことができます。また、OSのタスクバーを検討することもできます。

+1

ポジションは右下にあるべきです – Grolisc

+0

@Grolisc私の答えを更新しました。 – onTheFence

+0

@Grolisc -25は、StageStyle.DECORATED(デフォルトであり、alert.initStyle(style);で変更可能)のアラートを持つアラートウィンドウのフレームの高さです。これはDialogPaneのディメンションには含まれていないため、手動で追加する必要があります。 Stageの場合と同じようにAlertの高さと幅が正しく設定できない理由がわかりません。もし私があなただったら、自分のアラートウィンドウを作成するだけです(例えばStageを使って)。 – onTheFence

関連する問題