Java AWT图形用户界面开发完整指南与实战代码示例

2024-06-21 超腾开源 149 次阅读 0 次点赞
本文全面介绍Java AWT工具包的核心功能和使用方法,涵盖GUI组件创建、事件处理机制、布局管理器配置以及图形绘制技术。通过完整的代码示例展示如何构建包含按钮、文本框、复选框、下拉菜单等组件的图形界面应用,详细讲解FlowLayout、BorderLayout、GridLayout等布局管理器的使用场景,并提供图形绘制和菜单系统的实现方案。作为Java GUI编程的基础,AWT虽然已被Swing和JavaFX取代,但仍是理解图形界面开发原理的重要工具。

java.awt (Abstract Window Toolkit) 是 Java 提供的用于构建图形用户界面(GUI)的原始工具包。它提供了创建窗口、按钮、文本框等 GUI 组件的基本类。

主要特点

1、平台无关的 GUI 组件

2、事件处理机制

3、布局管理器

4、基本的图形绘制功能

5、字体和颜色管理

核心组件示例

import java.awt.*;
import java.awt.event.*;

public class AWTExample extends Frame implements ActionListener {
    private Label label;
    private TextField textField;
    private Button button;
    private TextArea textArea;
    private Checkbox checkbox;
    private Choice choice;
    private List list;

    public AWTExample() {
        // 设置窗口属性
        setTitle("Java AWT 示例");
        setSize(500, 400);
        setLayout(new FlowLayout());
        
        // 添加窗口关闭事件
        addWindowListener(new WindowAdapter() {
            public void windowClosing(WindowEvent we) {
                System.exit(0);
            }
        });
        
        // 创建并添加组件
        createComponents();
    }
    
    private void createComponents() {
        // 标签
        label = new Label("欢迎使用 AWT!");
        add(label);
        
        // 文本框
        textField = new TextField(20);
        textField.addActionListener(this);
        add(new Label("输入文本:"));
        add(textField);
        
        // 按钮
        button = new Button("点击我");
        button.addActionListener(this);
        add(button);
        
        // 文本区域
        textArea = new TextArea(5, 30);
        add(textArea);
        
        // 复选框
        checkbox = new Checkbox("选择我");
        checkbox.addItemListener(new ItemListener() {
            public void itemStateChanged(ItemEvent e) {
                textArea.append("复选框状态: " + checkbox.getState() + "\n");
            }
        });
        add(checkbox);
        
        // 下拉选择框
        choice = new Choice();
        choice.add("选项1");
        choice.add("选项2");
        choice.add("选项3");
        choice.addItemListener(new ItemListener() {
            public void itemStateChanged(ItemEvent e) {
                textArea.append("选择了: " + choice.getSelectedItem() + "\n");
            }
        });
        add(new Label("下拉选择:"));
        add(choice);
        
        // 列表
        list = new List(3, false);
        list.add("列表项1");
        list.add("列表项2");
        list.add("列表项3");
        list.add("列表项4");
        list.addActionListener(this);
        add(new Label("列表:"));
        add(list);
    }
    
    @Override
    public void actionPerformed(ActionEvent e) {
        if (e.getSource() == button) {
            textArea.append("按钮被点击了!\n");
        } else if (e.getSource() == textField) {
            textArea.append("文本框输入: " + textField.getText() + "\n");
            textField.setText("");
        } else if (e.getSource() == list) {
            textArea.append("列表选择: " + list.getSelectedItem() + "\n");
        }
    }
    
    public static void main(String[] args) {
        AWTExample example = new AWTExample();
        example.setVisible(true);
    }
}

布局管理器示例

import java.awt.*;
import java.awt.event.*;

public class LayoutExample extends Frame {
    public LayoutExample() {
        setTitle("布局管理器示例");
        setSize(600, 400);
        
        // 创建选项卡面板展示不同布局
        TabbedPane tabbedPane = new TabbedPane();
        
        // FlowLayout 示例
        Panel flowPanel = new Panel();
        flowPanel.setLayout(new FlowLayout());
        flowPanel.add(new Button("按钮1"));
        flowPanel.add(new Button("按钮2"));
        flowPanel.add(new Button("按钮3"));
        flowPanel.add(new Button("按钮4"));
        flowPanel.add(new Button("按钮5"));
        tabbedPane.add("FlowLayout", flowPanel);
        
        // BorderLayout 示例
        Panel borderPanel = new Panel();
        borderPanel.setLayout(new BorderLayout());
        borderPanel.add(new Button("北"), BorderLayout.NORTH);
        borderPanel.add(new Button("南"), BorderLayout.SOUTH);
        borderPanel.add(new Button("东"), BorderLayout.EAST);
        borderPanel.add(new Button("西"), BorderLayout.WEST);
        borderPanel.add(new Button("中"), BorderLayout.CENTER);
        tabbedPane.add("BorderLayout", borderPanel);
        
        // GridLayout 示例
        Panel gridPanel = new Panel();
        gridPanel.setLayout(new GridLayout(3, 2));
        gridPanel.add(new Button("(0,0)"));
        gridPanel.add(new Button("(0,1)"));
        gridPanel.add(new Button("(1,0)"));
        gridPanel.add(new Button("(1,1)"));
        gridPanel.add(new Button("(2,0)"));
        gridPanel.add(new Button("(2,1)"));
        tabbedPane.add("GridLayout", gridPanel);
        
        add(tabbedPane);
        
        addWindowListener(new WindowAdapter() {
            public void windowClosing(WindowEvent we) {
                System.exit(0);
            }
        });
    }
    
    public static void main(String[] args) {
        LayoutExample example = new LayoutExample();
        example.setVisible(true);
    }
}

图形绘制示例

import java.awt.*;
import java.awt.event.*;

public class DrawingExample extends Frame {
    
    public DrawingExample() {
        setTitle("AWT 图形绘制示例");
        setSize(500, 400);
        
        addWindowListener(new WindowAdapter() {
            public void windowClosing(WindowEvent we) {
                System.exit(0);
            }
        });
    }
    
    @Override
    public void paint(Graphics g) {
        // 设置颜色
        g.setColor(Color.RED);
        
        // 绘制矩形
        g.drawRect(50, 50, 100, 80);
        g.setColor(Color.BLUE);
        g.fillRect(200, 50, 100, 80);
        
        // 绘制椭圆
        g.setColor(Color.GREEN);
        g.drawOval(50, 150, 100, 80);
        g.setColor(Color.ORANGE);
        g.fillOval(200, 150, 100, 80);
        
        // 绘制直线
        g.setColor(Color.BLACK);
        g.drawLine(350, 50, 450, 150);
        
        // 绘制文本
        g.setColor(Color.MAGENTA);
        g.setFont(new Font("Arial", Font.BOLD, 16));
        g.drawString("Java AWT 图形绘制", 150, 300);
        
        // 绘制多边形
        int[] xPoints = {350, 400, 450, 400};
        int[] yPoints = {250, 200, 250, 300};
        g.setColor(Color.CYAN);
        g.fillPolygon(xPoints, yPoints, 4);
    }
    
    public static void main(String[] args) {
        DrawingExample example = new DrawingExample();
        example.setVisible(true);
    }
}

菜单示例

import java.awt.*;
import java.awt.event.*;

public class MenuExample extends Frame implements ActionListener {
    private TextArea textArea;
    
    public MenuExample() {
        setTitle("菜单示例");
        setSize(500, 400);
        
        // 创建菜单栏
        MenuBar menuBar = new MenuBar();
        
        // 文件菜单
        Menu fileMenu = new Menu("文件");
        MenuItem newItem = new MenuItem("新建");
        MenuItem openItem = new MenuItem("打开");
        MenuItem saveItem = new MenuItem("保存");
        MenuItem exitItem = new MenuItem("退出");
        
        newItem.addActionListener(this);
        openItem.addActionListener(this);
        saveItem.addActionListener(this);
        exitItem.addActionListener(this);
        
        fileMenu.add(newItem);
        fileMenu.add(openItem);
        fileMenu.add(saveItem);
        fileMenu.addSeparator();
        fileMenu.add(exitItem);
        
        // 编辑菜单
        Menu editMenu = new Menu("编辑");
        MenuItem cutItem = new MenuItem("剪切");
        MenuItem copyItem = new MenuItem("复制");
        MenuItem pasteItem = new MenuItem("粘贴");
        
        cutItem.addActionListener(this);
        copyItem.addActionListener(this);
        pasteItem.addActionListener(this);
        
        editMenu.add(cutItem);
        editMenu.add(copyItem);
        editMenu.add(pasteItem);
        
        // 添加菜单到菜单栏
        menuBar.add(fileMenu);
        menuBar.add(editMenu);
        
        // 设置菜单栏
        setMenuBar(menuBar);
        
        // 添加文本区域
        textArea = new TextArea();
        add(textArea);
        
        addWindowListener(new WindowAdapter() {
            public void windowClosing(WindowEvent we) {
                System.exit(0);
            }
        });
    }
    
    @Override
    public void actionPerformed(ActionEvent e) {
        String command = e.getActionCommand();
        textArea.append("选择了: " + command + "\n");
        
        if ("退出".equals(command)) {
            System.exit(0);
        }
    }
    
    public static void main(String[] args) {
        MenuExample example = new MenuExample();
        example.setVisible(true);
    }
}

总结

Java AWT 提供了构建基本 GUI 应用程序所需的核心组件和功能。虽然现在更常用的是 Swing 和 JavaFX,但 AWT 仍然是 Java GUI 编程的基础,理解 AWT 有助于更好地理解 Java GUI 编程的原理。

AWT 的主要优势:

1、轻量级,性能较好

2、与原生系统集成良好

3、学习曲线平缓

主要局限性:

1、外观依赖于平台

2、组件相对简单

3、功能不如 Swing 和 JavaFX 丰富

最后更新于6月前
本文由人工编写,AI优化,转载请注明原文地址: java.awt使用方法及代码示例

评论 (1)

登录 后发表评论

流浪的David流浪的David2025-11-28 17:21:15

教程里的代码示例很实用,特别是布局管理器的部分讲得很清楚!正好帮我解决了界面排版的问题,感谢作者分享!