2016-09-22 79 views
2

首先,代码产生说明该问题的UI:JavaFX的如何垂直对齐的CheckBox在与HBox在GridPane

package test; 

import javafx.application.Application; 
import javafx.geometry.Pos; 
import javafx.geometry.VPos; 
import javafx.scene.Scene; 
import javafx.scene.control.CheckBox; 
import javafx.scene.control.ComboBox; 
import javafx.scene.layout.GridPane; 
import javafx.scene.layout.HBox; 
import javafx.stage.Stage; 

public class Main extends Application { 

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

    @Override 
    public void start(final Stage window) throws Exception { 
     // Create a VBox to hold the table and button 
     final GridPane root = new GridPane(); 
     root.setHgap(5); 
     root.setVgap(5); 

     // Add a combo-box to the first row 
     final ComboBox<String> dropdown1 = new ComboBox<>(); 
     dropdown1.getItems().add("Option 1"); 
     dropdown1.getSelectionModel().selectFirst(); 
     root.add(dropdown1, 0, 0); 

     // Add a checkbox to the first row 
     final CheckBox checkbox1 = new CheckBox("CB Text 1"); 
     root.add(checkbox1, 1, 0); 

     // Add a combo-box to the second row 
     final ComboBox<String> dropdown2 = new ComboBox<>(); 
     dropdown2.getItems().add("Option 2"); 
     dropdown2.getSelectionModel().selectFirst(); 
     root.add(dropdown2, 0, 1); 

     // Add a checkbox, wrapped in an HBox, to the second row 
     final CheckBox checkbox2 = new CheckBox("CB Text 2"); 
     final HBox hbox = new HBox(checkbox2); 
     hbox.setAlignment(Pos.BASELINE_LEFT); 
     root.add(hbox, 1, 1); 
     GridPane.setValignment(hbox, VPos.BASELINE); 

     // Show the JavaFX window 
     final Scene scene = new Scene(root); 
     window.setScene(scene); 
     window.show(); 
    } 
} 

上面的代码生成以下UI(爪哇8u102视窗64):

Example Application

作为图像中所示,CheckBox的第二行中的垂直对准错位与ComboBox。我希望所有内容都与文本基准保持一致。如何获取GridPane中的第二行以匹配第一行的对齐方式,而不删除HBox

+0

例如,你可以使用:'hbox.setAlignment(Pos.CENTER_LEFT);'和'checkbox2.setAlignment(Pos.CENTER_LEFT);'。 – DVarga

回答

2

修改用于填充违规单元为以下的代码:

// Add a checkbox, wrapped in an HBox, to the second row 
final CheckBox checkbox2 = new CheckBox("CB Text 2"); 
final HBox hbox = new HBox(checkbox2); 
hbox.setFillHeight(true);   // Added this 
hbox.setAlignment(Pos.CENTER_LEFT);// Changed the alignment to center-left 
root.add(hbox, 1, 1); 
//GridPane.setValignment(hbox, VPos.BASELINE); This is unnecessary 

该代码将迫使HBox是相同的高度的行,然后垂直居中CheckBox内它。