java实验五正式报告

实验五 图形化应用程序开发(实验报告)

姓名: XXX          班级: XXX          学号: XXX

一、实验目的

  1.通过图形化界面设计相关类、接口等,实现用户图形化应用程序的开发
  2.进一步巩固JDBC连接数据库以及文件读写操作

二、实验目标

  1.能够掌握常用GUI控制组件的使用方法,通过java.awt包以及Javax.swing包中的类和接口实现用户图形界面的开发;
  2.能够运用Java的事件处理机制,通过JDBC操作数据库,实现用户登录功能;
  3.能够掌握利用I/O流对文件进行操作。

三、实验内容

3.1 实验环境

IntelliJ IDEA Ultimate Edition 2021.3 x64. + openjdk-17.0.1.

3.2 具体实验内容
问题一
  • 利用GUI模拟用户登录,界面设计下图:
    ① 所有的用户名密码存储在数据库中;
    ② 定义一个类使用JDBC连接数据库,读取用户名密码数据进行匹配以实现用户登录,若登录成功,提示用户登录成功,否则,提示用户登录失败;
    在这里插入图片描述

问题分析:GUI设计需要使用JFrame类创建窗体,按钮需要JButton类,文本域需要JTextField类,其他控件都有对应的类,数据库操作需要对应的JAR包,本实验我使用的是Spring Data操控数据库

项目结构
在这里插入图片描述

package com.example.interaction8001.Controller;

import com.example.interaction8001.Data.ExperimentUser;
import com.example.interaction8001.Data.ExperimentUserService;
import com.example.interaction8001.HttpOperation.HttpOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

@org.springframework.stereotype.Controller
@ResponseBody
public class Controller {

    @Autowired
    private ExperimentUserService service;

    //用于接收按钮的请求
    @RequestMapping(value = "/button/findByUserName/{username}", method = RequestMethod.GET)
    Object findByUserName (@PathVariable String username) {
        ExperimentUser user = service.findExperimentUserByUserName(username);
        if (user == null)
            return "null";
        else
            return service.findExperimentUserByUserName(username).getPassword();
    }

    public static void main(String[] args) {
        JFrame frame = new MyFrame("数据库操控");
    }

}

class MyFrame extends JFrame {

    private final JFrame thisFrame = this;
    private final JPanel rootPanel = new JPanel();
    private final JLabel titleLabel = new JLabel("数 据 库 操 控");
    private final JLabel urlLabel = new JLabel("账户");
    private final JLabel passwordLabel = new JLabel("密码");
    private final JTextField urlTextField = new JTextField();
    private final JPasswordField passwordPasswordField = new JPasswordField();
    private final JCheckBox rememberPasswordCheckBox = new JCheckBox("记住账号密码");
    private final JButton loginButton = new JButton("登录");

    MyFrame(String name) {
        super(name);
        this.setBounds(new Rectangle(600, 300, 400,300));
        this.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
        this.setVisible(true);
        this.dataInitialize();
        this.componentInitial();
        this.setParameter();
        this.dealLogic();
    }

    private void dataInitialize() {

    }

    private void componentInitial() {
        this.setComponent();
        this.setComponentsLayout();
        this.setComponentsPreferredSize();
        this.setComponentsHorizontalAlignment();
    }

    private void setComponent() {
        rootPanel.add(titleLabel);
        rootPanel.add(urlLabel);
        rootPanel.add(passwordLabel);
        rootPanel.add(urlTextField);
        rootPanel.add(passwordPasswordField);
        rootPanel.add(rememberPasswordCheckBox);
        rootPanel.add(loginButton);
    }

    private void setComponentsLayout() {
        this.setContentPane(rootPanel);
        rootPanel.setLayout(null);
        titleLabel.setBounds(new Rectangle(0,0,400,120));
        urlLabel.setBounds(new Rectangle(0,140,100,25));
        passwordLabel.setBounds(new Rectangle(0,200,100,25));
        urlTextField.setBounds(new Rectangle(100,140,250,25));
        passwordPasswordField.setBounds(new Rectangle(100,200,250,25));
        rememberPasswordCheckBox.setBounds(new Rectangle(0,230,100,25));
        loginButton.setBounds(new Rectangle(300,230,70,25));
    }

    private void setComponentsPreferredSize() {
        titleLabel.setPreferredSize(new Dimension(100, 100));
        urlLabel.setPreferredSize(new Dimension(80, 50));
        passwordLabel.setPreferredSize(new Dimension(80, 50));
        urlTextField.setPreferredSize(new Dimension(200,40));
        passwordPasswordField.setPreferredSize(new Dimension(200,40));
        rememberPasswordCheckBox.setPreferredSize(new Dimension(80,25));
        loginButton.setPreferredSize(new Dimension(60,25));
    }

    private void setComponentsHorizontalAlignment () {
        titleLabel.setHorizontalAlignment(SwingConstants.CENTER);
        urlLabel.setHorizontalAlignment(SwingConstants.CENTER);
        passwordLabel.setHorizontalAlignment(SwingConstants.CENTER);
        urlTextField.setHorizontalAlignment(SwingConstants.LEFT);
        passwordPasswordField.setHorizontalAlignment(SwingConstants.LEFT);
        rememberPasswordCheckBox.setHorizontalAlignment(SwingConstants.CENTER);
        loginButton.setHorizontalAlignment(SwingConstants.CENTER);
    }

    private void setParameter() {
        titleLabel.setFont(new Font("华文彩云", Font.BOLD, 40));
        urlLabel.setFont(new Font("华文彩云", Font.BOLD, 20));
        passwordLabel.setFont(new Font("华文彩云", Font.BOLD, 20));
    }

    private void dealLogic() {
        rememberPasswordCheckBox.setSelected(false);
        loginButton.addActionListener(new LoginButtonActionListener());
    }

    class LoginButtonActionListener implements ActionListener {

        @Override
        public void actionPerformed(ActionEvent e) {
            String url = urlTextField.getText();
            String password = passwordPasswordField.getText();
            JDialog jDialog = new JDialog(thisFrame, "登录信息");
            jDialog.setBounds(new Rectangle(650, 350, 150,100));
            jDialog.setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
            jDialog.setModal(true);
            JLabel message = new JLabel();
            message.setFont(new Font("微软雅黑", Font.BOLD, 20));
            message.setForeground(Color.red);
            jDialog.getContentPane().add(message);
            String passWord = HttpOperation.sendGet("http://localhost:8001/button/findByUserName/" + url, "");
            if (passWord != null ) {
                if (password.equals(passWord))
                    message.setText("登陆成功");
                else
                    message.setText("账号错误");
            }
            else {
                message.setText("账号错误");
            }
            jDialog.setVisible(true);
        }
    }
}
  • 实验结果

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

问题二
  • 设计一个关于文件操作的图形化应用程序,至少实现以下功能:
    ① 包含一个文本框以及添加按钮,在文本框中输入文字后,点击添加按钮可以在文件中写入文本框中的文字;
    ② 包含一个读取按钮,点击该按钮后,可以读取文件内容,并显示到文本框中。

问题分析:GUI设计需要使用JFrame类创建窗体,按钮需要JButton类,文本域需要JTextField类,其他控件都有对应的类,文件操作类使用InputStream类和OutputStream类

class MyFrame extends JFrame {

    private final JFrame thisFrame = this;
    private final JPanel rootPanel = new JPanel();
    private final JLabel titleLabel = new JLabel("文 本");
    private final JButton saveButton = new JButton("保存");
    private final JButton openButton = new JButton("打开");
    private final JTextArea inputTextArea = new JTextArea();

    public static void main(String[] args) throws InterruptedException {

        Thread thread = new Thread(new Runnable() {
            @Override
            public void run() {
                JFrame frame = new MyFrame("");
            }
        });
        thread.start();
        thread.join();
    }

    MyFrame(String name) {
        super(name);
        this.setBounds(new Rectangle(600, 300, 400,300));
        this.setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
        this.setVisible(true);
        this.dataInitialize();
        this.componentInitial();
        this.setParameter();
        this.dealLogic();
    }

    private void dataInitialize() {

    }

    private void componentInitial() {
        this.setComponent();
        this.setComponentsLayout();
        this.setComponentsPreferredSize();
        this.setComponentsHorizontalAlignment();
    }

    private void setComponent() {
        rootPanel.add(titleLabel);
        rootPanel.add(saveButton);
        rootPanel.add(openButton);
        rootPanel.add(inputTextArea);
    }

    private void setComponentsLayout() {
        this.setContentPane(rootPanel);
        rootPanel.setLayout(null);
        titleLabel.setBounds(new Rectangle(30,0,30,30));
        saveButton.setBounds(new Rectangle(240,0,60,30));
        openButton.setBounds(new Rectangle(320,0,60,30));
        inputTextArea.setBounds(new Rectangle(5,40,375,200));
    }

    private void setComponentsPreferredSize() {
        titleLabel.setPreferredSize(new Dimension(100, 100));

    }

    private void setComponentsHorizontalAlignment () {
        titleLabel.setHorizontalAlignment(SwingConstants.CENTER);
        saveButton.setHorizontalAlignment(SwingConstants.CENTER);
        openButton.setHorizontalAlignment(SwingConstants.CENTER);
    }

    private void setParameter() {
    }

    private void dealLogic() {
        saveButton.addActionListener(new saveButtonActionListener());
        openButton.addActionListener(new openButtonActionListener());
    }

    class saveButtonActionListener implements ActionListener {

        @Override
        public void actionPerformed(ActionEvent e) {
            String contents = inputTextArea.getText();
            File file = new File("../data.txt");
            JDialog dialog = new JDialog(thisFrame);
            dialog.setBounds(new Rectangle(650, 350, 200,10));
            if(!file.exists()){
                try {
                    if (!file.createNewFile()) {
                        dialog.setModal(true);
                        dialog.setTitle("文件创建失败");
                        dialog.setVisible(true);
                        return;
                    }
                } catch (IOException ex) {
                    ex.printStackTrace();
                }
            }
            FileOutputStream fileOutputStream = null;
            try {
                fileOutputStream = new FileOutputStream(file);
                fileOutputStream.write(contents.getBytes(StandardCharsets.UTF_8));
                fileOutputStream.flush();
                fileOutputStream.close();
                dialog.setModal(true);
                dialog.setTitle("文件写入成功");
                dialog.setVisible(true);
            } catch (IOException ex) {
                ex.printStackTrace();
                dialog.setModal(true);
                dialog.setTitle("文件写入出现问题");
                dialog.setVisible(true);
            }

        }
    }

    class openButtonActionListener implements ActionListener {

        @SneakyThrows
        @Override
        public void actionPerformed(ActionEvent e) {
            int length = 10000000;
            byte[] buffer = new byte[length];
            File file = new File("../data.txt");
            InputStream inputStream = new FileInputStream(file);
            int n = inputStream.read(buffer,0, length);
            inputStream.close();
            String str = new String(buffer,0,n,StandardCharsets.UTF_8);
            inputTextArea.setText(str);
        }
    }
}
  • 实验结果
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

四、实验总结

  学习使用了Java GUI 、JDBC 和 文件操作, 感觉收获很大, 可以自己写一个简单的窗口小项目, 实现一些功能, 很不错, 在写代码的同时, 也锻炼了自己的业务分析能力, 通过对代码的编写, 熟悉Java语法, 加油。

  • 2
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值