首页 > 编程语言 >仿微信聊天程序 - 02. 注册界面

仿微信聊天程序 - 02. 注册界面

时间:2023-07-16 13:45:26浏览次数:35  
标签:02 界面 String form void private 仿微信 nickname public

本文是仿微信聊天程序专栏的第二篇文章,主要记录了【注册界面】的实现。

界面设计

仿微信聊天程序的注册界面,是一个表单,由三个输入框和一个按钮组成,具体UI展示如下图所示:

界面布局

页面布局使用fxml,采用VBox从上到下布局,中间的表单使用formsfx,所以只需要预留一个StackPane给表单即可。

<VBox alignment="CENTER" prefHeight="350.0" prefWidth="480.0" spacing="10.0"
      stylesheets="@/css/bootstrapfx.css"
      xmlns:fx="http://javafx.com/fxml" fx:controller="michong.javafx.wx.view.register.RegisterController">
    <children>
        <HBox alignment="CENTER_LEFT">
            <children>
                <Label text="注册" styleClass="h3,b"/>
                <Pane HBox.hgrow="ALWAYS"/>
                <Label text="使用账号"/>
                <Hyperlink text="登录" onAction="#onLoginClick"/>
            </children>
            <padding>
                <Insets left="20.0" right="20.0"/>
            </padding>
        </HBox>
        <StackPane fx:id="formStackPane"/>
        <Button minWidth="120" text="注册" styleClass="btn-primary" onAction="#onRegisterClick"/>
    </children>
    <padding>
        <Insets bottom="30.0" left="30.0" right="30.0" top="5.0"/>
    </padding>
</VBox>

表单构建

表单使用的是开源库formfx,其maven坐标如下:

<dependency>
	<groupId>com.dlsc.formsfx</groupId>
	<artifactId>formsfx-core</artifactId>
	<version>1.3.1</version>
</dependency>

表单构建实现如下:

/**
 * @author michong
 */
public class RegisterForm {

    private final RegisterVO vo = new RegisterVO();
    private Form form;
    private FormRenderer renderer;

    private RegisterForm() {
    }

    public static RegisterForm getInstance() {
        RegisterForm rf = new RegisterForm();
        rf.build();
        return rf;
    }

    private void build() {
        // @formatter:off
        String nickname = "昵称";
        String username = "账号";
        String password = "密码";
        String placeholderTextFmt = "请输入%s";
        String requiredTextFmt = "%s必填";

        form = Form.of(
                Group.of(
                        Field.ofStringType(vo.nicknameProperty())
                                .label(nickname)
                                .placeholder(String.format(placeholderTextFmt, nickname))
                                .required(String.format(requiredTextFmt, nickname)),
                        Field.ofStringType(vo.usernameProperty())
                                .label(username)
                                .placeholder(String.format(placeholderTextFmt, username))
                                .required(String.format(requiredTextFmt, username)),
                        PasswordField.ofPasswordType(vo.passwordProperty())
                                .label(password)
                                .placeholder(String.format(placeholderTextFmt, password))
                                .required(String.format(requiredTextFmt, password))
                )
        );}
        // @formatter:on
        renderer = new FormRenderer(form);
    }
}

这里的RegisterVO是一个普通的JavaBean,用于双向绑定表单数据:

public class RegisterVO {

    private final StringProperty nickname = new SimpleStringProperty("");
    private final StringProperty username = new SimpleStringProperty("");
    private final StringProperty password = new SimpleStringProperty("");

    public String getNickname() {
        return nickname.get();
    }
    public StringProperty nicknameProperty() {
        return nickname;
    }
    public void setNickname(String nickname) {
        this.nickname.set(nickname);
    }
  	// 省略其他GETTER和SETTER
}

事件处理

在界面布局中,fxml绑定的controller为RegisterController,RegisterController主要负责UI的初始化和事件处理,其中:

  • initializeUI():实现UI的初始化(其中部分UI直接使用变量绑定fxml的UI,如:formStackPane)
  • initializeEvent():实现事件的初始化(其中部分事件使用方法绑定fxml的action,如onLoginClick和onRegisterClick)
public class RegisterController implements Initializable {
    public StackPane formStackPane;

    private RegisterForm form;

    @Override
    public void initialize(URL location, ResourceBundle resources) {
        initializeUI();
        initializeEvent();
    }

    void initializeUI() {
        form = RegisterForm.getInstance();
        formStackPane.getChildren().add(form.getRenderer());
    }

    void initializeEvent() {
    }

    public void onLoginClick(ActionEvent actionEvent) {
        FX.error("功能开发中...");
    }

    public void onRegisterClick(ActionEvent actionEvent) {
        form.getForm().persist();
        if (form.getForm().isValid()) {
            FX.info(form.getVO().getUsername() + "注册成功");
        }
    }
}

这里事件处理没有实现具体的业务,只是做一个提示,后续业务功能完善后,会继续改造这部分的功能。

启动流程

主程序实现:

public class App extends Application {
    @Override
    public void start(Stage primaryStage) {
        AppStarter.start(primaryStage);
    }

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

启动类实现:

/**
 * @author michong
 */
public class AppStarter {

    public static void start(Stage primaryStage) {
        FXContext.setPrimaryStage(primaryStage);

        Parent root = FX.fxml(RegisterController.class);
        primaryStage.setScene(new Scene(root));
        primaryStage.getIcons().clear();
        primaryStage.getIcons().add(FXIcon.logo());
        primaryStage.setResizable(false);
        primaryStage.show();
    }

}

标签:02,界面,String,form,void,private,仿微信,nickname,public
From: https://www.cnblogs.com/michong2022/p/17557752.html

相关文章

  • 仿微信聊天程序 - 03.登录界面
    本文是仿微信聊天程序专栏的第三篇文章,主要记录了【登录界面】的实现。界面设计仿微信聊天程序的登录界面跟注册界面差不多,只是比注册界面少了一个昵称输入框,如下图所示:界面布局登录界面的界面布局和注册界面的布局差不多,也是使用fxml,采用VBox从上到下布局,中间的表单使用form......
  • 仿微信聊天程序 - 04. 主界面
    本文是仿微信聊天程序专栏的第四篇文章,主要记录了【主界面】的实现。界面设计仿微信聊天程序的主界面总体跟微信的主界面差不多,但是比微信的主界面简单得多,如下图所示:界面布局主界面整个界面采用HBox布局,分为左中右三个部分,最左边是菜单栏,中间是联系人列表或对话信息列表,最右......
  • 仿微信聊天程序 - 05. 聊天列表
    本文是仿微信聊天程序专栏的第五篇文章,主要记录了【聊天列表】的界面实现。界面设计聊天列表在主界面左边,主要显示最近的聊天记录,以及添加好友的信息等,总体界面设计如下:界面布局聊天列表的布局分为两部,列表布局和列表中的每一行的布局,其中列表布局的完整fxml如下:<HBoxprefH......
  • 仿微信聊天程序 - 07. 好友信息
    本文是仿微信聊天程序专栏的第七篇文章,主要记录了【好友信息】的界面实现。界面设计这里的好友信息界面没有处理复杂的功能,仅仅显示好友信息,支持在此界面中发起聊天而已,总体的界面设计如下图所示:界面布局好友信息仅仅只是信息展示,布局相对比较简单,这里采用VBox和HBox组合使用......
  • 仿微信聊天程序 - 06. 好友列表
    本文是仿微信聊天程序专栏的第六篇文章,主要记录了【好友列表】的界面实现。界面设计好友列表在主界面左边,界面UI风格跟聊天列表类似,只不过相比聊天列表更加简单,不需要显示聊天信息,时间等,总体界面设计如下:界面布局跟好友列表一样,聊天列表的布局也分为两部,列表布局和列表中的每......
  • 仿微信聊天程序 - 08. 聊天窗口
    本文是仿微信聊天程序专栏的第八篇文章,主要记录了【聊天窗口】的界面实现。界面设计聊天窗口是整个聊天程序的核心控件,比较复杂,大致可以分为上中下三个部分,上面显示用户昵称以及一些操作菜单,中间是聊天内容显示区域,下面的信息发送的区域,总体界面设计如下:界面布局根据界面设计......
  • [ACTF2020 新生赛]Include
    [ACTF2020新生赛]Include题目来源:buuctf题目类型:web涉及考点:文件包含、任意文件读取1.题目给了个跳转链接tips,点击进入:题目提示存在文件包含漏洞,接下来尝试获取flag.php的源码2.PHP伪协议这里需要先介绍一下php伪协议,方便我们做题。PHP伪协议是PHP支持的协议与封......
  • 2023ACM暑期集训 DAY 2
    模拟赛1题解A上班代码点击查看代码#include<bits/stdc++.h>usingnamespacestd;intx,y,z;intmain(){cin>>x>>y>>z;printf("%d",x+min(y,z));}B 崇拜代码点击查看代码#include<bits/stdc++.h>#definelllonglong#define......
  • ps磨皮插件DR5白金版,支持PS2023
    ps磨皮插件DeliciousRetouch简称DR,dr5白金版对于摄影后期的人员来说非常实用,它可以帮你轻松实现一键美白美妆。有了这款插件你完全不需要太多的技巧,直接运用软件内置的预设即可完成照片的美容修饰操作。ps磨皮插件DR5白金版下载DeliciousRetouch5插件功能特色皮肤平滑工......
  • 内部赛-2023第三届网络安全攻防大赛个人赛②-复赛
    Misc签到cyberchef打开.input:0db584e82fce27bab2e2677e4dd3a95749dddfdf08d52ebe80501df6aac2571fddd3d80dd5df681dc7c57efb831ea5adkey选utf8:1234567890abcdefmode选ECB爆破的魅力stegsolve看文件信息提示Ibelieveinthesecurityofaes&lsbsteganographyaes加......