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

前言

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

  • 8
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
以下是一个简单的Java资产管理系统窗体实现: ```java import javax.swing.*; import java.awt.*; import java.awt.event.*; public class AssetManagementSystem extends JFrame implements ActionListener { private JLabel titleLabel; private JLabel nameLabel; private JTextField nameTextField; private JLabel typeLabel; private JComboBox<String> typeComboBox; private JLabel valueLabel; private JTextField valueTextField; private JButton addButton; private JButton clearButton; private JTextArea assetListTextArea; public AssetManagementSystem() { super("资产管理系统"); // 设置窗口大小和位置 setSize(500, 500); setLocationRelativeTo(null); // 设置窗口关闭操作 setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); // 创建标题标签 titleLabel = new JLabel("资产管理系统"); titleLabel.setFont(new Font("宋体", Font.BOLD, 24)); titleLabel.setHorizontalAlignment(JLabel.CENTER); // 创建资产名称标签和文本框 nameLabel = new JLabel("资产名称:"); nameTextField = new JTextField(20); // 创建资产类型标签和下拉框 typeLabel = new JLabel("资产类型:"); typeComboBox = new JComboBox<String>(new String[]{"固定资产", "流动资产"}); // 创建资产价值标签和文本框 valueLabel = new JLabel("资产价值:"); valueTextField = new JTextField(20); // 创建添加和清空按钮 addButton = new JButton("添加"); clearButton = new JButton("清空"); // 注册按钮事件监听器 addButton.addActionListener(this); clearButton.addActionListener(this); // 创建资产列表文本区域 assetListTextArea = new JTextArea(); // 创建面板并添加组件 JPanel panel = new JPanel(new GridLayout(6, 2)); panel.add(titleLabel); panel.add(new JLabel()); panel.add(nameLabel); panel.add(nameTextField); panel.add(typeLabel); panel.add(typeComboBox); panel.add(valueLabel); panel.add(valueTextField); panel.add(addButton); panel.add(clearButton); panel.add(new JLabel("资产列表:")); panel.add(assetListTextArea); // 将面板添加到窗口 add(panel); // 显示窗口 setVisible(true); } @Override public void actionPerformed(ActionEvent e) { if (e.getSource() == addButton) { // 获取资产信息 String name = nameTextField.getText(); String type = (String) typeComboBox.getSelectedItem(); String value = valueTextField.getText(); // 添加资产到列表 assetListTextArea.append(name + "," + type + "," + value + "\n"); // 清空输入框 nameTextField.setText(""); valueTextField.setText(""); } else if (e.getSource() == clearButton) { // 清空输入框和资产列表 nameTextField.setText(""); valueTextField.setText(""); assetListTextArea.setText(""); } } public static void main(String[] args) { new AssetManagementSystem(); } } ``` 代码中创建了一个继承自JFrame的资产管理系统窗体类,并实现了ActionListener接口来处理按钮事件。窗体包含了资产名称、资产类型、资产价值等组件,还有一个资产列表文本区域。当用户点击添加按钮时,程序会将输入的资产信息添加到资产列表中,并清空输入框;当用户点击清空按钮时,程序会清空输入框和资产列表。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Mr.Aholic

整理不易、多谢支持

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值