GridPane通常用于布局:第一列上的只读标签的输入表单和第二列上的输入字段。
GridPane可以在行,列或单元格级别指定约束。
例如,我们可以设置包含输入文本字段的第二列,以在窗口调整大小时调整大小。
示例
以下代码演示使用GridPane布局的简单表单应用程序。它有以下布局。
+------------------------+
| [label ] [ field ] |
| [label ] [ field ] |
| [ button ] |
+------------------------+
完整的代码实现如下所示 -
import javafx.application.Application
import javafx.geometry.HPos
import javafx.geometry.Insets
import javafx.scene.Scene
import javafx.scene.control.Button
import javafx.scene.control.Label
import javafx.scene.control.TextField
import javafx.scene.layout.BorderPane
import javafx.scene.layout.ColumnConstraints
import javafx.scene.layout.GridPane
import javafx.scene.layout.Priority
import javafx.scene.paint.Color
import javafx.stage.Stage
public class Main extends Application {
public static void main(String[] args) {
Application.launch(args)
}
@Override
public void start(Stage primaryStage) {
BorderPane root = new BorderPane()
Scene scene = new Scene(root, 380, 150, Color.WHITE)
// @ w WW .yII b a I .c O m
GridPane gridpane = new GridPane()
gridpane.setPadding(new Insets(5))
gridpane.setHgap(5)
gridpane.setVgap(5)
ColumnConstraints column1 = new ColumnConstraints(100)
ColumnConstraints column2 = new ColumnConstraints(50, 150, 300)
column2.setHgrow(Priority.ALWAYS)
gridpane.getColumnConstraints().addAll(column1, column2)
Label fNameLbl = new Label("First Name")
TextField fNameFld = new TextField()
Label lNameLbl = new Label("Last Name")
TextField lNameFld = new TextField()
Button saveButt = new Button("Save")
// First name label
GridPane.setHalignment(fNameLbl, HPos.RIGHT)
gridpane.add(fNameLbl, 0, 0)
// Last name label
GridPane.setHalignment(lNameLbl, HPos.RIGHT)
gridpane.add(lNameLbl, 0, 1)
// First name field
GridPane.setHalignment(fNameFld, HPos.LEFT)
gridpane.add(fNameFld, 1, 0)
// Last name field
GridPane.setHalignment(lNameFld, HPos.LEFT)
gridpane.add(lNameFld, 1, 1)
// Save button
GridPane.setHalignment(saveButt, HPos.RIGHT)
gridpane.add(saveButt, 1, 2)
root.setCenter(gridpane)
primaryStage.setScene(scene)
primaryStage.show()
}
}
上面的代码生成以下结果。
示例2
以下是一个实现登录窗口的代码 -
import javafx.application.Application
import javafx.event.ActionEvent
import javafx.event.EventHandler
import javafx.geometry.Insets
import javafx.geometry.Pos
import javafx.scene.Scene
import javafx.scene.control.Button
import javafx.scene.control.Label
import javafx.scene.control.PasswordField
import javafx.scene.control.TextField
import javafx.scene.layout.GridPane
import javafx.scene.layout.HBox
import javafx.scene.paint.Color
import javafx.scene.text.Font
import javafx.scene.text.FontWeight
import javafx.scene.text.Text
import javafx.stage.Stage
public class Main extends Application {
public static void main(String[] args) {
launch(args)
}
@Override
public void start(Stage primaryStage) {
primaryStage.setTitle("JavaFX Welcome")
GridPane grid = new GridPane()
grid.setAlignment(Pos.CENTER)
grid.setHgap(10)
grid.setVgap(10)
grid.setPadding(new Insets(25, 25, 25, 25))
Text scenetitle = new Text("Welcome")
scenetitle.setFont(Font.font("Tahoma", FontWeight.NORMAL, 20))
grid.add(scenetitle, 0, 0, 2, 1)
Label userName = new Label("User Name:")
grid.add(userName, 0, 1)
TextField userTextField = new TextField()
grid.add(userTextField, 1, 1)
Label pw = new Label("Password:")
grid.add(pw, 0, 2)
PasswordField pwBox = new PasswordField()
grid.add(pwBox, 1, 2)
Button btn = new Button("Sign in")
HBox hbBtn = new HBox(10)
hbBtn.setAlignment(Pos.BOTTOM_RIGHT)
hbBtn.getChildren().add(btn)
grid.add(hbBtn, 1, 4)
final Text actiontarget = new Text()
grid.add(actiontarget, 1, 6)
btn.setOnAction(new EventHandler<ActionEvent>() {
@Override
public void handle(ActionEvent e) {
actiontarget.setFill(Color.FIREBRICK)
actiontarget.setText("Sign in button pressed")
}
})
Scene scene = new Scene(grid, 300, 275)
primaryStage.setScene(scene)
primaryStage.show()
}
}
上面的代码生成以下结果。