首页 > 其他分享 >如何使用GridPane 以创建一个登录框为例

如何使用GridPane 以创建一个登录框为例

时间:2023-05-26 23:11:22浏览次数:36  
标签:登录 GridPane javafx scene 框为例 new import gridPane

如何使用GridPane 以创建一个登录框为例

GridPane 可以看成是一个二维表格,它的默认行数和列数都是 0。也就是说,如果你创建一个空的 GridPane 对象,它将没有任何行和列。

当你向 GridPane 中添加组件时,GridPane 会自动根据组件的位置和跨度计算出所需的行数和列数,并自动扩展网格以适应组件。

比如下面的登录框采用了 GridPane 作为根布局:

image

这是一个三行两列的一个二维表:

  • 第一行第一列放的是一个 Label ,内容是 userName
  • 第一行第二列放的是一个 TextField ,用来接受用户名的输入
  • 第二行第一列放的是一个 Label ,内容是 password
  • 第二行第二列放的是一个 TextField ,用来接收密码的输入
  • 第三行第二列放的是一个 Button ,用来确认登录

第三行第一列空了出来,没有放任何控件。

完整代码

LoginWindow.java

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.GridPane;
import javafx.stage.Modality;
import javafx.stage.Stage;

public class LoginWindow 
{
    private Stage window;
    private boolean isLoginSucc;

    private void confirmLogin(String userName, String password)
    {
        if (userName.equals("test") && password.equals("123456"))
        {
            isLoginSucc = true;
        }

        window.close();
    }

    public boolean open()
    {
        isLoginSucc = false;

        Label userNameLabel = new Label("UserName");
        TextField userNameTextField = new TextField();

        Label passwordLabel = new Label("Password");
        TextField passwordTextField = new TextField();

        Button confirmButton = new Button("Login");
        confirmButton.setOnAction(e -> confirmLogin(userNameTextField.getText(), passwordTextField.getText()));

        GridPane gridPane = new GridPane();
        gridPane.setPadding(new Insets(10));
        gridPane.setVgap(5);
        gridPane.setHgap(5);
        gridPane.add(userNameLabel, 0, 0);
        gridPane.add(userNameTextField, 1, 0);
        gridPane.add(passwordLabel, 0, 1);
        gridPane.add(passwordTextField, 1, 1);
        gridPane.add(confirmButton, 1, 2);

        Scene scene = new Scene(gridPane);

        window = new Stage();
        window.setScene(scene);
        window.initModality(Modality.APPLICATION_MODAL);
        window.showAndWait();

        return isLoginSucc;
    }
}

代码说明:

  • gridPane.setVgap 设置格子纵向的间隔
  • gridPane.setHgap 设置格子横向的间隔
  • 通过调用 gridPane.add(Node, col, row) 方法,将组件放到某一个格子上
  • 我们没有设置窗口和Scene的大小,因此它们的大小会根据控件自动调整

测试代码:LoginWindowExample.java

import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.layout.VBox;
import javafx.stage.Stage;

public class LoginWindowExample extends Application
{
    @Override
    public void start(Stage window) throws Exception
    {
        VBox vBox = new VBox();

        Button loginButton = new Button("Login");
        loginButton.setOnAction(e -> System.out.println("is login: " + new LoginWindow().open()) );
        vBox.getChildren().add(loginButton);

        Scene scene = new Scene(vBox, 400, 300);

        window.setScene(scene);
        window.setTitle(this.getClass().getSimpleName());
        window.show();
    }

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

总结

  • GridPane 是一个二维表格布局,可用于创建复杂的用户界面。
  • 通过向 GridPane 添加组件,可以自动计算所需的行数和列数,并自动调整网格大小以适应组件。
  • GridPane的 setVgap 和 setHgap 可用于设置格子见的距离。
  • 通过调用 gridPane.add(Node, col, row) 方法,可以将组件放置在指定的格子中。
  • 使用GridPane可以轻松地创建登录框等复杂布局。

标签:登录,GridPane,javafx,scene,框为例,new,import,gridPane
From: https://www.cnblogs.com/javafx-howto/p/17436040.html

相关文章

  • ssh远程登录服务器时提示'Permission denied (publickey)'的解决办法
    scp远程拷贝文件时提示错误:Warning:Permanentlyadded'10.0.0.182'(RSA)tothelistofknownhosts.Permissiondenied(publickey).解决:登录10.0.0.182,将/etc/ssh/sshd_config文件中的PasswordAuthenticationno改为PasswordAuthenticationyes重启sshd服务:/etc/init.......
  • 单点登录
    1、概念单点登录SSO,说的是在一个多系统共存的环境下,用户在一处登录后,就不用在其他系统中登录,也就是用户的一次登录能得到其他所有系统的信任。2、单点登录的要点存储信任;验证信任;3、实现单点登录的三种方式(1)以cookie作为凭证最简单的单点登录实现方式,是使用cookie作为媒介,存......
  • Ruby实践—用户登录
    开发环境Ruby:Ruby1.9.1Rails:Rails2.3.5Mysql:Mysql5.0.9Driver:mysql-2.8.1-x86-mingw32.gemIDE:Rubymine2.0.1 一、创建View/login在View/login下创建login.html.erb、index.html.erb、loginFail.html.erblogin.html.erb代码如下:<h1>Welcometologin!</h1><%form_tagdo%......
  • 微信小程序授权登录
    需要的数据库字段:openid,nickName,session_key 需要Token,去官网现在jwt的扩展JSONWebTokenLibraries-jwt.io在app下面创建一个server目录接着新建一个Token类下面是封装Token的代码<?phpnamespaceApp\server;useFirebase\JWT\JWK;useFirebase\JWT\JWT;class......
  • Linux首次登录入与寻求帮助(Linux的简单使用)
    Linux首次登录入与寻求帮助一些Linux中使用的常用命令与技巧:进入终端系统方式(纯文本环境):按ctrl+alt+F2会进入tty2,同理F3~F7均可分别进入tty3~tty7,只有tty1是图形化界面(如果已经安装了图形界面了),在文本环境中按ctrl+alt+F1会进入图形化界面在文本模式注销......
  • linux命令全部失效+无法登录 极限操作
    背景在kali上大概用了有两个月,这两个月可以说喜忧参半喜:kali系统优化的很好,不管是开机关机还是运行应用程序,都非常快,非常流畅,配合占用超小的xcfe桌面,爽飞忧:由于我是直接安装在物理机上的,原本是打算做开发和逆向用,但这个系统做开发和逆向,bug实在是太多,而且缺少很多必要的so文件(......
  • 宝塔面板登录 phpMyAdmin 提示服务器和客户端上指示的HTTPS之间不匹配
    宝塔面板登录phpMyAdmin提示服务器和客户端上指示的HTTPS之间不匹配https://www.niuqi360.com/btpanel/mismatch-between-https-indicated-on-server-and-client/......
  • drf之登录功能,认证组件,权限组件,频率组件
    目录一、登录功能表模型视图类回顾路由二、认证组件认证组件使用步骤(固定用法)三、权限组件权限类的使用步骤四、频率组件频率类的使用步骤一、登录功能表模型classUserInfo(models.Model):name=models.CharField(max_length=32)password=models.CharField(max_......
  • django配置文件作用,drf 登录功能,drf认证组件,drf权限组件,drf频率组件
    django配置文件作用:    drf登录功能:view内:from.modelsimportUserInfo,UserTokenfromrest_framework.viewsetsimportViewSetimportuuidfromrest_framework.responseimportResponsefromrest_framework.decoratorsimportactionclassUser......
  • Portainer 忘记了管理员登录密码。。。
    前言Portainer应该都比较熟悉了,它是一个轻量级的管理UI ,可让你轻松管理不同的Docker环境。系统不常使用后,密码也没有记录过,这就更容易忘记账号密码了,是不是就无法在使用系统了呢?答案当然不是,也就是在多折腾折腾,最终还是可以解决问题的。操练查看容器是否正常运行服务正常运行,......