中国足球进世界杯

教程:从0到1手把手制作一个java计算器小应用(超详细)

目录

前言

创建过程

1.首先我们在src下创建一个Calculator类

​编辑

2.导入我们所需要的头文件

3.搭建项目的大体框架

4.运行顺序及初始化Calculator对象

5.在main函数之前,实例化一些对象,以便后面使用

完善各种方法

1.init()函数

2.addButtons()函数

3.actionPerformed()函数

4.calculateResult()函数

完整代码以及打包

1.详细注释代码

2.无注释代码

3.编译成class文件及打包成jar包

前言

要实现图形化界面,我们需要使用 Java 标准库中的 AWT 和 Swing 库,这篇文章会从建立文件到编译class文件到生成jar包在任何有java运行环境(jre)的系统中可以直接双击运行,运行的效果图如下

但是这个项目无法支持三个数据同时相加减等运算,还不够完善,只能作为一个新手入门项目

创建过程

1.首先我们在src下创建一个Calculator类

(图中.idea上方的项目名不一定是Calculator,可以是其他名字)

2.导入我们所需要的头文件

import java.awt.BorderLayout; // 用于创建边界布局管理器,将组件放置在北、南、东、西、中五个区域

import java.awt.Color; // 用于处理颜色,常用于设置组件的背景色或前景色

import java.awt.GridLayout; // 用于创建网格布局管理器,将容器划分为固定数量的行和列,每个单元格大小相等

import java.awt.event.ActionEvent; // 表示一个动作事件,如按钮点击事件

import java.awt.event.ActionListener; // 事件监听器接口,必须实现 actionPerformed 方法来处理动作事件

import javax.swing.JButton; // 用于创建按钮,按钮可以触发 ActionEvent 事件

import javax.swing.JFrame; // 顶层容器,用于创建应用程序主窗口

import javax.swing.JPanel; // 用于创建面板容器,可以包含其他组件并使用布局管理器

import javax.swing.JTextField; // 用于创建单行文本框,允许用户输入和显示文本

3.搭建项目的大体框架

搭建的大体思路:

将代码以方法的形式分离开,避免过度集中,方法之内衔接下一个方法,主函数里创建对象的时候完成初始化,初始化完成应用界面的布局,同时给新加的按钮添加监听器,初始化完成之后,等待用户操作,当用户输入”=“运算符时计算结果

其中对于第一句 解释如下

//Calculator 类扩展了(extends) JFrame 类,意味着它继承了创建和管理窗口的能力。

//同时,Calculator 实现(implements)了 ActionListener 接口,这意味着它能够响应用户在界面上执行的动作(如按钮点击)。

//通过实现 ActionListener,Calculator 类必须定义 actionPerformed 方法来处理按钮点击等动作事件。

4.运行顺序及初始化Calculator对象

运行顺序:

首先在main函数里面 新建一个Calculator对象-> 然后在创建对象的时候会自动因为public Calculator(String title)初始话Calculator对象-> 然后第一个首先super(title)设置你的标题-> 然后init()函数进行一些具体的初始化操作-> 并且在init()函数内调用addButtons()函数,addButtons()函数可以把数字,操作符都加入到图形,还有运算框界面-> 并且与此同时会对每个按钮加入一个监听-> 当用户点击这按钮时,会执行actionPerformed()函数,其中参数ActionEvent e 就是用户点击按钮的操作-> 在actionPerformed()函数里面我们会监听用户是否输入了”=”的运算符,如果是“=”我们会执行最后的calculateResult()函数。

初始化Calculator对象:

//这是负责初始化对象的,注意它与类的名字相同,但不是函数也不是类

public Calculator(String title) {

super(title);//确定你的app的窗口标题

init();

// 使窗口变为可见。调用这个方法后,窗口会显示在屏幕上。

// 如果不调用这个方法,即使窗口已经创建并设置了其他属性,它仍然不会显示出来。

this.setVisible(true);

// 设置窗口的大小为 300 像素宽和 300 像素高。

// 这行代码定义了窗口的初始尺寸。

this.setSize(300, 300);

// 将窗口的位置设置为屏幕的中心。

// 如果传递 null 作为参数,窗口会相对于屏幕居中显示。

// 这个方法的作用是使窗口在显示时居中于屏幕,提供更好的用户体验。

this.setLocationRelativeTo(null);

// 设置窗口的关闭操作。

// 当用户点击窗口的关闭按钮(X按钮)时,程序将退出。

// JFrame.EXIT_ON_CLOSE 表示关闭窗口时,程序将结束并退出运行。

// 其他选项包括 JFrame.DISPOSE_ON_CLOSE(关闭窗口但不退出程序)等。

this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

}

我们也要注意到,

this.setVisible(true);

this.setSize(300, 300);

this.setLocationRelativeTo(null);

this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

这几行是在init()函数后面的,我们在初始化的时候并没有进行仍何的点击操作,所以这几行代码会执行并设置窗口的属性,然后等待我们的操作

5.在main函数之前,实例化一些对象,以便后面使用

//JTextField 是一个用于输入单行文本的Swing组件,Swing 是 Java 中用于创建图形用户界面 (GUI)

// 的一组库。Swing 组件是用来构建图形用户界面的各种可视化元素,如按钮、文本框、标签、面板等。

// 它们位于 javax.swing 包中。Swing 组件是纯 Java 实现的轻量级组件,具有跨平台性,

// 并且基于 Java 基础类 (Java Foundation Classes, JFC) 提供丰富的 GUI 功能。

private JTextField expressText;

//JPanel 是一个轻量级的容器,可以包含和组织其他Swing组件。

//这两个面板用于布局和组织界面中的不同部分:数字按钮和操作按钮。

private JPanel numPanel, operPanel;

private String express = "";//用于存储计算器中的输入表达式

完善各种方法

1.init()函数

//初始化函数

private void init() {

// 设置主窗口的布局管理器为边界布局

// 边界布局允许将组件放置在东、南、西、北、中五个区域

this.setLayout(new BorderLayout());

// 创建一个面板,用于容纳表达式文本框和“Clear”按钮

// 这个面板的布局管理器设置为边界布局,以便可以将文本框和按钮放置在指定的位置

JPanel topPanel = new JPanel(new BorderLayout());

// 创建一个文本框,用于显示和输入数学表达式

// 设置文本框为不可编辑,背景颜色为黄色

expressText = new JTextField();

expressText.setEditable(false); // 文本框不可编辑

expressText.setBackground(Color.YELLOW); // 背景颜色设置为黄色

topPanel.add(expressText, BorderLayout.CENTER); // 将文本框添加到面板的中央

// 创建一个按钮,用于清空表达式文本框

JButton clearButton = new JButton("Clear");

clearButton.addActionListener(this); // 添加事件监听器,响应点击事件

topPanel.add(clearButton, BorderLayout.EAST); // 将“Clear”按钮添加到面板的右边

// 将包含表达式文本框和“Clear”按钮的面板添加到主窗口的北边(顶部)

this.add(topPanel, BorderLayout.NORTH);

// 创建一个面板,用于放置数字按钮,设置为网格布局

// 网格布局将面板划分为4行3列

numPanel = new JPanel();

numPanel.setLayout(new GridLayout(4, 3));

// 创建一个面板,用于放置操作按钮,设置为网格布局

// 网格布局将面板划分为5行1列

operPanel = new JPanel();

operPanel.setLayout(new GridLayout(5, 1));

// 调用addButtons方法,为数字按钮面板和操作按钮面板添加按钮并设置相应的监听器

addButtons(numPanel, operPanel);

// 将数字按钮面板添加到主窗口的中央区域

this.add(numPanel, BorderLayout.CENTER);

// 将操作按钮面板添加到主窗口的东边(右侧)

this.add(operPanel, BorderLayout.EAST);

}

2.addButtons()函数

//给图形界面加入按钮的

private void addButtons(JPanel numPanel, JPanel operPanel) {

// 数字按钮的标签数组

// 包含了0-9的数字按钮以及"00"和"^"按钮

String[] numLabels = {"7", "8", "9", "4", "5", "6", "1", "2", "3", "00", "0", "^"};

// 操作按钮的标签数组

// 包含了基本的四则运算操作符和等号

String[] operLabels = {"+", "-", "*", "/", "="};

// 遍历数字按钮标签数组

for (String label : numLabels) {

// 为每个标签创建一个新的JButton

JButton button = new JButton(label);

// 为按钮添加事件监听器,响应按钮点击事件

button.addActionListener(this);

// 将按钮添加到数字按钮面板(numPanel)中

numPanel.add(button);

}

// 遍历操作按钮标签数组

for (String label : operLabels) {

// 为每个标签创建一个新的JButton

JButton button = new JButton(label);

// 为按钮添加事件监听器,响应按钮点击事件

button.addActionListener(this);

// 将按钮添加到操作按钮面板(operPanel)中

operPanel.add(button);

}

}

3.actionPerformed()函数

//@Override 注解用于指示 actionPerformed 方法

// 是对ActionListener 接口中 actionPerformed 方法的覆盖。

@Override

// 这个方法是 ActionListener 接口的实现,用于响应用户按下按钮的事件

//我们点击按钮的操作(action)就是参数ActionEvent e

public void actionPerformed(ActionEvent e) {

// 获取触发事件的组件(即被点击的按钮)

JButton sourceButton = (JButton) e.getSource();

// 获取按钮上的文本(即按钮的标签)

String command = sourceButton.getText();

// 根据按钮的文本来处理不同的操作

switch (command) {

case "=":

// 如果按钮文本是“=”号,调用 calculateResult 方法来计算并显示结果

calculateResult();

break;

case "Clear":

// 如果按钮文本是“Clear”,清空文本框的内容

expressText.setText("");

break;

default:

// 对于其他按钮(数字和操作符),将按钮的文本追加到表达式文本框中

expressText.setText(expressText.getText() + command);

break;

}

}

4.calculateResult()函数

// 用于计算最终的结果

private void calculateResult() {

try {

// 获取当前表达式

// 从文本框中获取用户输入的表达式

String expression = expressText.getText();

// 分割数字和操作符

// 按运算符分割表达式,将其拆分为数字部分

// 正则表达式 [+\-*/%^] 匹配所有算术运算符

String[] nums = expression.split("[+\\-*/%^]");

// 按数字分割表达式,将其拆分为运算符部分

// 正则表达式 [0-9.]+ 匹配所有数字和小数点

String[] opers = expression.split("[0-9.]+");

// 检查分割后是否有足够的操作数和运算符

// 确保至少有两个操作数和两个运算符

if (nums.length < 2 || opers.length < 2) {

// 如果操作数或运算符数量不足,显示“输入错误”信息

expressText.setText("输入错误");

return;

}

// 解析操作数和运算符

// 将第一个操作数从字符串转换为 double,并去除多余的空白

double num1 = Double.parseDouble(nums[0].trim());

// 将第二个操作数从字符串转换为 double,并去除多余的空白

double num2 = Double.parseDouble(nums[1].trim());

// 获取运算符,并去除多余的空白

String oper = opers[1].trim();

// 计算结果

// 使用 switch 语句根据运算符计算结果

double result = switch (oper) {

case "+" -> num1 + num2; // 加法运算

case "-" -> num1 - num2; // 减法运算

case "*" -> num1 * num2; // 乘法运算

case "/" -> num2 != 0 ? num1 / num2 : Double.NaN; // 除法运算,除数不能为零

case "%" -> num1 % num2; // 取余运算

case "^" -> Math.pow(num1, num2); // 幂运算

default -> Double.NaN; // 默认情况,结果为 NaN 表示计算错误

};

// 显示结果或错误信息

// 如果结果为 NaN(计算错误),则显示“计算错误”信息

// 否则,将计算结果转换为字符串并显示

expressText.setText(Double.isNaN(result) ? "计算错误" : String.valueOf(result));

} catch (Exception e) {

// 捕获所有异常(例如,输入格式错误或解析错误),并显示“输入错误”信息

expressText.setText("输入错误");

}

// 计算完后清空表达式

// 清空表达式,以便进行新的计算

express = "";

}

完整代码以及打包

1.详细注释代码

import java.awt.BorderLayout; // 用于创建边界布局管理器,将组件放置在北、南、东、西、中五个区域

import java.awt.Color; // 用于处理颜色,常用于设置组件的背景色或前景色

import java.awt.GridLayout; // 用于创建网格布局管理器,将容器划分为固定数量的行和列,每个单元格大小相等

import java.awt.event.ActionEvent; // 表示一个动作事件,如按钮点击事件

import java.awt.event.ActionListener; // 事件监听器接口,必须实现 actionPerformed 方法来处理动作事件

import javax.swing.JButton; // 用于创建按钮,按钮可以触发 ActionEvent 事件

import javax.swing.JFrame; // 顶层容器,用于创建应用程序主窗口

import javax.swing.JPanel; // 用于创建面板容器,可以包含其他组件并使用布局管理器

import javax.swing.JTextField; // 用于创建单行文本框,允许用户输入和显示文本

//Calculator 类扩展了(extends) JFrame 类,意味着它继承了创建和管理窗口的能力。

//同时,Calculator 实现(implements)了 ActionListener 接口,这意味着它能够响应用户在界面上执行的动作(如按钮点击)。

//通过实现 ActionListener,Calculator 类必须定义 actionPerformed 方法来处理按钮点击等动作事件。

public class Calculator extends JFrame implements ActionListener {

//JTextField 是一个用于输入单行文本的Swing组件,Swing 是 Java 中用于创建图形用户界面 (GUI)

// 的一组库。Swing 组件是用来构建图形用户界面的各种可视化元素,如按钮、文本框、标签、面板等。

// 它们位于 javax.swing 包中。Swing 组件是纯 Java 实现的轻量级组件,具有跨平台性,

// 并且基于 Java 基础类 (Java Foundation Classes, JFC) 提供丰富的 GUI 功能。

private JTextField expressText;

//JPanel 是一个轻量级的容器,可以包含和组织其他Swing组件。

//这两个面板用于布局和组织界面中的不同部分:数字按钮和操作按钮。

private JPanel numPanel, operPanel;

private String express = "";//用于存储计算器中的输入表达式

public static void main(String[] args) {

new Calculator("我的计算器");

}

//这是负责初始化对象的,注意它与类的名字相同,但不是函数也不是类

public Calculator(String title) {

super(title);//确定你的app的窗口标题

init();

// 使窗口变为可见。调用这个方法后,窗口会显示在屏幕上。

// 如果不调用这个方法,即使窗口已经创建并设置了其他属性,它仍然不会显示出来。

this.setVisible(true);

// 设置窗口的大小为 300 像素宽和 300 像素高。

// 这行代码定义了窗口的初始尺寸。

this.setSize(300, 300);

// 将窗口的位置设置为屏幕的中心。

// 如果传递 null 作为参数,窗口会相对于屏幕居中显示。

// 这个方法的作用是使窗口在显示时居中于屏幕,提供更好的用户体验。

this.setLocationRelativeTo(null);

// 设置窗口的关闭操作。

// 当用户点击窗口的关闭按钮(X按钮)时,程序将退出。

// JFrame.EXIT_ON_CLOSE 表示关闭窗口时,程序将结束并退出运行。

// 其他选项包括 JFrame.DISPOSE_ON_CLOSE(关闭窗口但不退出程序)等。

this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

}

//初始化函数

private void init() {

// 设置主窗口的布局管理器为边界布局

// 边界布局允许将组件放置在东、南、西、北、中五个区域

this.setLayout(new BorderLayout());

// 创建一个面板,用于容纳表达式文本框和“Clear”按钮

// 这个面板的布局管理器设置为边界布局,以便可以将文本框和按钮放置在指定的位置

JPanel topPanel = new JPanel(new BorderLayout());

// 创建一个文本框,用于显示和输入数学表达式

// 设置文本框为不可编辑,背景颜色为黄色

expressText = new JTextField();

expressText.setEditable(false); // 文本框不可编辑

expressText.setBackground(Color.YELLOW); // 背景颜色设置为黄色

topPanel.add(expressText, BorderLayout.CENTER); // 将文本框添加到面板的中央

// 创建一个按钮,用于清空表达式文本框

JButton clearButton = new JButton("Clear");

clearButton.addActionListener(this); // 添加事件监听器,响应点击事件

topPanel.add(clearButton, BorderLayout.EAST); // 将“Clear”按钮添加到面板的右边

// 将包含表达式文本框和“Clear”按钮的面板添加到主窗口的北边(顶部)

this.add(topPanel, BorderLayout.NORTH);

// 创建一个面板,用于放置数字按钮,设置为网格布局

// 网格布局将面板划分为4行3列

numPanel = new JPanel();

numPanel.setLayout(new GridLayout(4, 3));

// 创建一个面板,用于放置操作按钮,设置为网格布局

// 网格布局将面板划分为5行1列

operPanel = new JPanel();

operPanel.setLayout(new GridLayout(5, 1));

// 调用addButtons方法,为数字按钮面板和操作按钮面板添加按钮并设置相应的监听器

addButtons(numPanel, operPanel);

// 将数字按钮面板添加到主窗口的中央区域

this.add(numPanel, BorderLayout.CENTER);

// 将操作按钮面板添加到主窗口的东边(右侧)

this.add(operPanel, BorderLayout.EAST);

}

//给图形界面加入函数的

private void addButtons(JPanel numPanel, JPanel operPanel) {

// 数字按钮的标签数组

// 包含了0-9的数字按钮以及"00"和"^"按钮

String[] numLabels = {"7", "8", "9", "4", "5", "6", "1", "2", "3", "00", "0", "^"};

// 操作按钮的标签数组

// 包含了基本的四则运算操作符和等号

String[] operLabels = {"+", "-", "*", "/", "="};

// 遍历数字按钮标签数组

for (String label : numLabels) {

// 为每个标签创建一个新的JButton

JButton button = new JButton(label);

// 为按钮添加事件监听器,响应按钮点击事件

button.addActionListener(this);

// 将按钮添加到数字按钮面板(numPanel)中

numPanel.add(button);

}

// 遍历操作按钮标签数组

for (String label : operLabels) {

// 为每个标签创建一个新的JButton

JButton button = new JButton(label);

// 为按钮添加事件监听器,响应按钮点击事件

button.addActionListener(this);

// 将按钮添加到操作按钮面板(operPanel)中

operPanel.add(button);

}

}

//@Override 注解用于指示 actionPerformed 方法

// 是对ActionListener 接口中 actionPerformed 方法的覆盖。

@Override

// 这个方法是 ActionListener 接口的实现,用于响应用户按下按钮的事件

//我们点击按钮的操作(action)就是参数ActionEvent e

public void actionPerformed(ActionEvent e) {

// 获取触发事件的组件(即被点击的按钮)

JButton sourceButton = (JButton) e.getSource();

// 获取按钮上的文本(即按钮的标签)

String command = sourceButton.getText();

// 根据按钮的文本来处理不同的操作

switch (command) {

case "=":

// 如果按钮文本是“=”号,调用 calculateResult 方法来计算并显示结果

calculateResult();

break;

case "Clear":

// 如果按钮文本是“Clear”,清空文本框的内容

expressText.setText("");

break;

default:

// 对于其他按钮(数字和操作符),将按钮的文本追加到表达式文本框中

expressText.setText(expressText.getText() + command);

break;

}

}

// 用于计算最终的结果

private void calculateResult() {

try {

// 获取当前表达式

// 从文本框中获取用户输入的表达式

String expression = expressText.getText();

// 分割数字和操作符

// 按运算符分割表达式,将其拆分为数字部分

// 正则表达式 [+\-*/%^] 匹配所有算术运算符

String[] nums = expression.split("[+\\-*/%^]");

// 按数字分割表达式,将其拆分为运算符部分

// 正则表达式 [0-9.]+ 匹配所有数字和小数点

String[] opers = expression.split("[0-9.]+");

// 检查分割后是否有足够的操作数和运算符

// 确保至少有两个操作数和两个运算符

if (nums.length < 2 || opers.length < 2) {

// 如果操作数或运算符数量不足,显示“输入错误”信息

expressText.setText("输入错误");

return;

}

// 解析操作数和运算符

// 将第一个操作数从字符串转换为 double,并去除多余的空白

double num1 = Double.parseDouble(nums[0].trim());

// 将第二个操作数从字符串转换为 double,并去除多余的空白

double num2 = Double.parseDouble(nums[1].trim());

// 获取运算符,并去除多余的空白

String oper = opers[1].trim();

// 计算结果

// 使用 switch 语句根据运算符计算结果

double result = switch (oper) {

case "+" -> num1 + num2; // 加法运算

case "-" -> num1 - num2; // 减法运算

case "*" -> num1 * num2; // 乘法运算

case "/" -> num2 != 0 ? num1 / num2 : Double.NaN; // 除法运算,除数不能为零

case "%" -> num1 % num2; // 取余运算

case "^" -> Math.pow(num1, num2); // 幂运算

default -> Double.NaN; // 默认情况,结果为 NaN 表示计算错误

};

// 显示结果或错误信息

// 如果结果为 NaN(计算错误),则显示“计算错误”信息

// 否则,将计算结果转换为字符串并显示

expressText.setText(Double.isNaN(result) ? "计算错误" : String.valueOf(result));

} catch (Exception e) {

// 捕获所有异常(例如,输入格式错误或解析错误),并显示“输入错误”信息

expressText.setText("输入错误");

}

// 计算完后清空表达式

// 清空表达式,以便进行新的计算

express = "";

}

}

2.无注释代码

import java.awt.BorderLayout;

import java.awt.Color;

import java.awt.GridLayout;

import java.awt.event.ActionEvent;

import java.awt.event.ActionListener;

import javax.swing.JButton;

import javax.swing.JFrame;

import javax.swing.JPanel;

import javax.swing.JTextField;

public class Calculator extends JFrame implements ActionListener {

private JTextField expressText;

private JPanel numPanel, operPanel;

private String express = "";

public static void main(String[] args) {

new Calculator("我的计算器");

}

public Calculator(String title) {

super(title);

init();

this.setVisible(true);

this.setSize(300, 300);

this.setLocationRelativeTo(null);

this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

}

private void init() {

this.setLayout(new BorderLayout());

JPanel topPanel = new JPanel(new BorderLayout());

expressText = new JTextField();

expressText.setEditable(false);

expressText.setBackground(Color.YELLOW);

topPanel.add(expressText, BorderLayout.CENTER);

JButton clearButton = new JButton("Clear");

clearButton.addActionListener(this);

topPanel.add(clearButton, BorderLayout.EAST);

this.add(topPanel, BorderLayout.NORTH);

numPanel = new JPanel(new GridLayout(4, 3));

operPanel = new JPanel(new GridLayout(5, 1));

addButtons(numPanel, operPanel);

this.add(numPanel, BorderLayout.CENTER);

this.add(operPanel, BorderLayout.EAST);

}

private void addButtons(JPanel numPanel, JPanel operPanel) {

String[] numLabels = {"7", "8", "9", "4", "5", "6", "1", "2", "3", "00", "0", "^"};

String[] operLabels = {"+", "-", "*", "/", "="};

for (String label : numLabels) {

JButton button = new JButton(label);

button.addActionListener(this);

numPanel.add(button);

}

for (String label : operLabels) {

JButton button = new JButton(label);

button.addActionListener(this);

operPanel.add(button);

}

}

@Override

public void actionPerformed(ActionEvent e) {

JButton sourceButton = (JButton) e.getSource();

String command = sourceButton.getText();

switch (command) {

case "=":

calculateResult();

break;

case "Clear":

expressText.setText("");

break;

default:

expressText.setText(expressText.getText() + command);

break;

}

}

private void calculateResult() {

try {

String expression = expressText.getText();

String[] nums = expression.split("[+\\-*/%^]");

String[] opers = expression.split("[0-9.]+");

if (nums.length < 2 || opers.length < 2) {

expressText.setText("输入错误");

return;

}

double num1 = Double.parseDouble(nums[0].trim());

double num2 = Double.parseDouble(nums[1].trim());

String oper = opers[1].trim();

double result = switch (oper) {

case "+" -> num1 + num2;

case "-" -> num1 - num2;

case "*" -> num1 * num2;

case "/" -> num2 != 0 ? num1 / num2 : Double.NaN;

case "%" -> num1 % num2;

case "^" -> Math.pow(num1, num2);

default -> Double.NaN;

};

expressText.setText(Double.isNaN(result) ? "计算错误" : String.valueOf(result));

} catch (Exception e) {

expressText.setText("输入错误");

}

express = "";

}

}

3.编译成class文件及打包成jar包

1)编译 .java 文件成 .class 文件

打开项目: 在 IntelliJ IDEA 中打开你的 Java 项目。配置 JDK:

确保已为项目配置了 JDK。可以通过 File -> Project Structure -> Project 确认和设置。

编写代码: 确保你的 .java 文件在 src 目录中。编译项目:

在菜单栏中,选择 Build -> Build Project 或使用快捷键 Ctrl+F9(Windows/Linux)或 Cmd+F9(Mac)。

IntelliJ IDEA 将编译 .java 文件并生成 .class 文件,通常存放在 out 或 target 目录中(取决于项目配置)。

2) 打包成 JAR 包

配置 Artifacts:

打开 File -> Project Structure。

选择 Artifacts 标签。

点击左上角的 + 号,选择 JAR -> From modules with dependencies。

选择你的主模块,确保将生成的 .class 文件和所需的依赖项包含在内。

设置输出目录。

生成 JAR 包:

配置完成后,点击 Apply 和 OK。

在菜单栏中,选择 Build -> Build Artifacts。

在弹出的菜单中选择你刚刚配置的 JAR 项目,点击 Build。

IntelliJ IDEA 将编译并打包你的项目,生成 JAR 文件在你指定的输出目录中。

结果如图所示