Javafx 简明教程

JavaFX - UI Controls

UI Controls 是允许用户与应用程序或网站交互的图形元素。它们包括按钮、菜单、滑块、文本字段、复选框、单选按钮等等。在本教程中,我们将探讨 JavaFX 的不同类型的 UI 控件。

让我们从介绍用户界面的三个主要方面来开始讨论——

  1. UI elements - 这些是用户最终看到并与之交互的核心视觉元素。JavaFX 提供了从基本到复杂的广泛使用的常见元素,我们将在本教程中介绍。

  2. Layouts - 它们定义了 UI 元素应该如何组织在屏幕上,并为 GUI(图形用户界面)提供最终的外观和感觉。这部分将在布局章节中介绍。

  3. Behavior - 当用户与 UI 元素交互时发生的事件。这部分将在事件处理章节中介绍。

为了创建 GUI 组件(控件),JavaFX 支持几种控件,例如日期选择器、按钮文本字段等。这些控件由包 javafx.scene.control 的不同类表示。我们可以通过实例化其相应的类来创建一个控件。

以下是设计 JavaFX 中的 GUI 时使用的常用控件列表。

S.No

Control & Description

1

Label Label 对象是一个用于放置文本的组件。

2

Button 此类创建一个带标签的按钮。

3

ColorPicker ColorPicker 提供了一个控件面板,旨在允许用户处理和选择颜色。

4

CheckBox CheckBox 是一个图形组件,可以处于打开(true)或关闭(false)状态。

5

RadioButton RadioButton 类是一个图形组件,它要么在组中处于 ON(true)状态,要么处于 OFF(false)状态。

6

ListView ListView 组件向用户呈现滚动文本项列表。

7

TextField TextField 对象是一个文本组件,它允许编辑单行文本。

8

PasswordField PasswordField 对象是一个文本组件,专门用于密码输入。

9

Scrollbar Scrollbar 控件代表一个滚动条组件,让用户能够从一系列值中选择。

10

FileChooser FileChooser 控件代表一个对话框窗口,用户可以从中选择一个文件。

11

ProgressBar 随着任务接近完成,进度条显示任务已完成的百分比。

12

Slider Slider 让用户在有界区间内通过滑动旋钮来以图形方式选择一个值。

Example

以下程序是一个示例,在 JavaFX 中显示登录页面。在此,我们使用控件 label, text field, password fieldbutton 。将代码保存在一个名为 LoginPage.java 的文件中。

import javafx.application.Application;
import javafx.geometry.Insets;
import javafx.geometry.Pos;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.control.PasswordField;
import javafx.scene.layout.GridPane;
import javafx.scene.text.Text;
import javafx.scene.control.TextField;
import javafx.stage.Stage;

public class LoginPage extends Application {
   @Override
   public void start(Stage stage) {
      //creating label email
      Text text1 = new Text("Email");

      //creating label password
      Text text2 = new Text("Password");

      //Creating Text Filed for email
      TextField textField1 = new TextField();

      //Creating Text Filed for password
      PasswordField textField2 = new PasswordField();

      //Creating Buttons
      Button button1 = new Button("Submit");
      Button button2 = new Button("Clear");

      //Creating a Grid Pane
      GridPane gridPane = new GridPane();

      //Setting size for the pane
      gridPane.setMinSize(400, 200);

      //Setting the padding
      gridPane.setPadding(new Insets(10, 10, 10, 10));

      //Setting the vertical and horizontal gaps between the columns
      gridPane.setVgap(5);
      gridPane.setHgap(5);

      //Setting the Grid alignment
      gridPane.setAlignment(Pos.CENTER);

      //Arranging all the nodes in the grid
      gridPane.add(text1, 0, 0);
      gridPane.add(textField1, 1, 0);
      gridPane.add(text2, 0, 1);
      gridPane.add(textField2, 1, 1);
      gridPane.add(button1, 0, 2);
      gridPane.add(button2, 1, 2);
      gridPane.setStyle("-fx-background-color: BEIGE;");

      //Creating a scene object
      Scene scene = new Scene(gridPane);

      //Setting title to the Stage
      stage.setTitle("CSS Example");

      //Adding scene to the stage
      stage.setScene(scene);

      //Displaying the contents of the stage
      stage.show();
   }
   public static void main(String args[]){
      launch(args);
   }
}

使用以下命令,从命令提示符编译并执行已保存的 java 文件。

javac --module-path %PATH_TO_FX% --add-modules javafx.controls LoginPage.java
java --module-path %PATH_TO_FX% --add-modules javafx.controls LoginPage

Output

执行后,上述程序会生成如下所示的 JavaFX 窗口。

login page

Example

以下程序是一个注册表单的示例,展示了 JavaFX 中的控件,例如 Date Picker, Radio Button, Toggle Button, Check Box, List View, and Choice List 。将代码保存在一个名为 Registration.java 的文件中。

import javafx.application.Application;
import javafx.collections.FXCollections;
import javafx.collections.ObservableList;
import javafx.geometry.Insets;
import javafx.geometry.Pos;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.control.CheckBox;
import javafx.scene.control.ChoiceBox;
import javafx.scene.control.DatePicker;
import javafx.scene.control.ListView;
import javafx.scene.control.RadioButton;
import javafx.scene.layout.GridPane;
import javafx.scene.text.Text;
import javafx.scene.control.TextField;
import javafx.scene.control.ToggleGroup;
import javafx.scene.control.ToggleButton;
import javafx.stage.Stage;

public class Registration extends Application {
   @Override
   public void start(Stage stage) {
      //Label for name
      Text nameLabel = new Text("Name");

      //Text field for name
      TextField nameText = new TextField();

      //Label for date of birth
      Text dobLabel = new Text("Date of birth");

      //date picker to choose date
      DatePicker datePicker = new DatePicker();

      //Label for gender
      Text genderLabel = new Text("gender");

      //Toggle group of radio buttons
      ToggleGroup groupGender = new ToggleGroup();
      RadioButton maleRadio = new RadioButton("male");
      maleRadio.setToggleGroup(groupGender);
      RadioButton femaleRadio = new RadioButton("female");
      femaleRadio.setToggleGroup(groupGender);

      //Label for reservation
      Text reservationLabel = new Text("Reservation");

      //Toggle button for reservation
      ToggleButton Reservation = new ToggleButton();
      ToggleButton yes = new ToggleButton("Yes");
      ToggleButton no = new ToggleButton("No");
      ToggleGroup groupReservation = new ToggleGroup();
      yes.setToggleGroup(groupReservation);
      no.setToggleGroup(groupReservation);

      //Label for technologies known
      Text technologiesLabel = new Text("Technologies Known");

      //check box for education
      CheckBox javaCheckBox = new CheckBox("Java");
      javaCheckBox.setIndeterminate(false);

      //check box for education
      CheckBox dotnetCheckBox = new CheckBox("DotNet");
      javaCheckBox.setIndeterminate(false);

      //Label for education
      Text educationLabel = new Text("Educational qualification");

      //list View for educational qualification
      ObservableList<String> names = FXCollections.observableArrayList(
         "Engineering", "MCA", "MBA", "Graduation", "MTECH", "Mphil", "Phd");
      ListView<String> educationListView = new ListView<String>(names);

      //Label for location
      Text locationLabel = new Text("location");

      //Choice box for location
      ChoiceBox locationchoiceBox = new ChoiceBox();
      locationchoiceBox.getItems().addAll
         ("Hyderabad", "Chennai", "Delhi", "Mumbai", "Vishakhapatnam");

      //Label for register
      Button buttonRegister = new Button("Register");

      //Creating a Grid Pane
      GridPane gridPane = new GridPane();

      //Setting size for the pane
      gridPane.setMinSize(500, 500);

      //Setting the padding
      gridPane.setPadding(new Insets(10, 10, 10, 10));

      //Setting the vertical and horizontal gaps between the columns
      gridPane.setVgap(5);
      gridPane.setHgap(5);

      //Setting the Grid alignment
      gridPane.setAlignment(Pos.CENTER);

      //Arranging all the nodes in the grid
      gridPane.add(nameLabel, 0, 0);
      gridPane.add(nameText, 1, 0);

      gridPane.add(dobLabel, 0, 1);
      gridPane.add(datePicker, 1, 1);

      gridPane.add(genderLabel, 0, 2);
      gridPane.add(maleRadio, 1, 2);
      gridPane.add(femaleRadio, 2, 2);
      gridPane.add(reservationLabel, 0, 3);
      gridPane.add(yes, 1, 3);
      gridPane.add(no, 2, 3);

      gridPane.add(technologiesLabel, 0, 4);
      gridPane.add(javaCheckBox, 1, 4);
      gridPane.add(dotnetCheckBox, 2, 4);

      gridPane.add(educationLabel, 0, 5);
      gridPane.add(educationListView, 1, 5);

      gridPane.add(locationLabel, 0, 6);
      gridPane.add(locationchoiceBox, 1, 6);

      gridPane.add(buttonRegister, 2, 8);

      //Styling nodes
      buttonRegister.setStyle(
         "-fx-background-color: darkslateblue; -fx-textfill: white;");

      nameLabel.setStyle("-fx-font: normal bold 15px 'serif' ");
      dobLabel.setStyle("-fx-font: normal bold 15px 'serif' ");
      genderLabel.setStyle("-fx-font: normal bold 15px 'serif' ");
      reservationLabel.setStyle("-fx-font: normal bold 15px 'serif' ");
      technologiesLabel.setStyle("-fx-font: normal bold 15px 'serif' ");
      educationLabel.setStyle("-fx-font: normal bold 15px 'serif' ");
      locationLabel.setStyle("-fx-font: normal bold 15px 'serif' ");

      //Setting the back ground color
      gridPane.setStyle("-fx-background-color: BEIGE;");

      //Creating a scene object
      Scene scene = new Scene(gridPane);

      //Setting title to the Stage
      stage.setTitle("Registration Form");

      //Adding scene to the stage
      stage.setScene(scene);

      //Displaying the contents of the stage
      stage.show();
   }
   public static void main(String args[]){
      launch(args);
   }
}

使用以下命令,从命令提示符编译并执行已保存的 java 文件。

javac --module-path %PATH_TO_FX% --add-modules javafx.controls Registration.java
java --module-path %PATH_TO_FX% --add-modules javafx.controls Registration

Output

执行后,上述程序会生成如下所示的 JavaFX 窗口。

registration form