2016-06-09 158 views
0

我期望的行爲如下,fieldPane垂直居中,位於table旁邊,但兩者頂部對齊(位於bigGrid行0)。這是爲什麼發生?我應該怎麼做?JavaFX:將GridPane單元格設置爲所需的垂直位置

import javafx.application.Application; 
import javafx.geometry.HPos; 
import javafx.geometry.VPos; 
import javafx.stage.Stage; 
import javafx.scene.Scene; 
import javafx.scene.control.Button; 
import javafx.scene.control.Label; 
import javafx.scene.control.TableView; 
import javafx.scene.control.TextField; 
import javafx.scene.layout.GridPane; 
import javafx.scene.layout.RowConstraints; 


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


     TableView table = new TableView(); 

     GridPane fieldPane = new GridPane(); 
     Button addButton = new Button("Add Crew"), 
       updateButton = new Button("Update Crew"); 
     Label crewIdLabel = new Label("Crew ID"), 
       crewNameLabel = new Label("Crew Name"); 
     TextField crewIdText = new TextField(), 
       crewNameText = new TextField(); 
     fieldPane.setHgap(10); 
     fieldPane.setVgap(10); 
     fieldPane.addRow(0, crewIdLabel, crewIdText); 
     fieldPane.addRow(1, crewNameLabel, crewNameText); 

     GridPane bigPane = new GridPane(); 
     bigPane.setHgap(10); 
     bigPane.setVgap(10); 
     bigPane.add(table, 0, 0, 2, 1); 
     bigPane.add(fieldPane, 2, 0, 2, 1); 
     GridPane.setValignment(fieldPane, VPos.CENTER); 
     bigPane.add(addButton, 1, 1, 1, 1); 
     GridPane.setHalignment(addButton, HPos.RIGHT); 
     bigPane.add(updateButton, 3, 1, 1, 1); 
     GridPane.setHalignment(updateButton, HPos.RIGHT); 

     Scene scene = new Scene(bigPane); 
     stage.setScene(scene); 
     stage.show(); 
    } 

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

} 
+0

您可以修改此代碼,以便它創建一個[MCVE]? –

+0

@James_D,完成。 –

回答

1

fieldPane正在填補其細胞中的全部內容在bigPane,你可以通過把邊界檢查它。由於fieldPane內部有額外空間,除了需要保存其內容外,fieldPane中的單元需要位於該額外空間內。默認對齊是左上角;改變它,你可以做

fieldPane.setAlignment(Pos.CENTER); 

或者,也可以防止fieldPane增長到填滿整個細胞與

GridPane.setFillHeight(fieldPane, false); 

,然後因爲你已經有

GridPane.setValignment(fieldPane, VPos.CENTER); 

fieldPane將以其網格單元爲中心。

+0

我在「大網格窗格」部分之後添加了這些行,並且看起來沒有效果。 –

+0

已更新的答案。 –

相關問題