第一部分:控制台界面开发
使用Java标准库创建功能丰富的控制台应用
学习目标
掌握控制台输入输出、菜单设计、格式化输出和用户交互
基础输入输出
使用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();
}
}
控制台菜单设计
创建循环菜单系统提供用户交互
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框架结构,创建基本窗口和组件
第一个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);
}
}
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放置数字按钮
- 右侧放置运算符按钮
第四部分:事件处理
响应用户交互操作
学习目标
掌握事件监听机制,实现用户交互响应
事件处理模型
Java事件处理采用委托模型:
事件处理流程
1. 用户操作(点击、输入等)
2. 生成事件对象
3. 事件分发到监听器
4. 监听器处理事件
事件监听器实现
三种常用实现方式:
// 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的可视化设计器加速开发