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

简介: 该博客文章介绍了如何使用Java Swing中的JFrame创建一个窗体来收集用户输入的内容,并提供了详细的实现步骤和完整代码示例。

前言

   最近做的一个需求,有个逻辑环节是:需要从本地保存的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包可直接运行

相关文章
|
5月前
|
Java 虚拟化 容器
(Java)Java里JFrame窗体的基本操作(容器布局篇-1)
容器 容器,我的理解是可以包容其他东西的玩意。它可以是一个盒子,可以是一个虚拟化的物品,可只要能包裹住其他存在质体的东西,那么都可以称作是容器。例如:JPanel组件和JScollPane组件两者都是容器也是组件。 既然有容器,那么容器中的布局就必不可少了。不然不规矩的摆放物品,人类看不习惯,我也看不习惯 ???? 本篇内容,将说明java JFrame窗体里容器中几类布局。 说明:所有在JFrame窗体里的容器布局都会使用setLayout()方法,采用的布局参数都将放进这个方法里 绝对布局 调用窗体容器
163 1
|
5月前
|
Java 数据安全/隐私保护 索引
(Java)Java里JFrame窗体的基本操作(组件篇-3)
回顾 说过了下拉框和下拉列表,本篇内容将了解滚动面板和各类输入框 什么是组件? 如果不熟悉组件,可以将组件看作是某个Form表单中的表单元素,组件可以完善JFrame窗口的布局,以及一些功能; 本篇内容中所有的组件所用到的类全都来自于javax.swing这个包中,记得引入; 另:在使用组件前,请先将窗体中的内容类给实例化出来进行操作,代码如下: Container c = getContentPane(); JScollPane JScollPane类,说的就是滚动面板。它不同于其他组件,它是一个容器,
122 1
|
5月前
|
Java 索引 容器
(Java)Java里JFrame窗体的基本操作(组件篇-2)
回顾 这算是JFrame窗体基本操作的组件第二篇了,上一篇说过了单选框,复选框,按钮。 在这一篇中,我会说明下拉框和列表框 什么是组件? 自行百度:java中JFrame窗体里的组件是什么? 名字都给你想好了 ( :I ) JComBox下拉框 JComBox类,就是下拉框,实例化出来后,要填写泛型<>,添加是什么数据类型的内容,泛型中就写上该数据类型; JComboBox<?> combox = new JComboBox<>(); 以下实例化下拉框的时候我泛型写的全
122 1
|
5月前
|
Java 容器
(Java)Java里JFrame窗体的基础操作(组件-1)
如果不熟悉组件,可以将组件看作是某个Form表单中的表单元素,当然这只是在不熟悉组件的前提下。如果深入了解了组件,那么它有着非常多的组件,这些组件可以完善JFrame窗口的布局,以及一些功能; 本篇内容中所有的组件所用到的类全都来自于javax.swing这个包中,记得引入
105 0
|
7月前
|
JSON Java API
【干货满满】分享京东API接口到手价,用Java语言实现
本示例使用 Java 调用京东开放平台商品价格及优惠信息 API,通过商品详情和促销接口获取到手价(含优惠券、满减等),包含签名生成、HTTP 请求及响应解析逻辑,适用于比价工具、电商系统集成等场景。
|
5月前
|
Java
Java语言实现字母大小写转换的方法
Java提供了多种灵活的方法来处理字符串中的字母大小写转换。根据具体需求,可以选择适合的方法来实现。在大多数情况下,使用 String类或 Character类的方法已经足够。但是,在需要更复杂的逻辑或处理非常规字符集时,可以通过字符流或手动遍历字符串来实现更精细的控制。
379 18
|
5月前
|
存储 Java 索引
用Java语言实现一个自定义的ArrayList类
自定义MyArrayList类模拟Java ArrayList核心功能,支持泛型、动态扩容(1.5倍)、增删改查及越界检查,底层用Object数组实现,适合学习动态数组原理。
210 4
|
11月前
|
人工智能 安全 Java
智慧工地源码,Java语言开发,微服务架构,支持分布式和集群部署,多端覆盖
智慧工地是“互联网+建筑工地”的创新模式,基于物联网、移动互联网、BIM、大数据、人工智能等技术,实现对施工现场人员、设备、材料、安全等环节的智能化管理。其解决方案涵盖数据大屏、移动APP和PC管理端,采用高性能Java微服务架构,支持分布式与集群部署,结合Redis、消息队列等技术确保系统稳定高效。通过大数据驱动决策、物联网实时监测预警及AI智能视频监控,消除数据孤岛,提升项目可控性与安全性。智慧工地提供专家级远程管理服务,助力施工质量和安全管理升级,同时依托可扩展平台、多端应用和丰富设备接口,满足多样化需求,推动建筑行业数字化转型。
375 5
|
6月前
|
存储 Java Apache
Java语言操作INI配置文件策略
以上步骤展示了基本策略,在实际项目中可能需要根据具体需求进行调整优化。例如,在多线程环境中操作同一份配置时需要考虑线程安全问题;大型项目可能还需考虑性能问题等等。
269 15
|
5月前
|
Java 调度 容器
(Java)JFrame窗体的基本操作(1-窗体的创建)
什么是窗体? 窗体,是某个程序,在电脑中,手机中的窗口化程序。它在非固定状态下,可以自由的变换大小。同时,窗体,也是容器,窗体这个容器可以在内部处理很多的小组件。 窗体的具体例子:例如,所有的浏览器,浏览器中网页里打开的提示框,电脑的QQ,手机上的小窗模式,都是窗体; 在本篇内容中,我们会使用JFrame和JDialog两个类,在实现java中的窗体; 在JAVA中如何创建窗体? 在java中,我们需要引入javax.swing包下的JFrame类或者JDialog类,这样才能使用两个窗体;但是,一些窗
284 0