Layout 我可以更改VBox中一个元素的对齐方式吗?

Layout 我可以更改VBox中一个元素的对齐方式吗?,layout,alignment,javafx-8,containers,vbox,Layout,Alignment,Javafx 8,Containers,Vbox,如果我在VBox中放置控件(或带有控件的布局),所有元素都会以相同的方式对齐。我想像这样改变其中一个元素的对齐方式 我试图通过对按钮2调用setAlignment()来更改按钮2的对齐方式,但对单个元素调用setAlignment()不会更改VBox中的对齐方式。(JavaDoc对Button.setAlignment()的解释毫无用处。) 通过使用HBox并设置对齐方式,我可以更改按钮4的对齐方式。如果不需要的话,我宁愿不引入额外的节点。是否有一种方法可以在不使用其他布局的情况下更改布局容器

如果我在VBox中放置控件(或带有控件的布局),所有元素都会以相同的方式对齐。我想像这样改变其中一个元素的对齐方式

我试图通过对按钮2调用
setAlignment()
来更改按钮2的对齐方式,但对单个元素调用
setAlignment()
不会更改VBox中的对齐方式。(JavaDoc对Button.setAlignment()的解释毫无用处。)

通过使用HBox并设置对齐方式,我可以更改按钮4的对齐方式。如果不需要的话,我宁愿不引入额外的节点。是否有一种方法可以在不使用其他布局的情况下更改布局容器中一个节点的对齐方式

代码如下:

    public class VBoxAlignmentDemoApplication extends Application {

    public static void main(String[] args) {
        launch(args);
    }


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

        FXMLLoader loader = new FXMLLoader(getClass().getResource("/VBoxAlignmentDemo.fxml"));
        Parent root = loader.load();

        Scene scene = new Scene(root);
        primaryStage.setScene(scene);
        primaryStage.setTitle("VBoxAlignmentDemo");
        primaryStage.show();
    }
}

public class VBoxAlignmentDemoController implements Initializable {

    @FXML
    VBox vbox;

    @FXML
    Button button2;

    public void initialize(URL arg0, ResourceBundle arg1) {
        button2.setAlignment(Pos.CENTER_RIGHT);
    }
}

<VBox fx:id="vbox" alignment="CENTER_LEFT" maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" prefWidth="200.0" xmlns="http://javafx.com/javafx/8.0.111" xmlns:fx="http://javafx.com/fxml/1" fx:controller="vbox.alignment.demo.VBoxAlignmentDemoController">
   <children>
      <Button mnemonicParsing="false" text="Button 1" />
      <Button fx:id="button2" mnemonicParsing="false" text="Button 2" />
      <Button mnemonicParsing="false" text="Button 3" />
      <HBox alignment="CENTER">
         <children>
            <Button mnemonicParsing="false" text="Button 4" />
         </children>
      </HBox>
   </children>
</VBox>
公共类VBoxAlignmentDemoApplication扩展应用程序{
公共静态void main(字符串[]args){
发射(args);
}
@凌驾
public void start(Stage primaryStage)引发异常{
FXMLLoader=newFXMLLoader(getClass().getResource(“/VBoxAlignmentDemo.fxml”);
父根=loader.load();
场景=新场景(根);
初级阶段。场景(场景);
setTitle(“VBoxAlignmentDemo”);
primaryStage.show();
}
}
公共类VBoxAlignmentDemoController实现可初始化{
@FXML
VBox-VBox;
@FXML
按钮2;
公共void初始化(URL arg0,ResourceBundle arg1){
按钮2.设置对齐(位置居中\右侧);
}
}

为了澄清这一点,
setAlignment()
指定元素子元素的对齐方式。将
按钮设置为向右对齐将使所有子项向右对齐。同样,在父VBox上设置对齐方式也会影响您不想要的所有按钮。如您所做的,将按钮包装在HBox中是最简单的解决方案。你到底为什么反对使用额外的节点?@Michael-为了让事情尽可能简单,避免场景图膨胀。我的场景图将是如此之大。使用
HBox
将使其尽可能简单。你正在寻找一个解决方案,你认为这将是一个没有证据的问题。这是不必要的。使用
HBox
,完成图形用户界面的其余部分,如果您发现使用
HBox
将该按钮居中会对性能产生可测量的影响,请返回并修复它。否则,不要操心小事情。您可以使用带有单个列的
GridPane
,而不是
VBox
,这将允许您这样做,并将节点总数保持在最小值。为了澄清这一点,
setAlignment()
指定元素子元素的对齐方式。将
按钮设置为向右对齐将使所有子项向右对齐。同样,在父VBox上设置对齐方式也会影响您不想要的所有按钮。如您所做的,将按钮包装在HBox中是最简单的解决方案。你到底为什么反对使用额外的节点?@Michael-为了让事情尽可能简单,避免场景图膨胀。我的场景图将是如此之大。使用
HBox
将使其尽可能简单。你正在寻找一个解决方案,你认为这将是一个没有证据的问题。这是不必要的。使用
HBox
,完成图形用户界面的其余部分,如果您发现使用
HBox
将该按钮居中会对性能产生可测量的影响,请返回并修复它。否则,不要操心于琐事。您可以使用带有单个列的
GridPane
,而不是
VBox
,这将允许您这样做,并将节点总数保持在最小值。