广州北大青鸟计算机职业培训学校
互联网技术培训、软件技术培训、大数据培训、云计算培训、数据分析培训信息网
当前位置:网站首页 > 软件教程 > Java技术 > 正文

惠州JavaFX中UI控件和域模型之间的绑定是什么?_北大青鸟IT学校

作者:邓华发布时间:2021-05-16分类:Java技术浏览:762


导读:大家在学习Java的过程都会遇到各种各样的问题,例如:JavaFX中UI控件和域模型之间的绑定是什么?那么下面我们一起来看看惠州北大青鸟学术部老师是怎么讲解这道题的。

大家在学习Java的过程都会遇到各种各样的问题,例如:JavaFX中UI控件和域模型之间的绑定是什么?那么下面我们一起来看看惠州北大青鸟学术部老师是怎么讲解这道题的。

在JavaFX中,UI控件和域模型之间的数据绑定很容易。以下代码显示如何创建登录对话框并绑定用户域对象。

首先,我们定义域对象,它是描述用户名和密码的JavaFX JavaBean。

class User {   private final ReadOnlyStringWrapper userName;   private StringProperty password;   public User() {
      userName = new ReadOnlyStringWrapper(this, "userName", "ABC");
      password = new SimpleStringProperty(this, "password", "");
  }  
  public final String getUserName() {
      return userName.get();
  }   public ReadOnlyStringProperty userNameProperty() {
      return userName.getReadOnlyProperty();
  }  
  public final String getPassword() {
      return password.get();
  }   public StringProperty passwordProperty() {
      return password;
  }
}

我们创建了两个UI控件,一个是用Text控件显示用户名,另一个是PasswordField控件,它将输入值绑定到域对象中的密码字段。

Text userName = new Text();
userName.textProperty().bind(user.userNameProperty());

PasswordField passwordField = new PasswordField();
passwordField.setPromptText("Password");
user.passwordProperty().bind(passwordField.textProperty());

BooleanProperty accessGranted在passwordField的文本值属性的更改侦听器中设置。

       passwordField.textProperty().addListener((obs, ov, nv) -> {
           boolean granted = passwordField.getText().equals(MY_PASS);
           accessGranted.set(granted);            if (granted) {
               primaryStage.setTitle("");
           }
       });

在enter键hit事件中访问BooleanProperty accessGranted。

       
       // user hits the enter key
       passwordField.setOnAction(actionEvent -> {            if (accessGranted.get()) {
               System.out.println("granted access:"+ user.getUserName());
               System.out.println("password:"+ user.getPassword());
               Platform.exit();
           } else {
             primaryStage.setTitle("no access");
           }
       });

完整的源代码。

import javafx.application.Application;import javafx.application.Platform;import javafx.beans.property.BooleanProperty;import javafx.beans.property.ReadOnlyStringProperty;import javafx.beans.property.ReadOnlyStringWrapper;import javafx.beans.property.SimpleBooleanProperty;import javafx.beans.property.SimpleStringProperty;import javafx.beans.property.StringProperty;import javafx.scene.Group;import javafx.scene.Scene;import javafx.scene.control.PasswordField;import javafx.scene.layout.VBox;import javafx.scene.text.Text;import javafx.stage.Stage;public class Main extends Application {    private final static String MY_PASS = "asdf";    private final static BooleanProperty accessGranted = new SimpleBooleanProperty(false);
   @Override    public void start(Stage primaryStage) {
       User user = new User();
       Group root = new Group();
       Scene scene = new Scene(root, 320, 100);
       primaryStage.setScene(scene);
       
       Text userName = new Text();
       userName.textProperty().bind(user.userNameProperty());

       PasswordField passwordField = new PasswordField();
       passwordField.setPromptText("Password");
       user.passwordProperty().bind(passwordField.textProperty());        
       // user hits the enter key        passwordField.setOnAction(actionEvent -> {            if (accessGranted.get()) {
               System.out.println("granted access:"+ user.getUserName());
               System.out.println("password:"+ user.getPassword());
               Platform.exit();
           } else {
             primaryStage.setTitle("no access");
           }
       });
       
       passwordField.textProperty().addListener((obs, ov, nv) -> {            boolean granted = passwordField.getText().equals(MY_PASS);
           accessGranted.set(granted);            if (granted) {
               primaryStage.setTitle("");
           }
       });
       VBox formLayout = new VBox(4);
       formLayout.getChildren().addAll(userName, passwordField);
       formLayout.setLayoutX(12);
       formLayout.setLayoutY(12);

       root.getChildren().addAll(formLayout);
       primaryStage.show();
   }    public static void main(String[] args) {
       launch(args);
   }
}class User {   private final ReadOnlyStringWrapper userName;   private StringProperty password;   public User() {
      userName = new ReadOnlyStringWrapper(this, "userName", "ABC");
      password = new SimpleStringProperty(this, "password", "");
  }  
  public final String getUserName() {       return userName.get();
  }   public ReadOnlyStringProperty userNameProperty() {       return userName.getReadOnlyProperty();
  }  
  public final String getPassword() {       return password.get();
  }   public StringProperty passwordProperty() {       return password;
  }
}

上面的代码生成以下结果。

JavaFX绑定.png

想了解更多关于Java的资讯,可以来惠州北大青鸟新方舟校区了解一下。

标签:惠州计算机JAVA软件开发惠州计算机Java软件开发惠州计算机JAVA培训惠州计算机JAVA软件开发学校惠州计算机Java软件开发培训JAVAJava软件开发北大青鸟IT计算机学校北大青鸟IT软件学校北大青鸟IT学校


Java技术排行
标签列表
网站分类
文章归档
最近发表