2017-09-29 25 views
0

VBoxのボタンをJavaコードで中央に配置できません! 私はシーンビルダを使用して、左のAnchorPaneにVBoxを中心としたボタンを持つSplitPaneを作成しました。 右のAnchorPaneではVBoxのButtonを、JavaMLではFXMLではなく、これを再作成します。しかし、私はvb.setAlignment(Pos.CENTER);を使用していますが、右ボタンは、センターません:VBoxのJavaFXセンターボタン

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コントローラクラスコード:

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); 

    } 
} 
+0

なぜVBoxを使用しますか?なぜFlowLayoutはありませんか? – matt

+0

これは、Scene Builder(Left Pane)を使用したFXMLで動作します。それではなぜですか?私が言っていること:FXMLで動作するのであれば、それもJava(右ペイン)でも使えないでしょうか? – gkane

+0

FlowLayoutはあなたが望むものと思われます。 – matt

答えて

0

さてあなたはなかったですVBoxのディメンションを定義しないで、デフォルトでは(ScrollPaneの内部で)、あなたのケースの子のサイズに合わせます。ボタンのサイズは50,50または50です。そのようなものなので、あなたはアライメントを見ることができません。 2番目のAnchorPaneのサイズに合わせてVBoxのサイズを定義するか、または寸法(幅、高さ)をバインドするだけです:

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

パーフェクト!ありがとう。私は、ボタンが中心に置かれていたが、VBoxが小さすぎたことに気付かなかった.... – gkane

関連する問題