私はJavaFXを使用してソフトウェアの作業を行ってきましたが、愚かではあるが心配な問題があります。
コードの特定の部分にHBox
があり、その中に3つの項目、image
、label
、およびVBox
があります。
問題は、image
を左に、つまりwindow
の左マージンの隣に、VBox
を右に揃えたいことです。 、つまり、window
の右境界線の横にあり、その方法がわかりません。
VBox.setAlignment(Pos.RIGHT_CENTER)
を使用しようとしましたが、機能しませんでした。
これは、レイアウトの2つの角にアイテムを配置する場合の最も一般的な配置の問題です。
あなたが持ちたいと言ってみましょう:
HBox
|
ImageView (Left)
Label (Center)
VBox (Right)
私が非常に簡単な解決策は、2つの余分なRegions
を使用することです。 ImageViewとLabelの間の1つ。もう1つは、LabelとVBoxの間にあります。
HBox
|
ImageView (Left)
Region
Label (Center)
Region
VBox (Right)
これらのリージョンには、HGrow
がPriority.Always
。したがって、HBoxのサイズを変更すると、これら2つが大きくなり、他の要素はその場所にそのまま残ります。
FXMLの例:
<?xml version="1.0" encoding="UTF-8"?>
<?import javafx.scene.control.Label?>
<?import javafx.scene.image.Image?>
<?import javafx.scene.image.ImageView?>
<?import javafx.scene.layout.*?>
<HBox alignment="CENTER" maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" prefHeight="94.0" prefWidth="600.0" xmlns="http://javafx.com/javafx/8" xmlns:fx="http://javafx.com/fxml/1">
<children>
<ImageView fitHeight="150.0" fitWidth="140.0" pickOnBounds="true" preserveRatio="true">
<image>
<Image url="http://www.imaginaformacion.com/wp-content/uploads/2010/06/JavaFx.png" />
</image>
</ImageView>
<Region prefHeight="200.0" prefWidth="200.0" HBox.hgrow="ALWAYS" />
<Label prefHeight="17.0" prefWidth="205.0" text="Label On the Center" />
<Region prefHeight="200.0" prefWidth="200.0" HBox.hgrow="ALWAYS" />
<VBox alignment="CENTER_RIGHT" prefHeight="94.0" prefWidth="200.0">
<children>
<Label prefHeight="17.0" prefWidth="200.0" text="Label Inside the VBox" />
</children>
</VBox>
</children>
</HBox>
HBox.hgrow="ALWAYS"
両方のリージョン。
出力
最適なオプションはHBox
からBorderPane
に切り替えることだと思います。これにより、ウィンドウの任意のエッジにアイテムを貼り付けることができます。
別のオプションはGridPane
です。列を選択し、「Halignment」プロパティを「RIGHT」に変更できます。
ちなみに、JavaFXを楽しみながら JavaFX Scene Builder を使用することをお勧めします。