2016-12-07 32 views
0

我正在使用grid.setAlignment(Pos.CENTER);將我的網格居中在JavaFX場景中,但它似乎不起作用。網格總是顯示在場景的左上角,無論我給出的是什麼位置。任何人都可以看到我做錯了什麼?無法使用JavaFX居中網格

我的整個代碼(減去進口)如下:

*public class Main extends Application { 
@Override 
public void start(Stage stage) throws Exception { 
Scene scene = new Scene(new Group(), 450, 250); 

Button btn = new Button(); 
btn.setText("Run"); 


final ComboBox comboBox = new ComboBox(); 
comboBox.getItems().addAll(
"Phase 1", 
"Phase 2", 
"Phase 3", 
"Phase 4", 
"Phase 5" 
); 

GridPane grid = new GridPane(); 
grid.setAlignment(Pos.CENTER); 
grid.setVgap(10); 
grid.setHgap(10); 
grid.setPadding(new Insets(5, 5, 5, 5)); 
grid.add(new Label("Select Phase: "), 0, 0); 
grid.add(comboBox, 1, 0); 
grid.add(new Label("Select Data: "), 0, 1); 
grid.add(btn, 0, 2); 

Group root = (Group)scene.getRoot(); 
root.getChildren().add(grid); 
stage.setScene(scene); 


stage.show(); 
}* 

謝謝!

回答

1

這不是grid.setAlignment(...)所做的:它將網格窗格的整體內容與網格窗格的邊界對齊(請參見docs)。

網格窗格在其父項內的位置由其父項確定。如果你想讓它居中,請使用一個知道如何居中的父母,如:StackPane

import javafx.application.Application; 
import javafx.geometry.Insets; 
import javafx.geometry.Pos; 
import javafx.scene.Scene; 
import javafx.scene.control.Button; 
import javafx.scene.control.ComboBox; 
import javafx.scene.control.Label; 
import javafx.scene.layout.GridPane; 
import javafx.scene.layout.StackPane; 
import javafx.stage.Stage; 

public class Main extends Application { 
    @Override 
    public void start(Stage stage) throws Exception { 

     StackPane root = new StackPane(); 

     Scene scene = new Scene(root, 450, 250); 

     Button btn = new Button(); 
     btn.setText("Run"); 

     final ComboBox<String> comboBox = new ComboBox<>(); 
     comboBox.getItems().addAll("Phase 1", "Phase 2", "Phase 3", "Phase 4", "Phase 5"); 

     GridPane grid = new GridPane(); 

     grid.setVgap(10); 
     grid.setHgap(10); 
     grid.setPadding(new Insets(5, 5, 5, 5)); 
     grid.add(new Label("Select Phase: "), 0, 0); 
     grid.add(comboBox, 1, 0); 
     grid.add(new Label("Select Data: "), 0, 1); 
     grid.add(btn, 0, 2); 


     root.getChildren().add(grid); 
     stage.setScene(scene); 

     stage.show(); 
    } 

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

感謝隊友!這解決了它! – Andrew

+0

標記爲正確的安德魯。 – jewelsea