使用java语言制作一个窗体(弹窗),用来收集用户输入的内容

news2024/11/27 21:00:37

前言

       最近做的一个需求,有个逻辑环节是:需要从本地保存的xml文件中取出一个值,这个值是会变化的。然后项目经理就给我说,你能不能做一个小工具,让用户可以直接通过界面化操作将这个变化的值写入文件,不用再去找文件路径,在编辑这个文件? 我的第一反应竟然是,不想搞。但也不是不能、使用JFrame就可以实现。

1、JFrame 简介

       JFrame是指一个计算机语言-java的GUI程序的基本思路是以JFrame为基础,它是屏幕上window的对象,能够最大化、最小化、关闭。
       Swing 的三个基本构造块:标签、按钮和文本字段;但是需要个地方安放它们,并希望用户知道如何处理它们。JFrame 类就是解决这个问题的——它是一个容器,允许程序员把其他组件添加到它里面,把它们组织起来,并把它们呈现给用户。        JFrame 实际上不仅仅让程序员把组件放入其中并呈现给用户。比起它表面上的简单性,它实际上是 Swing 包中最复杂的组件。为了最大程度地简化组件,在独立于操作系统的 Swing 组件与实际运行这些组件的操作系统之间,JFrame 起着桥梁的作用。JFrame 在本机操作系统中是以窗口的形式注册的,这么做之后,就可以得到许多熟悉的操作系统窗口的特性:最小化/最大化、改变大小、移动。

构造方法
       只给出部分,本案例要用到的,更多方法请查询官网资料

JFrame()构造一个初始时不可见的新窗体。
JFrame(String title)创建一个新的、初始不可见的、具有指定标题的 Frame。

2、实现步骤:

  • 1、新建Java类
  • 2、声明三控件【定义三个组件JLabel、JTextField和JButton】
    JLabel jlabel;
    JTextField jtf1;
    JButton jb1, jb2;
  • 3、添加面板【定义个JPanel控件,然后依次将控件添加到JPanel上】
        pane = new JPanel();
        pane.setBounds(10, 10, 400, 300);
        pane.setLayout(null);
        jlabel = new JLabel("设备主秘匙:");
        jlabel.setBounds(30, 40, 80, 30);
        jtf1 = new JTextField();
        jtf1.setBounds(110, 40, 260, 30);
        pane.add(jlabel);
        pane.add(jtf1);
  • 4、窗口加控件
        jb1.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
            }
        });
  • 5、实例化对象

  • 6、保存并运行

3、完整代码

       以下是一个小案例,可以仿照这个案例改写。
       主要关注的点:
              1、如何制作出来这个窗体?
              2、如何获取用户输入的内容?
       只有拿到了用户输入的值,才可以进一步操作。


/**
 * @author zyz
 * @version 1.0
 * @data 2023/7/16 15:06
 * @Description: 使用java制作一个窗体,用来收集用户输入的内容
 */

public class Form extends JFrame {
    JLabel jlabel;
    JTextField jtf1;
    JButton jb1, jb2;
    JPanel pane;

    private String PackageConfig = "";
    private String MainKey = "";

    public String getMainKey() {
        return MainKey;
    }

    public void setMainKey(String mainKey) {
        MainKey = mainKey;
    }

    public String getPackageConfig() {
        return this.PackageConfig;
    }

    public void setPackageConfig(String packageConfig) {
        this.PackageConfig = packageConfig;
    }

    /**
     * 构造函数
     *
     * @param title
     */
    public Form(String title) {
        super(title);
        this.getContentPane().setLayout(null);
        this.setBounds(500, 500, 460, 460);
        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        pane = new JPanel();
        pane.setBounds(10, 10, 400, 300);
        pane.setLayout(null);
        jlabel = new JLabel("设备主秘匙:");
        jlabel.setBounds(30, 40, 80, 30);
        jtf1 = new JTextField();
        jtf1.setBounds(110, 40, 260, 30);
        pane.add(jlabel);
        pane.add(jtf1);


        jb1 = new JButton("保存");
        jb1.setBounds(130, 100, 70, 30);
        pane.add(jb1);

        jb2 = new JButton("取消");
        jb2.setBounds(220, 100, 70, 30);
        pane.add(jb2);
        this.add(pane);


        /**
         * 处理文本内容
         * true 包含中文字符  false 不包含中文字符
         */
        jb1.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                //正则表达式
                Pattern p = Pattern.compile("[\u4E00-\u9FA5|\\!|\\,|\\。|\\(|\\)|\\《|\\》|\\“|\\”|\\?|\\:|\\;|\\【|\\】]");
                String inputMainKey = jtf1.getText().trim();

                if (jtf1.getText().trim().length() == 0) {
                    JOptionPane.showMessageDialog(null, "输入内容不能为空!!!");
                } else {
                    Matcher m = p.matcher(inputMainKey);
                    if (m.find()) {
                        JOptionPane.showMessageDialog(null, "输入内容不合法,应该为数字+英文组合!!!");
                    } else {
                        JOptionPane.showMessageDialog(null, "修改成功!!!");
                    }
                }
            }

        });

        this.setVisible(true);
    }


    public static void main(String[] args) {
        Form c = new Form("修改主秘匙的值");
    }
}

4、实现效果

       页面可能比较丑,但是能用。页面布局可以根据自己需求设计。

在这里插入图片描述

对输入的内容校验,

在这里插入图片描述

5、后语

       我要做成的是,要将用户输入的数据经过加密处理后保存到本地的xml文件,同时需要根据不同的系统,修改不同路径下的文件。我还需要将这个编写的java工具,打包成jar包。做成用户可以直接点击运行出来。同时还需要考虑,加入用户系统未安装jdk或者jre,还要考虑这个问题,还好公司项目,已经包含了jdk。我只需要编写一个bat脚本,将j路径指向项目中jdk的路径就可以。

       提示:如果项目中使用到了自己引入的第三方jar包,一定要确保引入的jar包打入最终的项目jar包中【可以使用IDEA自带的打包工具,也可以使用maven进行打包】。否则在运行jar包的时候会报类找不到的问题。

具体打包参考这篇博客:Maven使用IDEA自带工具打包,同时将lib下的jar包打入,双击jar包可直接运行

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

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

相关文章

rv1126交叉编译

目录 一、解压sdk二、交叉编译出动态库sqlite3交叉编译opencv交叉编译一、解压sdk tar xzvf rv1126_rv1109_linux_sdk_v1.8.0_PureVersion.tar.gz 查看交叉编译工具链 pwd查看绝对路径/home

正斜杠“/” 和反斜杠 “\” 傻傻分不清?

Note, on your keyboard, the location of two different punctuation marks—/, or forward slash, and \, or backward slash (also known as backslash). As you read from left to right, the forward slash falls forward while the backslash falls backward; 引用自 《…

js逆向思路-区分各个瑞数版本vmp/3/4/5/6代

目录 一、如何区分是最新瑞数vmp反爬二、3/4/5/6代/vmp版本的瑞数网站特征举例三、瑞数反爬的解决思路四、推荐相关瑞数文章五、一些心得一、如何区分是最新瑞数vmp反爬 前言:本篇文章不会介绍详细的解决反爬的算法扣代码过程,只是一些经验闲谈,文章的末尾有相关的好的质量的…

油猴脚本-Bilibili剧场模式仿Youtube

对比某个不存在的视频网站(YouTube),以及B站的播放模式,普通模式以及网页全屏之间都有一个“中间档”,油管的叫 剧场模式,B站的叫 宽屏模式。 剧场模式 宽屏模式 相比之下,还是更喜欢油管的剧…

10.带你入门matlab频率表、盒图(matlab程序)

1.简述 相关概念介绍 以信号为例,信号在时域下的图形可以显示信号如何随着时间变化,而信号在频域下的图形(一般称为频谱)可以显示信号分布在哪些频率及其比例。频域的表示法除了有各个频率下的大小外,也会有各个频率的…

《遗留系统现代化》读书笔记(基础篇)

你现在所写的每一行代码,都是未来的遗留系统 为什么要对遗留系统进行现代化? 什么是遗留系统? 判断遗留系统的几个维度:代码、架构、测试、DevOps 以及技术和工具。时间长短并不是衡量遗留系统的标准。代码质量差、架构混乱、没…

【C++】多线程编程系列总纲

本系列文章主要介绍C11并发编程,主要包括如下篇目: 1、多线程编程一(初识并发和多线程) https://blog.csdn.net/Jacky_Feng/article/details/131751373?csdn_share_tail{"type"%3A"blog"%2C"rType&qu…

idea快捷方式,(主要是自己用的,持续收集)

编辑器 代码光标扩大选中 快捷键名字 使用方式 此时光标在这这里,按一下发现选中面积扩大, 如果再按快捷键,选中面积还扩大

带你【玩转Linux命令】➾ find cut 每天2个day06

带你【玩转Linux命令】➾ find & cut 每天2个day06 🔻 一、文件管理命令1.1 find-查找文件或目录1.2 cut-指定欲显示的文件内容,输出到标准输出设备 🔻 总结—温故知新 🔻 一、文件管理命令 1.1 find-查找文件或目录 &#x…

【Nacos】基于k8s容器化部署Nacos集群

近期,在机器上部署了三个节点的nacos集群服务用于几个小型微服务的注册配置中心,并使用了Nginx简单代理了一下,随即简单研究了下集群部署分布式部署稍微提高可用性。部署完后能够正常使用,但是发现一个问题,刷新Nacos集…

制作文件间链接

制作文件间链接 管理文件间链接 硬/软链接 创建指向同一个文件的多个名称。 创建硬链接 从初始名称到文件系统的数据,每个文件都以一个硬链接开始。当创建指向文件的新硬链接时,也会创建另一个指向同一数据的名称。新硬链接与原始文件名作用相同。一经创建&…

Maya适合哪个工作站?

Autodesk Maya 提供多种功能,可以适应电影、游戏和建筑等不同行业的需求。定制的 Autodesk Maya 工作站可以帮助您提高行业领先的 3D 计算机动画、建模、模拟和渲染软件的工作效率和用户体验。 根据您的特定需求定制的快速、强大的工作站可以帮助您充分利用 Maya 工…

高薪Offer收割机之Redis分布式锁

锁在应用开发中使用非常广泛,哪些场景需要使用锁呢? 我们先来看抢购优惠卷的场景,代码如下: public void rushToPurchase() throws InterruptedException {//获取优惠券数量Integer num = (Integer) redisTemplate.opsForValue().get(“num”);//判断是否抢完if (null == n…

[Ipsc2009]Let there be rainbows!

Description HY Star是一个处处充满和谐,人民安居乐业的星球,但是HY Star却没有被评上宇宙文明星球,很大程度上是因为 星球的形象问题。HY Star由N个国家组成,并且在一些国家之间修建了道路以方便交流。由于HY Star是一个和谐的 星球&#x…

【运维】第04课:入口网关服务注册发现-Openrety 动态 uptream

本课时,我将带你一起了解入口网关服务的注册发现,并使用 OpenResty 实现一套动态 Upstream。 课前学习提示 基于本课时我们将要学习的内容,我建议你课前先了解一下 Nginx 的基础,同时熟悉基础的 Lua 语言语法,另外再回顾一下 HTTP 的请求过程,对于 Nginx 的负载均衡基本…

按键控制流水灯方向——FPGA

文章目录 前言一、按键二、系统设计1、模块框图2、RTL视图 三、源码四、效果五、总结六、参考资料 前言 环境: 1、Quartus18.0 2、vscode 3、板子型号:EP4CE6F17C8 要求: 按键1按下,流水灯从右开始向左开始流动,按键2按…

习题-Java网络编程

目录 1.TCP-对象 2.UDP​​​​​​​​​​​​​​ 1.TCP-对象 利用TCP传输对象信息,需要对对象进行实例化 User类: package dh09.demo02;import java.io.Serializable;public class User implements Serializable {private String name;private St…

高并发的哲学原理(九)-- 细数四代分布式数据库并拆解

高并发的哲学原理(九)-- 细数四代分布式数据库并拆解 TiDB 和 OceanBase(主从、中间件、KV、计算与存储分离、列存储、CAP定理) 本文大约 15000 字,阅读需要 50 分钟。 上一篇文章啃硬骨头差点把我牙给崩了&#xff0c…

提升C++操作Json的开发效率

一、背景 在C项目开发中,不同的服务之间会定义通讯接口,接口格式定义中的通讯数据往往是json格式的。为了快速开发,我的需求如下: 1.定义好通讯接口后,就定义好了交互的json内容格式。我希望有工具可以一键将json内容…

x86架构ubuntu18下运行PS模拟器ePSXe

0. 环境 i7 虚拟机ubuntu18(ubuntu22不行,会提示CURL_OPENSSL_3 not found) 1. 安装依赖 sudo apt-get install libsdl-ttf2.0-0 sudo apt-get install libcurl3 2. 获取可执行文件 mkdir ePSXe cd ePSXe wget http://www.epsxe.com/files/…