VBox中的JavaFX中心按钮

时间:2017-09-29 10:18:27

标签: javafx fxml

我无法在VB代码中将Button放在VBox中心! 我使用Scene Builder创建一个SplitPane,左侧的AnchorPane具有一个以VBox为中心的Button。 我想在Java Code中重新创建这个,VBox中的Button,右侧的AnchorPane,而不是FXML。但是右边的按钮不会居中,尽管我使用的是vb.setAlignment(Pos.CENTER);

enter image description here

我的FXML代码:

<?xml version="1.0" encoding="UTF-8"?>

<?import javafx.scene.control.Button?>
<?import javafx.scene.control.SplitPane?>
<?import javafx.scene.layout.AnchorPane?>
<?import javafx.scene.layout.VBox?>

<AnchorPane id="AnchorPane" maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" prefHeight="200.0" prefWidth="400.0" xmlns="http://javafx.com/javafx/8.0.141" xmlns:fx="http://javafx.com/fxml/1" fx:controller="testimageview.MainViewController">
   <children>
      <SplitPane dividerPositions="0.5" prefHeight="200.0" prefWidth="400.0" AnchorPane.bottomAnchor="0.0" AnchorPane.leftAnchor="0.0" AnchorPane.rightAnchor="0.0" AnchorPane.topAnchor="0.0">
        <items>
          <AnchorPane fx:id="leftAnchorPane" minHeight="0.0" minWidth="0.0" prefHeight="160.0" prefWidth="100.0">
               <children>
                  <VBox alignment="CENTER" prefHeight="198.0" prefWidth="171.0" AnchorPane.bottomAnchor="0.0" AnchorPane.leftAnchor="0.0" AnchorPane.rightAnchor="0.0" AnchorPane.topAnchor="0.0">
                     <children>
                        <Button mnemonicParsing="false" text="FXML" />
                     </children>
                  </VBox>
               </children>
            </AnchorPane>
          <AnchorPane fx:id="rightAnchorPane" minHeight="0.0" minWidth="0.0" prefHeight="160.0" prefWidth="100.0" />
        </items>
      </SplitPane>
   </children>
</AnchorPane>

我的Java Controller类代码:

package testimageview;

import java.net.URL;
import java.util.ResourceBundle;
import javafx.fxml.FXML;
import javafx.fxml.Initializable;
import javafx.geometry.Pos;
import javafx.scene.control.Button;
import javafx.scene.layout.AnchorPane;
import javafx.scene.layout.Priority;
import javafx.scene.layout.VBox;

public class MainViewController implements Initializable {

    @FXML
    private AnchorPane leftAnchorPane;

    @FXML
    private AnchorPane rightAnchorPane;

    public MainViewController() {
    }

    @Override
    public void initialize(URL url, ResourceBundle rb) {
    VBox.setVgrow(leftAnchorPane, Priority.ALWAYS);

    VBox vb = new VBox();

    Button rightButton = new Button();
    rightButton.setText("Java");

    vb.setAlignment(Pos.CENTER);
    vb.getChildren().addAll(rightButton);

    rightAnchorPane.getChildren().add(vb);

    } 
}

1 个答案:

答案 0 :(得分:1)

嗯,你没有定义VBox的尺寸,所以默认情况下(在ScrollPane中)它会适合你的孩子的大小,在你的情况下,按钮大小像50,50或类似的东西,所以你看不到对准。您需要做的就是定义VBox的大小以匹配第二个AnchorPane的大小,或者您可以绑定它们的尺寸(宽度,高度),如:

vb.prefWidthProperty().bind(rightAnchorPane.widthProperty());
vb.prefHeightProperty().bind(rightAnchorPane.heightProperty());