第一部分:控制台界面开发

使用Java标准库创建功能丰富的控制台应用

学习目标

掌握控制台输入输出、菜单设计、格式化输出和用户交互

1

基础输入输出

使用Scanner类获取用户输入,System.out进行输出

import java.util.Scanner;

public class ConsoleIOExample {
                        public static void main(String[] args) {
                        Scanner scanner = new Scanner(System.in);
        
                        // 获取用户输入
        System.out.print("请输入您的姓名: ");
        String name = scanner.nextLine();
        
        System.out.print("请输入您的年龄: ");
                        int age = scanner.nextInt();
        
                        // 格式化输出
        System.out.printf("您好, %s! 您今年%d岁。%n", name, age);
        
        scanner.close();
    }
}
2

控制台菜单设计

创建循环菜单系统提供用户交互

import java.util.Scanner;

public class ConsoleMenuExample {
                        public static void main(String[] args) {
                        Scanner scanner = new Scanner(System.in);
                        boolean running = true;
        
                        while (running) {
                        // 显示菜单
            System.out.println("\n==== 系统菜单 ====");
            System.out.println("1. 查看用户信息");
            System.out.println("2. 修改设置");
            System.out.println("3. 退出系统");
            System.out.print("请选择操作: ");
            
                        int choice = scanner.nextInt();
            
                        switch (choice) {
                        case 1:
                        showUserInfo();
                        break;
                        case 2:
                        changeSettings();
                        break;
                        case 3:
                    running = false;
                    System.out.println("系统已退出,感谢使用!");
                        break;
                        default:
                    System.out.println("无效选择,请重新输入");
            }
        }
        scanner.close();
    }
    
                        private static void showUserInfo() { /* ... */ }
                        private static void changeSettings() { /* ... */ }
}

控制台开发小贴士

1. 使用System.console()方法可以获取更安全的控制台输入(支持密码隐藏)

2. 使用ANSI转义码可以在控制台实现彩色文本输出

3. 对于复杂控制台界面,可以使用JCurses或Lanterna等库

第二部分:Swing基础

创建你的第一个Java图形用户界面应用

学习目标

理解Swing框架结构,创建基本窗口和组件

1

第一个Swing程序

创建基本的JFrame窗口

import javax.swing.JFrame;
import javax.swing.JLabel;

public class FirstSwingApp {
                    public static void main(String[] args) {
                    // 创建JFrame实例
        JFrame frame = new JFrame("第一个Swing程序");
        
                    // 设置关闭操作
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        
                    // 设置窗口大小
        frame.setSize(400, 300);
        
                    // 添加标签组件
        JLabel label = new JLabel("欢迎使用Swing!");
        frame.add(label);
        
                    // 显示窗口
        frame.setVisible(true);
    }
}
2

Swing核心组件

常用Swing组件及其用途

JLabel

显示文本或图像的静态组件

JLabel label = new JLabel("用户名:");
label.setIcon(new ImageIcon("user.png"));

JTextField

单行文本输入框

JTextField textField = new JTextField(20);
textField.setText("默认文本");

JButton

可点击的按钮组件

JButton button = new JButton("提交");
button.addActionListener(e -> {
                            // 处理点击事件
});

动手练习

创建一个登录窗口,包含:

  • 用户名输入框
  • 密码输入框(使用JPasswordField)
  • "登录"和"取消"按钮
  • 点击登录按钮时验证输入

第三部分:布局管理器

使用布局管理器创建灵活的界面布局

学习目标

掌握常用布局管理器,创建响应式界面

BorderLayout

将容器分为5个区域:北、南、东、西、中

JFrame frame = new JFrame("BorderLayout示例");
frame.setLayout(new BorderLayout());

frame.add(new JButton("北"), BorderLayout.NORTH);
frame.add(new JButton("南"), BorderLayout.SOUTH);
frame.add(new JButton("东"), BorderLayout.EAST);
frame.add(new JButton("西"), BorderLayout.WEST);
frame.add(new JButton("中"), BorderLayout.CENTER);

GridLayout

创建规则的网格布局

JFrame frame = new JFrame("GridLayout示例");
frame.setLayout(new GridLayout(3, 2, 5, 5));

// 添加9个按钮
for (int i = 1; i <= 9; i++) {
    frame.add(new JButton("按钮 " + i));
}

布局管理小贴士

1. 使用嵌套面板组合多种布局管理器创建复杂界面

2. 对于精确控制,可以使用绝对布局(setLayout(null))但需手动设置位置

3. 考虑使用GroupLayout或MigLayout实现专业级布局

布局练习

创建一个计算器界面:

  • 使用BorderLayout作为主布局
  • 顶部添加显示区域
  • 中间使用GridLayout放置数字按钮
  • 右侧放置运算符按钮

第四部分:事件处理

响应用户交互操作

学习目标

掌握事件监听机制,实现用户交互响应

1

事件处理模型

Java事件处理采用委托模型:

事件处理流程

1. 用户操作(点击、输入等)

2. 生成事件对象

3. 事件分发到监听器

4. 监听器处理事件

2

事件监听器实现

三种常用实现方式:

// 1. 匿名内部类(常用)
button.addActionListener(new ActionListener() {
                    @Override
                    public void actionPerformed(ActionEvent e) {
                    // 处理事件
    }
});

// 2. Lambda表达式(Java 8+)
button.addActionListener(e -> {
                    // 处理事件
});

// 3. 实现监听器接口
public class MyFrame extends JFrame implements ActionListener {
                    // ...
                    @Override
                    public void actionPerformed(ActionEvent e) {
                    // 处理事件
    }
}

第五部分:常见错误与解决方案

开发过程中常见问题及解决方法

1. GUI在事件处理后冻结

原因:在事件监听器中执行长时间操作阻塞了事件分发线程(EDT)

解决方案:

button.addActionListener(e -> {
                    // 使用SwingWorker执行耗时操作
                    new SwingWorker<Void, Void>() {
                    @Override
                    protected Void doInBackground() {
                    // 执行耗时操作
                    return null;
        }
        
                    @Override
                    protected void done() {
                    // 更新UI
        }
    }.execute();
});

2. 组件不显示或位置错误

可能原因:

  • 忘记调用setVisible(true)
  • 布局管理器设置错误
  • 组件被其他组件覆盖
  • 使用绝对布局但未设置边界

解决方案:

// 确保设置可见性
frame.setVisible(true);

// 验证布局
frame.validate();

// 重新绘制
frame.repaint();

3. 资源泄露

原因:未正确关闭资源(如数据库连接、文件流)

解决方案:使用try-with-resources语句

try (BufferedReader reader = new BufferedReader(new FileReader("file.txt"))) {
                    // 读取文件
} catch (IOException e) {
    e.printStackTrace();
}

第六部分:总结与进阶

知识总结与进阶学习路径

控制台应用总结

  • 适合开发工具类应用和服务器程序
  • 开发快速,资源占用低
  • 用户交互能力有限
  • 使用Scanner进行输入,System.out进行输出

Swing应用总结

  • 成熟的跨平台GUI工具包
  • 丰富的组件库
  • 可定制的外观和感觉
  • 支持复杂布局和事件处理

进阶学习路径

  • 学习JavaFX(现代Java GUI框架)
  • 掌握Swing高级组件(JTable、JTree)
  • 了解图形绘制(Graphics2D)
  • 学习多线程在GUI中的应用
  • 探索Swing第三方库(JGoodies, MigLayout)

学习建议

1. 从简单项目开始,逐步增加复杂度

2. 参考Oracle官方Swing教程

3. 学习开源项目代码(如JEdit, JabRef)

4. 使用IDE的可视化设计器加速开发