使用JavaFx Fxml笔记

news2024/11/28 4:27:39

使用JavaFx Fxml实现账号密码登录 

HelloApplication.java:
package com.example.dr295cmonth7;

import javafx.application.Application;
import javafx.fxml.FXMLLoader;
import javafx.geometry.Insets;
import javafx.scene.Parent;
import javafx.scene.Scene;
import javafx.scene.control.Alert;
import javafx.scene.control.ButtonType;
import javafx.stage.Stage;

import java.io.IOException;
import java.util.Objects;

public class HelloApplication extends Application {
    //private 私有对象
    private Stage primaryStage;

    @Override
    public void start(Stage stage) throws IOException {
        //赋值
        this.primaryStage = stage;
        FXMLLoader fxmlLoader = new FXMLLoader(HelloApplication.class.getResource("table.fxml"));
        Scene scene = new Scene(fxmlLoader.load(), 0, 0);
        scene.getStylesheets().add(Objects.requireNonNull(getClass().getResource("assets/styles.css")).toExternalForm());
        stage.setTitle("DR295C数据采集传输仪");
        stage.setScene(scene);
        stage.show();
    }

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

    public void showSuccessDialogAndNavigate() {
        Alert alert3 = new Alert(Alert.AlertType.INFORMATION);
        alert3.setTitle("登录成功");
        alert3.setHeaderText("欢迎登录!");
        alert3.setContentText("即将跳转至主页面");
        alert3.showAndWait().ifPresent(response -> {
            if (response == ButtonType.OK) {
                //点击确定之后的逻辑
            } else {
                // 用户点击了取消按钮或关闭了对话框的处理逻辑
                System.out.println("用户点击了取消按钮或关闭了对话框");
            }
        });
    }
}
调起其他页面方法
// HelloApplication helloApplication = new HelloApplication();
// helloApplication.showSuccessDialogAndNavigate();

login.fxml:

<?xml version="1.0" encoding="UTF-8"?>

<?import javafx.scene.layout.*?>
<?import javafx.scene.control.*?>

<GridPane xmlns:fx="http://javafx.com/fxml"
          fx:controller="com.example.dr295cmonth7.LoginView" alignment="center" hgap="10" vgap="10">
    <VBox alignment="CENTER" maxWidth="300.0" prefWidth="300.0" spacing="10.0">
        <HBox alignment="CENTER" maxWidth="300.0" prefWidth="300.0" spacing="10.0">
            <Label text="登录" GridPane.columnIndex="0" GridPane.rowIndex="0"/>
        </HBox>
        <HBox alignment="CENTER" maxWidth="300.0" prefWidth="300.0" spacing="10.0">
            <Label text="账号:" GridPane.columnIndex="0" GridPane.rowIndex="0"/>
            <TextField fx:id="usernameField" GridPane.columnIndex="1" GridPane.rowIndex="0"/>
        </HBox>
        <HBox alignment="CENTER" maxWidth="300.0" prefWidth="300.0" spacing="10.0">
            <Label text="密码:" GridPane.columnIndex="0" GridPane.rowIndex="1"/>
            <PasswordField fx:id="passwordField" GridPane.columnIndex="1" GridPane.rowIndex="1"/>
        </HBox>
        <Label fx:id="welcomeText" alignment="CENTER" maxWidth="1.7976931348623157E308"
               style="-fx-text-fill: red;"/>
        <Button text="登录" onAction="#handleLogin" GridPane.columnIndex="1" GridPane.rowIndex="2"/>
    </VBox>
</GridPane>

 handleLogin.java:

package com.example.dr295cmonth7;

import javafx.event.ActionEvent;
import javafx.fxml.FXML;
import javafx.fxml.FXMLLoader;
import javafx.scene.Parent;
import javafx.scene.Scene;
import javafx.scene.control.*;
import javafx.stage.Stage;

import java.util.Objects;

public class LoginView {

    @FXML
    private TextField usernameField;

    @FXML
    private PasswordField passwordField;

    @FXML
    private Label welcomeText;

    @FXML
    private Button jumpButton;
    @FXML
    private void handleLogin() throws Exception {
        String usernameValue = usernameField.getText();
        String passwordValue = passwordField.getText();

        if (usernameValue.isEmpty() || passwordValue.length() < 6) {
            Alert alert = new Alert(Alert.AlertType.ERROR);
            alert.setTitle("提示");
            alert.setHeaderText("账号和密码不能为空,密码长度至少为 6 位");
            alert.showAndWait();
            welcomeText.setText("账号和密码不能为空,密码长度至少为 6 位");
            return;
        }
        if ("admin".equals(usernameValue) && "123456".equals(passwordValue)) {
            //跳转页面
            Parent subPage = FXMLLoader.load(Objects.requireNonNull(getClass().getResource("table.fxml")));
            Scene subPageScene = new Scene(subPage);
            Stage stage = (Stage) jumpButton.getScene().getWindow();
            stage.setScene(subPageScene);
            stage.show();
            //调起其他页面方法
            // HelloApplication helloApplication = new HelloApplication();
            // helloApplication.showSuccessDialogAndNavigate();
        } else {
            // 登录失败的提示
            Alert alert = new Alert(Alert.AlertType.ERROR);
            alert.setTitle("错误");
            alert.setHeaderText("账号或密码错误");
            alert.showAndWait();
        }
    }
}

使用JavaFx Fxml实现开始结束时间:

首先创建 TimeRange.fxml 文件:

<?xml version="1.0" encoding="UTF-8"?>

<?import javafx.scene.layout.VBox?>
<?import javafx.scene.control.DatePicker?>
<?import javafx.scene.control.Label?>

<HBox xmlns:fx="http://javafx.com/fxml/1" spacing="10">
   <Label text="创建日期"/>
   <DatePicker fx:id="startDatePicker" prefWidth="140.0"/>
   <Label text="-"/>
   <DatePicker fx:id="endDatePicker" prefWidth="140.0"/>
   <Button onAction="#query" text="查询" textFill="WHITE" GridPane.columnIndex="2" GridPane.rowIndex="0" styleClass="button-all-common" />
</HBox>

然后创建 TimeRangeController.java 类:

import javafx.beans.property.ObjectProperty;
import javafx.beans.property.SimpleObjectProperty;
import javafx.fxml.FXML;
import javafx.scene.control.DatePicker;

import java.time.LocalDate;

public class TimeRangeController {

   private ObjectProperty startDate = new SimpleObjectProperty();
    @FXML
    private DatePicker startDatePicker;

    private ObjectProperty endDate = new SimpleObjectProperty();
    @FXML
    private DatePicker endDatePicker;

 //以后七天:LocalDate.now().plusDays(7)  ;前七天:LocalDate.now().minusDays(7)
    public TimeRangeController() {
         // 初始化日期属性 方法一:
        startDate.set(LocalDate.now().minusDays(7));
        endDate.set(LocalDate.now());
 // 初始化日期属性 方法二:
//        LocalDate today = LocalDate.now();
//        startDate.set(today.minusDays(7));
//        endDate.set(today);
    }

    @FXML
    public void initialize() {
        startDatePicker.valueProperty().bindBidirectional(startDate);
        endDatePicker.valueProperty().bindBidirectional(endDate);
    }

 //查询
    @FXML
    void query(ActionEvent event) {
        System.out.println(startDate.get());   //开始时间
        System.out.println(endDate.get());   //结束时间
    }

}

使用JavaFx Fxml定义各种类型的数据:

字符串 + 整数 :
private StringProperty searchValue = new SimpleStringProperty();
@FXML
private TextField searchField;

表格:

@FXML
private TableView<User> operateTableView;

@FXML
private TableColumn<User, String> startTime;

@FXML
private TableColumn<User, String> endTime;

@FXML
private TableColumn<User, String> operator;

 

 日期:

private ObjectProperty startDate = new SimpleObjectProperty();
@FXML
private DatePicker startDatePicker;

 开关

@FXML
    private CheckBox booleanCheckBox;

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1961683.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Pinely Round 4 (Div. 1 + Div. 2)

有不明白或者想交流一下的可以加一下扣扣&#xff1a;2674993642&#xff0c;博客一般写的时候才看 A. Maximize the Last Element 解析&#xff1a;题目要让一次删除两个相邻的数字&#xff0c;最后留下尽可能最大的数字&#xff0c;赛时我用笔模拟了一下&#xff0c;发现如…

c++11,左值引用和右值引用,右值引用的作用

目录 左右值引用概念 右值引用的作用 左右值引用概念 什么是左值&#xff1f;什么是左值引用&#xff1f; 左值是一个表示数据的表达式(如变量名或解引用的指针)&#xff0c;我们可以获取它的地址可以对它赋 值&#xff0c;左值可以出现赋值符号的左边&#xff0c;右值不能出…

最详细最新最简单的Jenkins安装使用

首先去jenkins官网下载最新LTS war版本https://www.jenkins.io/download/ 准备sdk包 、nginx配置文件 、已配置的maven文件 查看系统架构 cat /etc/redhat-release uname -a uname -m lscpu安装常用工具 yum install jq -y yum install git -yyum install nginx -y systemc…

深入源码:解析SpotBugs (6)jvm 字节码简介

文章目录 一、JVM字节码概述一、文件结构概述二、详细解析1. 魔数和Class文件的版本2. 常量池3. 访问标志4. 类索引、父类索引与接口索引集合5. 字段表和方法表6. 属性表 字节码Spotbugs 作为一名资深的Java开发工程师&#xff0c;对JVM及其字节码有着深入的理解。现在&#xf…

DRAM 和 NAND 闪存收入将在 2024 年显著增长 75% 和 77%

#### 市场概况 根据 TrendForce 最新发布的市场报告&#xff0c;预计 2024 年 DRAM 和 NAND 闪存的收入将分别显著增长 75% 和 77%&#xff0c;这一增长主要是由于平均价格的上涨以及高价值产品的兴起&#xff0c;例如 HBM&#xff08;高带宽内存&#xff09;和 QLC&#xff0…

卷积神经网络(六)---实现 cifar10 分类

cifar10 数据集有60000张图片&#xff0c;每张图片的大小都是 32x32 的三通道的彩色图&#xff0c;一共是10种类别、每种类别有6000张图片&#xff0c;如图4.27所示。 图 4.27 cifar数据集 使用前面讲过的残差结构来处理 cifar10 数据集&#xff0c;可以实现比较高的准确率。 …

配置本地开发服务器代理请求以及登录模块开发(二)

项目初始化完成之后&#xff0c;准备开始进行项目的开发&#xff0c;首先配置好开发环境作为整个项目的基础 一、配置代理 1、config/proxy.ts配置代理 export default {// 如果需要自定义本地开发服务器 请取消注释按需调整dev: {// localhost:8000/api/** -> https://p…

Seata 入门与实战

一、什么是 Seata Seata 是一款开源的分布式事务解决方式&#xff0c;致力于提供高性能和简单易用的分布式事务服务。Seata 为用户提供了 AT、TCC、SAGA 和 XA 事务模式&#xff0c;为用户打造一站式的分布式事务解决方案。 二、Seata 组成 事务协调者&#xff08;Transacti…

什么是Shell?怎么编写和执行Shell脚本?

大家好呀&#xff01;今天来简单介绍一下Shell基础&#xff0c;Shell介于内核与用户之间&#xff0c;是一个命令解释器&#xff0c;负责命令的解释。简单理解&#xff0c;Shell既是一个程序也是一种脚本语言。 1、shell介绍 1.1 概述 shell介于内核与用户之间&#xff0c;是一个…

索引结构—B+Tree索引、Hash索引、Full-Text(全文)索引、R-Tree(空间)索引

一、概述 在数据库系统中&#xff0c;索引是一种用于加快数据检索的数据结构。不同的索引结构适用于不同的查询场景和数据特性。索引按照不同角度可以划分不同类型的索引。按照数据结构可以划分BTree索引、Hash索引、FULL TEXT&#xff08;全文&#xff09;索引、R-Tree&#…

python inf是什么意思

INF / inf&#xff1a;这个值表示“无穷大 (infinity 的缩写)”&#xff0c;即超出了计算机可以表示的浮点数的范围&#xff08;或者说超过了 double 类型的值&#xff09;。例如&#xff0c;当用 0 除一个整数时便会得到一个1.#INF / inf值&#xff1b;相应的&#xff0c;如果…

卡码网KamaCoder 103. 水流问题

题目来源&#xff1a;103. 水流问题 C题解&#xff1a;从边界往高处走&#xff0c;走过的地方做标记。第一组边界跟第二组边界能走到的地方取交集。 代码来源代码随想录。&#xff08;虽然思路一样&#xff0c;但人家代码写得比我好哇&#xff09; #include <iostream>…

pyinstaller带浏览器一起打包playwright 独立运行exe

前置条件 没有安装自带环境&#xff0c;则 playwright install 安装了自带的浏览器 查看playwright的浏览器的位置 playwright install --dry-run 打开此文件夹可以看到 新建一个多层级目录playwright\driver\package.local-browsers 然后复制chromium-1124到playwright\dr…

听说它可以让代码更优雅

一提到静态代码检查工具这个词应该比较好理解&#xff0c;所谓静态代码检查工具就是检查静态代码的工具&#xff0c;完美~ 言归正传&#xff0c;相信很多程序员朋友都听说过静态代码检查工具这个概念&#xff0c;它可能是我们IDE里的某一个插件&#xff0c;可能是计算机中的一…

比 faster-whisper 至少快10倍的音视频转换文字

背景介绍 前两天我自己玩玩搞搞一个音频转文字服务&#xff0c;基于 faster-whisper&#xff0c;本想着这个已经是很快的了&#xff0c;没想到还有比它更快的&#xff0c;今天就来介绍使用一下。 FunClip&#xff0c;是阿里巴巴推出的一个智能视频剪辑工具&#xff0c;它结合…

计算机毕业设计选题推荐-某炼油厂盲板管理系统-Java/Python项目实战

✨作者主页&#xff1a;IT研究室✨ 个人简介&#xff1a;曾从事计算机专业培训教学&#xff0c;擅长Java、Python、微信小程序、Golang、安卓Android等项目实战。接项目定制开发、代码讲解、答辩教学、文档编写、降重等。 ☑文末获取源码☑ 精彩专栏推荐⬇⬇⬇ Java项目 Python…

[Bugku] web-CTF靶场详解!!!

平台为“山东安信安全技术有限公司”自研CTF/AWD一体化平台&#xff0c;部分赛题采用动态FLAG形式&#xff0c;避免直接抄袭答案。 平台有题库、赛事预告、工具库、Writeup库等模块。 ------------------------------- Simple_SSTI_1 启动环境&#xff1a; 页面提示传入参数f…

【Qt】QLCDNumberQProgressBarQCalendarWidget

目录 QLCDNumber 倒计时小程序 相关属性 QProgressBar 进度条小程序 相关设置 QLCDNumber QLCDNumber是Qt框架中用于显示数字或计数值的小部件。通常用于显示整数值&#xff0c;例如时钟、计时器、计数器等 常用属性 属性说明intValueQLCDNumber显示的初始值(int类型)va…

【全面介绍下Gitea,什么是Gitea?】

&#x1f308;个人主页: 程序员不想敲代码啊 &#x1f3c6;CSDN优质创作者&#xff0c;CSDN实力新星&#xff0c;CSDN博客专家 &#x1f44d;点赞⭐评论⭐收藏 &#x1f91d;希望本文对您有所裨益&#xff0c;如有不足之处&#xff0c;欢迎在评论区提出指正&#xff0c;让我们共…

这几个高级爬虫软件和插件真的强!

亮数据&#xff08;Bright Data&#xff09; 亮数据是一款强大的数据采集工具&#xff0c;以其全球代理IP网络和强大数据采集技术而闻名。它能够轻松采集各种网页数据&#xff0c;包括产品信息、价格、评论和社交媒体数据等。 网站&#xff1a;https://get.brightdata.com/we…