2016-06-09 59 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

已更新的答案。 –