【HeadFirst系列之HeadFirstJava】第12天之🎨 Java GUI 编程入门:用 Swing 画出你的第一个窗口!

Scroll Down

🎨 Java GUI 编程入门:用 Swing 画出你的第一个窗口!

“学 Java 只能写控制台程序?不,今天我们让它‘动’起来!”

在 Java 世界里,GUI(图形用户界面) 让应用程序变得更加生动。想象一下,你的 Java 程序不仅仅是黑白的终端窗口,还可以有按钮、颜色、图片,甚至动画!💡

本篇文章基于 《Head First Java》第 12 章——看图说故事,带你快速掌握 Java GUI 编程的核心知识,并提供实战代码示例,帮助你写出交互式窗口程序!🚀

12-图形用户接口-看图说故事-前言

🎭 Java GUI 开发概述

Java 提供了两种主要的 GUI 库:
AWT(Abstract Window Toolkit) —— Java 早期的 GUI 库,依赖操作系统的本地组件。
Swing —— AWT 的增强版,提供更丰富的 UI 组件,更加灵活、跨平台。

🎨 为什么选择 Swing?

  • 轻量级(不依赖操作系统,跨平台无压力)
  • 功能丰富(提供按钮、菜单、文本框、表格等 UI 组件)
  • 可扩展(支持自定义绘制)
  • 事件驱动(可以监听用户输入,制作交互式应用)

今天,我们就用 Swing 来创建 Java GUI 应用!🚀


🏗️ 创建第一个 Java GUI 窗口

📌 目标: 创建一个窗口,里面有一个按钮。

import javax.swing.*;

public class SimpleGui {
    public static void main(String[] args) {
        JFrame frame = new JFrame("My First GUI"); // 创建窗口
        JButton button = new JButton("Click Me!"); // 创建按钮

        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); // 关闭窗口时退出程序
        frame.getContentPane().add(button); // 添加按钮到窗口
        frame.setSize(300, 200); // 设置窗口大小
        frame.setVisible(true); // 显示窗口
    }
}

🖥 运行后效果:
一个窗口,里面有一个按钮! 🎉

📌 代码解析:

  • JFrame 是窗口,JButton 是按钮。
  • setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE) 让窗口关闭时退出程序。
  • getContentPane().add(button) 把按钮放到窗口里。
  • setVisible(true) 让窗口显示出来!

🖌️ Swing 自定义绘制:画一个圆形

📌 目标: 在窗口里画出一个圆形!

import javax.swing.*;
import java.awt.*;

public class MyDrawingPanel extends JPanel {
    @Override
    protected void paintComponent(Graphics g) {
        super.paintComponent(g);
        g.setColor(Color.BLUE); // 设置颜色
        g.fillOval(50, 50, 100, 100); // 画一个蓝色的圆
    }

    public static void main(String[] args) {
        JFrame frame = new JFrame("Simple Drawing");
        MyDrawingPanel panel = new MyDrawingPanel();

        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.getContentPane().add(panel);
        frame.setSize(300, 300);
        frame.setVisible(true);
    }
}

🖥 运行后效果:
窗口里有一个蓝色的圆形! 🎨

📌 代码解析:

  • paintComponent(Graphics g) 是 Swing 的绘图方法,Graphics 负责绘制图形。
  • g.fillOval(50, 50, 100, 100) 画了一个直径 100 像素的蓝色圆形。
  • JPanel 组件可以用来绘制自定义图形!

🎭 让按钮控制颜色变化

GUI 不能只是静态的,让它动起来! 👏

📌 目标: 点击按钮,窗口里的矩形颜色会改变!

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

public class ColorChanger {
    JFrame frame;
    MyDrawingPanel panel;

    public static void main(String[] args) {
        ColorChanger app = new ColorChanger();
        app.go();
    }

    public void go() {
        frame = new JFrame("Click to Change Color");
        panel = new MyDrawingPanel();
        JButton button = new JButton("Change Color");

        button.addActionListener(new ActionListener() { // 监听按钮点击事件
            public void actionPerformed(ActionEvent e) {
                panel.changeColor(); // 每次点击按钮,颜色改变
                frame.repaint();
            }
        });

        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.getContentPane().add(BorderLayout.SOUTH, button); // 按钮放在窗口底部
        frame.getContentPane().add(BorderLayout.CENTER, panel);
        frame.setSize(400, 400);
        frame.setVisible(true);
    }
}

class MyDrawingPanel extends JPanel {
    private Color color = Color.RED; // 默认颜色

    public void changeColor() {
        color = new Color((int) (Math.random() * 255), (int) (Math.random() * 255), (int) (Math.random() * 255)); 
    }

    @Override
    protected void paintComponent(Graphics g) {
        super.paintComponent(g);
        g.setColor(color);
        g.fillRect(50, 50, 300, 300); // 画一个矩形
    }
}

🖥 运行后效果:
初始显示一个红色矩形,点击按钮,矩形颜色会随机变化! 🎨

📌 代码解析:

  • ActionListener 监听按钮的点击事件。
  • Math.random() 生成随机颜色值。
  • repaint() 触发 paintComponent() 方法,让界面更新!

🏆 进阶思考:做一个图片查看器!

如果你希望加载和显示图片,可以使用 ImageIcon

JLabel label = new JLabel(new ImageIcon("your_image.jpg"));
frame.getContentPane().add(label);

📌 扩展练习:

  • 📷 制作一个图片相册,点击按钮切换图片。
  • 🎵 播放声音(用 javax.sound.sampled.Clip 结合 GUI)。

🎉 结语:用 Swing 让 Java 更生动!

本篇文章带你了解了 Java Swing 的核心知识,包括 窗口创建、绘图、事件监听 等。掌握这些内容,你就可以开发自己的 桌面应用,比如:
✅ 记事本、✅ 画图软件、✅ 电子相册、✅ 小游戏!

💬 你学会了吗?欢迎留言交流,快动手试试吧! 🚀

👉 觉得有用?记得点赞 + 关注,更多 Java 干货持续更新! 💡