首页 > 编程语言 >Java/JavaSwing/课程设计及答辩

Java/JavaSwing/课程设计及答辩

时间:2024-06-23 21:32:00浏览次数:28  
标签:课程设计 Java grade text CAT add new hobby JavaSwing

是不是要课程设计了?是不是还没做完,还处在不会答辩和不懂原理的时期?救星来了!

注意,JavaSwing已经是过时的东西,无需过多研究,仅用于课程设计,希望大家都能顺利通过!


一、总体逻辑:

       1.创建窗口对象

        2.设置窗口样式

        3.创建GUI组件对象

        4.设置GUI组件样式

        5.绑定监听

        6.添加到界面中

二、解释:

        1.首先,我就猜到了某些人不懂什么叫GUI,这里解释一下,GUI,Graphical User Interface,图形用户界面,就是不单单是命令行,而是实实在在的图形界面。

        2.创建窗口对象:有两种方式,可以看看你的课程设计代码究竟是哪一种:

                第一种就是继承了JFrame。因为JFrame是JavaSwing的顶层容器,用于创建和管理容器,继承它就相当于继承了它的所有属性和方法,即成为其子类,所以会展示出来一个窗口

                第二种就是直接new JFrame,就是直接创建了一个JFrame的对象,展示出一个JFrame窗口

        3.设置窗口样式,这里就涉及很多方法,比如:

this.setTitle("这是窗口的标题");//设置标题
this.setSize(800, 600);//设置窗体大小
this.setAlwaysOnTop(true);//设置界面置顶
this.setLocationRelativeTo(null);//设置窗体居中
this.setLayout(null);//取消默认的居中放置
this.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);//设置关闭窗体的时候,退出程序this.setVisible(true);//设置窗体可见

见名知意,没什么好说的,都是驼峰命名,哪个方法不懂直接查单词意思就行

        4.创建组件对象:

                比如可能用到的:

                                按钮JButton

                                输入框JTextField

                                选择框JRadioButton

                                下拉框JComboBox

                                文本框JTextArea

                要用什么就new什么即可

        5.补充一下如何使用选择框来设置是多选还是只能单选:创建出选择框JRadioButton默认就是能多选,想变成单选只需创建一个按钮组ButtonGroup,并把单选中的选项使用add方法添加进去即可

        6.设置组件样式:这个就比较多了,说几个常用的对应组件的对象的成员方法:

                        setBounds()设置组件位置,注意是以左上角为原点

                        setText()设置显示的文本

                        setFont()设置字体

                        setBackground()设置背景

        7.绑定监听:这里简单的直接使用组件对象中的addActionListener()方法即可,方法中使用Lambda表达式(箭头)或者匿名内部类进行设置。说白了就是在addActionListener()方法中创建了一个监听器对象罢了,即:

xxx.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                System.out.println("执行xxx操作");
            }
        });

 xxx.addActionListener(e -> {
    System.out.println("执行xxx操作");
});

三、代码附上:注意:本代码中还含有向数据库发送POST请求的扩展,所以不要照抄!仅供参考

package ui;

import util.RequestTool;

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

public class MainJFrame extends JFrame {
    //输入框
    JTextField textField_name = new JTextField();
    //单选框
    JRadioButton CAT = new JRadioButton();
    JRadioButton CAT_enterprise = new JRadioButton();
    //下拉框
    JComboBox<String> grade = new JComboBox<>();
    //单选框
    JRadioButton hobby_zh = new JRadioButton();
    JRadioButton hobby_en = new JRadioButton();
    //文本显示框
    JTextArea textArea_introduction = new JTextArea();
    //按钮
    JButton inZH = new JButton("中文");
    JButton inEN = new JButton("英文");

    public MainJFrame() {
        //初始化界面
        initJFrame();

        //初始化界面元素
        initView();

        //添加事件监听
        addListener();
    }

    private void addListener() {
        //事件监听
        //若姓名未填写,或专业无选择,或爱好无选择,则在文本显示框中显示提示信息
        //爱好可以多选,但专业只能选一个
        inZH.addActionListener(e -> {
            System.out.println("按下按钮“中文”");

            String nameStr = textField_name.getText();
            String majorStr = "";
            if (CAT.isSelected()) {
                majorStr = CAT.getText();
            } else if (CAT_enterprise.isSelected()) {
                majorStr = CAT_enterprise.getText();
            }
            String gradeStr = (String) grade.getSelectedItem();
            String hobbyStr = "";
            if (hobby_zh.isSelected()) {
                hobbyStr += hobby_zh.getText();
            }
            if (hobby_en.isSelected()) {
                if (hobbyStr.isEmpty()) {
                    hobbyStr += hobby_en.getText();
                } else {
                    hobbyStr += "和" + hobby_en.getText();
                }
            }
            if (nameStr.isEmpty() || majorStr.isEmpty() || hobbyStr.isEmpty()) {
                textArea_introduction.setText("请填写完整信息");
            } else {
                textArea_introduction.setText("我叫" + nameStr + ",是" + gradeStr + majorStr + "专业的学生,爱好是" + hobbyStr + "。");
                //发送请求
                System.out.println("发送请求");
                sendRequest(nameStr, majorStr, gradeStr, hobbyStr);

            }
        });

        inEN.addActionListener(e -> {
            System.out.println("按下按钮“英文”");

            String nameStr = textField_name.getText();
            String majorStr = "";
            if (CAT.isSelected()) {
                majorStr = "Computer Application Technology";
            } else if (CAT_enterprise.isSelected()) {
                majorStr = "Computer Application Technology and Enterprise";
            }
            String gradeStr = (String) grade.getSelectedItem();
            String hobbyStr = "";
            if (hobby_zh.isSelected()) {
                hobbyStr += "Chinese";
            }
            if (hobby_en.isSelected()) {
                if (hobbyStr.isEmpty()) {
                    hobbyStr += "English";
                } else
                    hobbyStr += "and English";
            }
            if (nameStr.isEmpty() || majorStr.isEmpty() || hobbyStr.isEmpty()) {
                textArea_introduction.setText("Please fill in the complete information");
            } else {
                textArea_introduction.setText("My name is " + nameStr + ", a student majoring in " + majorStr + " of " + gradeStr + ", and my hobby is " + hobbyStr + ".");
                //发送请求
                sendRequest(nameStr, majorStr, gradeStr, hobbyStr);
            }
        });
        xxx.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                System.out.println("执行xxx操作");
            }
        });
    }

    private void sendRequest(String name, String major, String grade, String hobby) {
        //将表单数据封装到map集合中
        HashMap<String, Object> map = new HashMap<>();
        map.put("name", name);
        map.put("major", major);
        map.put("grade", grade);
        map.put("hobby", hobby);
        RequestTool.sendRequest("http://localhost:8080/studentInfo", "POST", map);
    }

    private void initView() {

        //添加姓名输入框
        JLabel text_nameLabel = new JLabel("姓名:");

        //添加单选框
        JLabel text_major = new JLabel("专业:");
        CAT.setText("计应");
        CAT_enterprise.setText("计应企");
        ButtonGroup group_hobby = new ButtonGroup();
        group_hobby.add(CAT);
        group_hobby.add(CAT_enterprise);

        //添加下拉框
        JLabel text_grade = new JLabel("年级:");
        grade.addItem("2021");
        grade.addItem("2022");
        grade.addItem("2023");
        grade.addItem("2024");

        //添加多选框
        JLabel text_hobby = new JLabel("爱好:");
        hobby_zh.setText("中文");
        hobby_en.setText("英文");

        //添加文本显示框
        JLabel text_introduction = new JLabel("请选择中文或英文自我介绍:");
        textArea_introduction.setFont(new java.awt.Font("Dialog", Font.PLAIN, 16));
        textArea_introduction.setEditable(false);
        textArea_introduction.setLineWrap(true);
        textArea_introduction.setWrapStyleWord(true);

        //设置位置
        text_nameLabel.setBounds(100, 100, 50, 20);
        textField_name.setBounds(145, 94, 200, 30);
        text_major.setBounds(400, 100, 50, 20);
        CAT.setBounds(450, 100, 60, 20);
        CAT_enterprise.setBounds(510, 100, 100, 20);
        text_grade.setBounds(100, 150, 50, 20);
        grade.setBounds(155, 144, 100, 30);
        text_hobby.setBounds(400, 150, 50, 20);
        hobby_zh.setBounds(450, 150, 60, 20);
        hobby_en.setBounds(510, 150, 60, 20);
        text_introduction.setBounds(100, 250, 400, 20);
        textArea_introduction.setBounds(350, 200, 300, 200);
        inZH.setBounds(250, 450, 100, 30);
        inEN.setBounds(400, 450, 100, 30);

        //设置字体
        Font font = new Font("Dialog", Font.BOLD, 16);
        text_nameLabel.setFont(font);
        text_major.setFont(font);
        text_grade.setFont(font);
        text_hobby.setFont(font);
        text_introduction.setFont(font);
        textField_name.setFont(font);
        CAT.setFont(font);
        CAT_enterprise.setFont(font);
        grade.setFont(font);
        hobby_zh.setFont(font);
        hobby_en.setFont(font);

        //添加到界面中
        this.getContentPane().add(text_nameLabel);
        this.getContentPane().add(textField_name);
        this.getContentPane().add(text_major);
        this.getContentPane().add(CAT);
        this.getContentPane().add(CAT_enterprise);
        this.getContentPane().add(text_grade);
        this.getContentPane().add(grade);
        this.getContentPane().add(text_hobby);
        this.getContentPane().add(hobby_zh);
        this.getContentPane().add(hobby_en);
        this.getContentPane().add(text_introduction);
        this.getContentPane().add(textArea_introduction);
        this.getContentPane().add(textArea_introduction);
        this.getContentPane().add(inZH);
        this.getContentPane().add(inEN);
    }

    private void initJFrame() {
        this.setTitle("xxx");//设置标题
        this.setSize(800, 600);//设置窗体大小
        this.setAlwaysOnTop(true);//设置界面置顶
        this.setLocationRelativeTo(null);//设置窗体居中
        this.setLayout(null);//取消默认的居中放置
        this.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);//设置关闭窗体的时候,退出程序
        this.setVisible(true);//设置窗体可见
    }
}

标签:课程设计,Java,grade,text,CAT,add,new,hobby,JavaSwing
From: https://blog.csdn.net/2301_80045119/article/details/139905950

相关文章

  • 【java】解决EasyExcel读取InputStream时解析不到excel文件类型的问题
    正常利用EasyExcel读取excel中sheet时会调用如下接口:publicstaticExcelReaderBuilderread(StringpathName,ReadListenerreadListener){returnread((String)pathName,(Class)null,readListener);}publicstaticExcelReaderBuilderread(Stringp......
  • 【java-POI】如何将一个WorkBook转为一个InputStream?
    /***利用workBook创建一个输入流用于后续操作**@return*/privateInputStreamcreateInputSream(){if(inputStream!=null){try{inputStream.reset();returninputStream;......
  • java项目中的高并发处理
    在Java面试中,当被问及项目中的高并发处理时,你可以从以下几个方面来分享经验:1.项目背景介绍简要介绍项目的业务场景和功能,以及为什么需要高并发处理。2.并发量评估描述如何评估系统需要处理的并发量,包括用户量、请求频率等。3.系统架构设计解释为应对高并发,系统架构......
  • JavaScript与Go后端服务连接方法
    1.概述本文档描述了如何使用JavaScript(在浏览器或Node.js环境中)与使用Go语言编写的后端服务进行通信。我们将通过HTTP请求来实现前后端的数据交互。2.前提条件后端服务已经部署并运行在指定的URL上。JavaScript环境已经配置好,如果是Node.js,需要安装axios或fetch库。3.Go......
  • java使用@Controller注解跳转到thmyleaf页面时候报错
     报错如下######当我使用RestController时候接口可以得到返回的对象↓但是查看RestController和Controller的区别之后:也就是说@RestController返回的是一个对象,@Controller默认情况下,方法的返回值会被解析为一个视图名称,并寻找与该名称匹配的视图进行渲染。这意味着返回......
  • Java逐层解析JSON的内存占用分析
    哈喽,大家好,我是木头左!JSON对象与Java映射JSON对象是由键值对构成的无序集合,这在Java中通常由Map<String,Object>来表示。每个键值对都占用一定的内存空间,而Java的HashMap或TreeMap等实现会根据内部结构和存储的数据量来动态调整内存占用。JSON数组与Java列表JSON数组是由有......
  • Java项目:springboot汉服文化bbs商城系统(计算机毕业设计)
    作者主页:Java毕设网 简介:Java领域优质创作者、Java项目、学习资料、技术互助文末获取源码一、项目介绍汉服文化bbs商城系统,主要分为前后台。共分两种角色:管理员与普通用户;管理员可登录前后台,普通用户仅可登录前台;普通用户登录后可发布、修改、删除自己的文章;前台主要......
  • 【面试宝典】28道Java集合高频题库整理(附答案背诵版)
    常见的集合有哪些?常见的Java集合可以分为两大类:Collection和Map。Collection接口下主要有以下几种实现:List:有序的集合,其中的元素可以重复。ArrayList:基于动态数组实现,查询速度快,但在中间插入和删除元素时速度较慢。LinkedList:基于双向链表实现,插入和删除速......
  • Leetcode150.逆波兰表达式求值(Java)
    题目:        给你一个字符串数组 tokens ,表示一个根据 逆波兰表示法 表示的算术表达式。请你计算该表达式。返回一个表示表达式值的整数。    栈的典型例题。题目要求为:求后缀表达式值。示例 1:输入:tokens=["2","1","+","3","*"]输出:9解释:该算式......
  • Java链表
    在Java中,链表是一种动态数据结构,它不需要在内存中分配一块连续的空间,而是通过指针将节点连接起来。链表由节点(Node)的集合组成,每个节点包含两部分内容:数据(data)和指向下一个节点的引用(next)。Java中常见的链表类型有单向链表、双向链表和循环链表:单向链表(SinglyLinkedList):每......