【从零开始重学Java】第8_9_10天 图形界面、Swing、Applet
传送门
从零开始重学Java 第0天
从零开始重学Java 第1天 Java概述
从零开始重学Java 第2天 标识符和数据类型
从零开始重学Java 第3天 表达式和流程控制语句
从零开始重学Java 第4天 数组、向量和字符串
从零开始重学Java 第5天 对象和类
从零开始重学Java 第6天 异常
从零开始重学Java 第7天 高级特性
从零开始重学Java 第8_9_10天 图形界面、Swing、Applet
从零开始重学Java 第11天 数据流
从零开始重学Java 第12天 线程
从零开始重学Java 第13天 线程
今天休息
AWT与Swing的布局管理器不是那么友好(非常难用...),目前唯一能用到的地方就是写IDEA插件,但IDEA插件会有一层封装过的JB开头的组件,相比原来的更好用,而且布局用的XML,相对方便调整
如果真的需要开发GUI客户端,不如学学C#的WPF,简单易上手,而且界面拖拖拽拽就出来了,exe还能打包好给别人用,发给其他人windows直接打开就能用,不依赖Java环境
何况还有Vue这种可以选,简单功能直接放在网页里实现
实在想不出AWT与Swing的学习必要性,唯一好处就是,只要你Java熟练以后,这些看两眼就能会
至于Applet,因为浏览器停止支持 NPAPI(Netscape 插件应用程序接口)因为会带来安全问题,Applet也就随着被废弃
取而代之的是基于HTML5、CSS3、JavaScript的现代网络技术
这也侧面说明了Java很笨重,很多对于标记语言来说很简单的事情,如果使用Applet实现就会十分复杂
Java语言的图形用户界面设计
很久以前Swing写的一个栈演示器
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.Serial;
import java.util.Stack;
public class StackSimulation extends JFrame {
public static void main(String[] args) {
StackSimulation stackSimulation = new StackSimulation();
stackSimulation.setVisible(true);
stackSimulation.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
@Serial
private static final long serialVersionUID = 9094358252585099002L;
private final JTextArea stackArea;
private final JTextField inputField;
private final Stack<String> stack;
public StackSimulation() {
// 初始化窗口
setTitle("Stack Simulation");
setSize(600, 600);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
// 创建组件
stackArea = new JTextArea();
stackArea.setEditable(false);
inputField = new JTextField();
inputField.setPreferredSize(new Dimension(200,30));
JButton pushButton = new JButton("Push");
pushButton.addActionListener(new PushButtonListener());
JButton popButton = new JButton("Pop");
popButton.addActionListener(new PopButtonListener());
// 设置布局
setLayout(new BorderLayout());
add(stackArea, BorderLayout.CENTER);
JPanel panel = new JPanel();
panel.setLayout(new FlowLayout());
panel.add(inputField);
panel.add(pushButton);
panel.add(popButton);
add(panel, BorderLayout.SOUTH);
// 初始化栈
stack = new Stack<>();
}
// 入栈按钮监听器
private class PushButtonListener implements ActionListener {
@Override
public void actionPerformed(ActionEvent e) {
String input = inputField.getText();
stack.push(input);
stackArea.setText(getStackInfo("入栈 " + input));
inputField.setText("");
}
}
// 出栈按钮监听器
private class PopButtonListener implements ActionListener {
@Override
public void actionPerformed(ActionEvent e) {
if (!stack.isEmpty()) {
String pop = stack.pop();
stackArea.setText(getStackInfo("出栈 "+pop));
}else {
stackArea.setText("");
}
}
}
// 获取栈的信息
private String getStackInfo(String firstLine) {
System.out.println(firstLine);
System.out.println(stack.toString());
StringBuilder sb = new StringBuilder();
sb.append(firstLine).append(System.lineSeparator());
for (int i = stack.size() - 1; i >= 0; i--) {
sb.append(stack.get(i)).append(System.lineSeparator());
}
return sb.toString();
}
}
AWT与Swing
容器
顶层容器
使用JFrame创建一个应用程序
内容窗格
面板
布局
一个简单的例子
FlowLayout布局管理器
BorderLayout布局管理器
GridLayout布局管理器
CardLayout布局管理器
BoxLayout布局管理器
其他布局管理器
事件处理
一个简单的例子
FlowLayout布局管理器
BorderLayout布局管理器
GridLayout布局管理器
CardLayout布局管理器
BoxLayout布局管理器
其他布局管理器
第八章习题
Swing组件
按钮
普通按钮
切换按钮、复选按钮及单选按钮
标签
组合款
列表
文本组件
文本域
文本区
菜单组件
菜单栏
菜单
菜单项
复选菜单和单选菜单项
弹出式菜单
对话框、标准对话框与文件对话框
对话框
标准对话框
文件对话框
控制组件外观
颜色
字体
绘图
第九章习题
Java Applet
编写Applet
Applet的方法和Applet的生命周期
Applet的运行
import java.applet.*;
import java.awt.*;
public class HelloWorldApplet extends Applet {
@Override
public void init() {
super.init();
System.out.println("初始化");
}
@Override
public void start() {
super.start();
System.out.println("启动");
}
@Override
public void paint (Graphics g){
System.out.println("运行");
g.drawString ("Hello World", 25, 50);
}
@Override
public void stop() {
super.stop();
System.out.println("结束");
}
@Override
public void destroy() {
super.destroy();
System.out.println("消亡");
}
}
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>applet检查</title>
</head>
<body>
<applet code="HelloWorldApplet.class" height="300" width="300">
</applet>
</body>
</html>