1. 程式人生 > >利用JavaFx開發RIA桌面應用-佈局說明

利用JavaFx開發RIA桌面應用-佈局說明

1.概要

JavaFX 帶有自己的佈局類,如圖所示(來自 Amy Fowler 在 JavaOne 2011 的簡報),旨在便於對任何型別的平臺和任何大小的場景進行使用者介面佈局,這些類位於 javafx.scene.layout 程式包中。

這裡寫圖片描述

下圖則對每種佈局做了說明:

這裡寫圖片描述

2.具體說明

本文僅對其中四個經常使用的佈局作演示說明,分別是VBox、HBox、BorderPane、GridPane,當然要設計出比較優美的介面,僅僅靠這些完全不夠,還需要大家自我修行,本文僅僅做一個初級的介紹,讓大家對佈局有一個視覺上的瞭解。

2.1 VBox

垂直佈局,往佈局中新增的控制元件依據新增順序從上到下垂直排列。如下,往vbox中添加了3個標籤。

VBox vBox = new VBox();

Label label1 = new Label("測試1");
Label label2 = new Label("測試2");
Label label3 = new Label("測試3");

vBox.getChildren().addAll(label1,label2,label3);

效果圖:
這裡寫圖片描述

2.2 HBox

水平佈局,往佈局中新增的控制元件依據新增順序從左到右水平排列。如下,往hbox中添加了3個標籤。

HBox hBox= new HBox();

Label label1 = new Label("測試1"
); Label label2 = new Label("測試2"); Label label3 = new Label("測試3"); hBox.getChildren().addAll(label1,label2,label3);

效果圖:

這裡寫圖片描述

2.3 BorderPane

上中下左右經典佈局,提供了5個方位的佈局設定方式。如下,往borderPane中添加了5個標籤。

BorderPane borderPane = new BorderPane();

Label label1 = new Label("測試1-上");
Label label2 = new Label("測試2-中"
); Label label3 = new Label("測試3-左"); Label label4 = new Label("測試4-右"); Label label5 = new Label("測試5-下"); borderPane.setTop(label1); borderPane.setCenter(label2); borderPane.setLeft(label3); borderPane.setRight(label4); borderPane.setBottom(label5);

效果圖:

這裡寫圖片描述

2.4 GridPane

網格佈局,可以讓使用者自由配置控制元件方位,可以設計出更美的介面。

        GridPane grid = new GridPane();
        grid.setVgap(10);
        grid.setHgap(10);
        grid.setPadding(new Insets(50,0,0,0));
        //grid.setGridLinesVisible(true);
        grid.setAlignment(Pos.CENTER);

        Text serverName = new Text(Constant.SERVER_NAME);
        ComboBox serverNameInput = myStyleComboBox.getComboBox(1,1);
        serverNameInput.setEditable(true);
        serverNameInput.setMaxWidth(Double.MAX_VALUE);
        grid.add(serverName,1,0,2,1);
        grid.add(serverNameInput,3,0);
        grid.setHgrow(serverNameInput,Priority.ALWAYS);

        Text userName = new Text(Constant.USER_NAME);
        ComboBox userNameInput = myStyleComboBox.getComboBox(1,2);
        userNameInput.setEditable(true);
        userNameInput.setMaxWidth(Double.MAX_VALUE);
        grid.add(userName,1,1,2,1);
        grid.add(userNameInput,3,1);

        Text passWord = new Text(Constant.PASS_WORD);
        PasswordField passWordInput = new PasswordField();
        grid.add(passWord,1,2,2,1);
        grid.add(passWordInput,3,2);

        Text databaseName = new Text(Constant.DATABASE);
        ComboBox databaseNameInput = myStyleComboBox.getComboBox(1,3);
        databaseNameInput.getEditor().setEditable(false);
        databaseNameInput.setEditable(true);
        databaseNameInput.setMaxWidth(Double.MAX_VALUE);
        grid.add(databaseName,1,3,2,1);
        grid.add(databaseNameInput,3,3);

        Text databaseConfig = new Text(Constant.DATABASE_CONFIG);
        TextField databaseConfigInput = new TextField();
        Button buttonOfDataPath = myStyleButton.getShadowButton(Constant.BROWSE, ImageUtil.getImageView("image/upload_file.png"));
        buttonOfDataPath.getStyleClass().add("button-data");
        grid.add(databaseConfig,1,4,2,1);
        grid.add(databaseConfigInput,3,4);
        grid.add(buttonOfDataPath,4,4);

        Text searchType = new Text(Constant.SEARCH_TYPE);
        ToggleGroup toggleGroup = new ToggleGroup();
        RadioButton radioButtonSingle = new RadioButton();
        RadioButton radioButtonBatch = new RadioButton();
        toggleGroup.getToggles().addAll(radioButtonSingle,radioButtonBatch);
        radioButtonSingle.setText(Constant.SINGLE_SEARCH);
        radioButtonBatch.setText(Constant.BATCH_SEARCH);
        grid.add(searchType,1,5,2,1);
        grid.add(radioButtonSingle,3,5);
        grid.add(radioButtonBatch,3,6);


        CheckBox remenberPassWord = new CheckBox();
        Text remenberPassWordTitle = new Text(Constant.REMENBER_PASS_WORD);
        grid.add(remenberPassWord,1,7);
        grid.add(remenberPassWordTitle,2,7);

效果圖:

這裡寫圖片描述

各控制元件在網格中的分佈:

這裡寫圖片描述

相關文章: