2015-08-26 4 views
0

Я новичок в JavaFX. Кто-нибудь знает, как я могу позиционировать две кнопки по вертикали (ниже друг друга) в середине экрана.Центр JavaFX две кнопки ниже друг друга

Это мой код до сих пор:

public class StartMenu { 
private StackPane gridStartMenu; 
private Button createNewTournamentbtn; 
private Button viewTournamentbtn; 
private Scene startMenuScene; 
private VBox vboxStartMenu; 

public StartMenu() { 
    gridStartMenu = new StackPane(); 
    vboxStartMenu = new VBox(); 

    //BUTTON 1 
    createNewTournamentbtn = new Button("Create new tournament"); 
    createNewTournamentbtn.setStyle("-fx-font: 22 arial; -fx-base: #b6e7c9;"); 
    createNewTournamentbtn.setPrefSize(300, 50); 

    //BUTTON 2 
    viewTournamentbtn = new Button("View tournaments"); 
    viewTournamentbtn.setStyle("-fx-font: 22 arial; -fx-base: #b6e7c9;"); 
    viewTournamentbtn.setPrefSize(300, 50); 

    gridStartMenu.setAlignment(createNewTournamentbtn, Pos.CENTER); 
    gridStartMenu.setAlignment(viewTournamentbtn, Pos.CENTER); 


    gridStartMenu.getChildren().addAll(createNewTournamentbtn, 
      viewTournamentbtn); 

    startMenuScene = new Scene(gridStartMenu, 600, 600); 
    MainApp.getWindow().setScene(startMenuScene); 
    MainApp.getWindow().show(); 
+0

Вы использовали в JavaFX Scenebuilder? – Swagin9

+0

Нет, не использовали Scenebuilder – BjornS

+0

Если вы используете Eclipse, вы можете это рассмотреть. Это позволит вам перетаскивать кнопки, выпадающие меню и т. Д. – Swagin9

ответ

2

Разновидность совет: Не полагайтесь на Scenebuilder или подобного материала слишком много. Если вы действительно хотите изучить JavaFX, код полностью сам.

И это, как вы можете делать то, что вы хотите сделать:

Во-первых, добавить две кнопки в VBox:

VBox vbox = new VBox(5); // 5 is the spacing between elements in the VBox 
vbox.getChildren().addAll(new Button("Button 1"), new Button("Button 2")); 

Затем центр в VBox, используя следующий код:

stackPane.getChildren().add(vbox); 
StackPane.setAlignment(vbox, Pos.CENTER); 
stage.setScene(new Scene(stackPane)); 
stage.show(); 
+0

Большое спасибо! Это сработало:). Также спасибо за ваш совет. Я очень ценю это. – BjornS

2

Во-первых, я хотел бы упомянуть некоторые из преимуществ FXML:

проверить ссылку Why use FXML

осуществления с помощью FXML:

<?xml version="1.0" encoding="UTF-8"?> 
<?import javafx.scene.control.Button?> 
<?import javafx.scene.layout.StackPane?> 
<?import javafx.scene.layout.VBox?> 
<?import javafx.scene.text.Font?> 

<StackPane maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" prefHeight="400.0" prefWidth="600.0" xmlns="http://javafx.com/javafx/8.0.111" xmlns:fx="http://javafx.com/fxml/1"> 
    <children> 
     <VBox alignment="CENTER" prefHeight="200.0" prefWidth="100.0" spacing="30.0"> 
     <children> 
      <Button mnemonicParsing="false" prefHeight="50.0" prefWidth="300.0" style="-fx-base: #b6e7c9;;" text="Create new tournament"> 
       <font> 
        <Font name="Arial" size="22.0" /> 
       </font> 
      </Button> 
      <Button mnemonicParsing="false" prefHeight="50.0" prefWidth="300.0" style="-fx-base: #b6e7c9;" text="View tournaments"> 
       <font> 
        <Font name="Arial" size="22.0" /> 
       </font> 
      </Button> 
     </children> 
     </VBox> 
    </children> 
</StackPane> 

snapshot

Смежные вопросы