Java Swing库介绍及代码示例

引言

Java是一种常用的编程语言,它提供了许多图形用户界面(GUI)的开发工具。其中,Java Swing库是Java平台上最流行的GUI工具之一。本文将介绍Java Swing库的基本概念和用法,并提供一些代码示例。

什么是Java Swing库

Java Swing库是Java平台上用于创建GUI界面的一套类库。它提供了丰富的组件和容器,能够满足各种GUI应用程序的需求。Swing库建立在Java的AWT(Abstract Window Toolkit)之上,提供了更丰富和可定制的用户界面。

Swing组件

Swing库提供了许多组件,用于构建用户界面。以下是一些常用的Swing组件:

  1. JFrame:顶级窗口容器,用于创建一个应用程序的主窗口。
  2. JPanel:容器组件,用于将其他组件组合在一起。
  3. JButton:按钮组件,用于触发操作。
  4. JLabel:标签组件,用于显示文本或图像。
  5. JTextField:文本框组件,用于接受用户的输入。
  6. JTextArea:文本区域组件,用于显示多行文本。
  7. JComboBox:下拉列表框组件,用于选择一个选项。
  8. JCheckBox:复选框组件,用于选择多个选项。
  9. JRadioButton:单选按钮组件,用于选择一个选项。
  10. JScrollPane:滚动面板组件,用于显示大量内容。
  11. JTable:表格组件,用于显示和编辑表格数据。

除了以上组件,Swing库还提供了很多其他类型的组件,以满足不同的需求。

创建Swing应用程序

下面是一个示例代码,演示如何创建一个简单的Swing应用程序:

import javax.swing.*;

public class HelloWorldSwing {
    private static void createAndShowGUI() {
        // 创建一个顶级窗口
        JFrame frame = new JFrame("HelloWorldSwing");
        // 设置窗口关闭时的操作
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        // 添加一个标签组件
        JLabel label = new JLabel("Hello, World!");
        frame.getContentPane().add(label);
        // 设置窗口大小
        frame.setSize(300, 200);
        // 居中显示窗口
        frame.setLocationRelativeTo(null);
        // 显示窗口
        frame.setVisible(true);
    }

    public static void main(String[] args) {
        // 在事件分派线程中创建和显示GUI
        SwingUtilities.invokeLater(HelloWorldSwing::createAndShowGUI);
    }
}

上述代码创建了一个名为HelloWorldSwing的Swing应用程序。它创建了一个顶级窗口,并在窗口中添加了一个标签组件,显示文本"Hello, World!"。通过调用setSize设置窗口的大小,setLocationRelativeTo将窗口居中显示,最后通过调用setVisible(true)显示窗口。

绘制饼状图

使用Java Swing库可以绘制各种图表,包括饼状图。下面是一个示例代码,演示如何使用Swing库绘制饼状图:

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

public class PieChartExample extends JPanel {
    @Override
    protected void paintComponent(Graphics g) {
        super.paintComponent(g);
        Graphics2D g2d = (Graphics2D) g;

        int width = getWidth();
        int height = getHeight();

        int radius = Math.min(width, height) / 2;
        int centerX = width / 2;
        int centerY = height / 2;

        double total = 100;
        double startAngle = 0;

        g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);

        // 绘制两个扇形
        g2d.setColor(Color.RED);
        double extent = 40 / total * 360;
        g2d.fill(new Arc2D.Double(centerX - radius, centerY - radius, radius * 2, radius * 2, startAngle, extent, Arc2