より具体的には、JavaFXコントロールが中央に配置されないのはなぜですか?以下は2つのスクリーンショットです。1つ目は開始直後(ウィンドウをより見やすい場所に移動しましたが、まだサイズ変更していません)と2つ目は、問題を示すためにサイズ変更した直後です。最初に表示されたときに(すべてのDPIで)適切なサイズになっていることを確認すると、ボーナスポイントが表示されます。
便利なことに、関連するコードがスクリーンショットに含まれています。それでもテキストとして必要な場合は、次のようにします。
private void initJFXPanel(JFXPanel holder)
{
{
{
rootGrid = new GridPane();
rootGrid.setAlignment(Pos.CENTER);
rootGrid.setPadding(new Insets(16));
rootGrid.setHgap(16);
rootGrid.setVgap(8);
}
interior = holder.getScene();
if (interior == null)
holder.setScene(interior = new Scene(rootGrid));
interior.setRoot(rootGrid);
}
{
statusLabel = new Label("Checking for Updates...");
statusLabel.setAlignment(Pos.CENTER);
statusLabel.setTextAlignment(TextAlignment.CENTER);
rootGrid.add(statusLabel, 0, 0);
}
{
progressBar = new ProgressBar();
progressBar.setProgress(-1);
progressBar.setPrefWidth(Constants.MAX_WIN_BOUNDS.width / 5d); // 1/5 the width of the screen
rootGrid.add(progressBar, 0, 1);
}
{
downloadButton = new Button("Get it!");
downloadButton.setAlignment(Pos.CENTER);
rootGrid.add(downloadButton, 0, 2);
}
holder.setMinimumSize(new Dimension((int)(rootGrid.getPrefWidth() + .5), (int)(rootGrid.getPrefHeight() + .5)));
setMinimumSize(holder.getMinimumSize());
}
コントロールをVBox(または他の同様のルートレイアウトペイン)に配置し、 VBoxの配置を設定 を中央に配置します。
これは、JavaFXでのレイアウトの開始に関する私の個人的なアドバイスです(これは単なるアドバイスであり、すべての人に適用できるわけではありません。そのままでも、そのままでもかまいません)。
Hi-dpiサポート
答えをご覧ください:
SceneBuilder に以下をロードして、簡単に表示できます。
<?xml version="1.0" encoding="UTF-8"?>
<?import javafx.geometry.*?>
<?import javafx.scene.control.*?>
<?import Java.lang.*?>
<?import javafx.scene.layout.*?>
<VBox alignment="CENTER" maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" spacing="8.0" xmlns="http://javafx.com/javafx/8" xmlns:fx="http://javafx.com/fxml/1">
<children>
<Label fx:id="updateStatus" text="Checking for Updates..." />
<ProgressBar fx:id="updateProgress" prefWidth="200.0" progress="0.0" />
<Button fx:id="updateAction" mnemonicParsing="false" text="Get it!" />
</children>
<padding>
<Insets bottom="16.0" left="16.0" right="16.0" top="16.0" />
</padding>
</VBox>
JFrame
にサイズを追加していることを確認してください
frame.setSize(500, 300);
GridPane
でフレームまたはJavaFXコントロールを中央揃えにするかどうかわからないので、両方に回答を追加します
Dimension dim = Toolkit.getDefaultToolkit().getScreenSize();
frame.setLocation(dim.width/2-frame.getSize().width/2,
dim.height/2-frame.getSize().height/2);
GridPane
児童センタリング追加する必要があります
GridPane.setHalignment(child, HPos.CENTER);
あなたのコードに、残りの不要なコードを削除してください
私はあなたのコードを編集しました:
{
Label statusLabel = new Label("Checking for Updates...");
//statusLabel.setAlignment(Pos.CENTER);
//statusLabel.setTextAlignment(TextAlignment.CENTER);
rootGrid.add(statusLabel, 0, 0);
GridPane.setHalignment(statusLabel, HPos.CENTER);
}
{
ProgressBar progressBar = new ProgressBar();
progressBar.setProgress(-1);
progressBar.setPrefWidth(400); // 1/5 the width of the screen
rootGrid.add(progressBar, 0, 1);
}
{
Button downloadButton = new Button("Get it!");
//downloadButton.setAlignment(Pos.CENTER);
rootGrid.add(downloadButton, 0, 2);
GridPane.setHalignment(downloadButton, HPos.CENTER);
}
結果は