我一直在使用JavaFX开发软件,我有一个愚蠢但令人担忧的问题。
在代码的某些部分,我有一个HBox
,其中有三个项目:image
,label
和VBox
。
我的问题是,我希望image
左对齐,即window
的左边距旁边,VBox
右边对齐,就是window
的右边界旁边,我不知道该怎么做。
我尝试使用VBox.setAlignment(Pos.RIGHT_CENTER)
,但它没有用。
答案 0 :(得分:32)
当您想要将项目放置在布局的两个角落时,这是最常见的对齐问题。
让我们说你想拥有:
HBox
|
ImageView (Left)
Label (Center)
VBox (Right)
我非常简单的解决方案是使用两个额外的Regions
。 ImageView&标签。另一个在Label和VBox之间。
HBox
|
ImageView (Left)
Region
Label (Center)
Region
VBox (Right)
这些区域必须将 HGrow
设置为 Priority.Always
,这样如果您调整HBox的大小,这两个区域会增长,保持另一个元素完好无损。
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"
。
<强>输出强>
答案 1 :(得分:5)
我认为最佳选择可能是从HBox
切换到BorderPane
。它可让您将物品粘在窗户的任何边缘
另一个选项是GridPane
。您可以选择列并更改其&#39; Halignment&#39;财产到&#39;右边&#39;。
顺便说一句,我建议在玩JavaFX时使用JavaFX Scene Builder。