简介
Swing 是 Java 官方图形界面(GUI)工具包,基于 AWT 重写,纯 Java 实现、跨平台,组件统一渲染,不受操作系统原生控件限制。
包路径:javax.swing.*
顶层窗口:JFrame(主窗口)、JDialog(弹窗)
所有组件以 J 开头:JButton、JLabel、JTextField
线程规范:GUI 代码必须在事件调度线程 EDT 执行,推荐 SwingUtilities.invokeLater()
1. demo代码
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
public class Calculator extends JFrame implements ActionListener {
// 显示输入结果的文本框
private JTextField display;
// 操作数、运算符缓存
private String num1 = "";
private String num2 = "";
private String operator = "";
public Calculator() {
// 窗口基础设置
setTitle("简易计算器");
setSize(300, 400);
setDefaultCloseOperation(EXIT_ON_CLOSE);
setLocationRelativeTo(null); // 窗口居中
setResizable(false); // 禁止缩放
// 主面板,垂直布局
JPanel mainPanel = new JPanel();
mainPanel.setLayout(new BorderLayout(10, 10));
mainPanel.setBorder(BorderFactory.createEmptyBorder(15, 15, 15, 15));
// 输入显示框
display = new JTextField();
display.setFont(new Font("微软雅黑", Font.PLAIN, 28));
display.setHorizontalAlignment(JTextField.RIGHT);
display.setEditable(false); // 禁止手动输入
mainPanel.add(display, BorderLayout.NORTH);
// 按钮面板 4行4列网格布局
JPanel btnPanel = new JPanel();
btnPanel.setLayout(new GridLayout(4, 4, 8, 8));
// 按钮文字数组
String[] btnTexts = {
"7", "8", "9", "/",
"4", "5", "6", "*",
"1", "2", "3", "-",
"0", ".", "=", "+"
};
// 循环创建按钮并绑定事件
for (String text : btnTexts) {
JButton btn = new JButton(text);
btn.setFont(new Font("微软雅黑", Font.PLAIN, 18));
btn.addActionListener(this);
btnPanel.add(btn);
}
// 功能按钮一行(清零、退格)
JPanel funcPanel = new JPanel();
funcPanel.setLayout(new GridLayout(1, 2, 8, 8));
JButton clearBtn = new JButton("C");
JButton backBtn = new JButton("←");
clearBtn.setFont(new Font("微软雅黑", Font.PLAIN, 18));
backBtn.setFont(new Font("微软雅黑", Font.PLAIN, 18));
clearBtn.addActionListener(this);
backBtn.addActionListener(this);
funcPanel.add(clearBtn);
funcPanel.add(backBtn);
// 组装面板
JPanel centerPanel = new JPanel();
centerPanel.setLayout(new BorderLayout(10, 10));
centerPanel.add(funcPanel, BorderLayout.NORTH);
centerPanel.add(btnPanel, BorderLayout.CENTER);
mainPanel.add(centerPanel, BorderLayout.CENTER);
add(mainPanel);
}
// 按钮点击监听逻辑
@Override
public void actionPerformed(ActionEvent e) {
String clickText = e.getActionCommand();
// 清零 C
if ("C".equals(clickText)) {
display.setText("");
num1 = "";
num2 = "";
operator = "";
return;
}
// 退格 ←
if ("←".equals(clickText)) {
String text = display.getText();
if (text.length() > 0) {
display.setText(text.substring(0, text.length() - 1));
}
return;
}
// 等于 = 计算结果
if ("=".equals(clickText)) {
if (num1.isEmpty() || operator.isEmpty()) return;
num2 = display.getText();
double n1 = Double.parseDouble(num1);
double n2 = Double.parseDouble(num2);
double result = 0;
switch (operator) {
case "+": result = n1 + n2; break;
case "-": result = n1 - n2; break;
case "*": result = n1 * n2; break;
case "/":
if (n2 == 0) {
display.setText("除数不能为0");
num1 = num2 = operator = "";
return;
}
result = n1 / n2;
break;
}
// 整数去掉小数点后.0
if (result == (long) result) {
display.setText(String.valueOf((long) result));
} else {
display.setText(String.valueOf(result));
}
// 计算完成清空缓存,可继续用结果运算
num1 = display.getText();
operator = "";
num2 = "";
return;
}
// 运算符 + - * /
if ("+".equals(clickText) || "-".equals(clickText) || "*".equals(clickText) || "/".equals(clickText)) {
if (!display.getText().isEmpty()) {
num1 = display.getText();
operator = clickText;
display.setText("");
}
return;
}
// 数字和小数点
String current = display.getText();
// 防止多个小数点
if (".".equals(clickText) && current.contains(".")) {
return;
}
display.setText(current + clickText);
}
// 程序入口
public static void main(String[] args) {
SwingUtilities.invokeLater(() -> {
Calculator calc = new Calculator();
calc.setVisible(true);
});
}
}
2. 打包成可运行 Jar 步骤(IDEA)
File → Project Structure → Artifacts → + → JAR → From modules with dependencies


Main class 选择 Calculator

勾选 Extract to the target JAR

Build → Build Artifacts 生成 jar 包


3. 下载安装launch4j
地址:https://launch4j.sourceforge.net/index.html


下载后双击运行安装然后打开
4.打包
Icon可以选择图标,我这里没有选,有需要的可以自行选择







如果报错如下

就是jdk的版本不一致
我的是程序编译用高版本 Java(如 Java17),运行时用低版本 JRE(Java8)出现的这个问题,修改下就好了
直接打出来的exe包别人无法运行,因为缺少环境
需要这样打包:
https://blog.csdn.net/YXWik/article/details/162209280

4952

被折叠的 条评论
为什么被折叠?



