组件
- 窗口
- 弹窗
- 面板
- 文本框
- 列表框
- 按钮
- 图片
- 监听事件
- 鼠标
- 键盘事件
- 破解工具
1. 简介
GUI的核心技术 :Swing,AWT
- 界面不美观
- 需要jar环境
有什么用?
- 可以写一些小具
- 工作时候可能需要维护swing界面,概率极小
- 了解MVC架构,了解监听
2. AWT
2.1 AWT介绍
- 包含了很多类和接口!GUI!
- 元素:窗口,按钮,文本框
- java.awt
2.2 组件和容器
2.2.1. Frame
1 | package 第一个Frame窗口; |
运行效果图
问题:发现窗口关闭不掉,停止java程序即可
尝试回顾封装
1 | package 第一个Frame窗口; |
2.2.2. Panel面板
解决了关闭事件
1 | package Panel面板; |
2.3 布局管理器
- 流式布局
- 东西南北中
- 表格布局
流式布局
1 | package FlowLayOut; |
东西南北中
1 | package 布局管理器; |
表格布局 Grid
1 | package 布局管理器; |
思考
分析过程
代码实现
1 | package 布局管理器; |
总结
- Frame是一个顶级窗口
- Panel无法单独显示,必须添加到某个容器中
- 布局管理器
- 流式布局
- 东西南北中
- 表格
- 大小,定位,背景颜色,可见性,监听!
2.4 事件监听
事件监听:当某个事件发生的时候,干什么?
1 | package 事件监听; |
多个按钮,共享一个事件
1 | package 事件监听; |
2.5 输入文本框TextField监听
1 | package 事件监听; |
2.6 简易计算机,组合+内部类回顾复习!
oop(面向对象)原则:先组合,大于继承!
目前代码
1 | package 事件监听; |
完全改造成面向对象写法
1 | package 事件监听; |
内部类:
- 更好的包装
- 内部类最好的方法,就是可以畅通无阻的访问外部类的属性和方法!
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42package 事件监听;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
public class TestCalculator03 {
public static void main(String[] args) {
new Calculator02().loadFrame();
}
}
class Calculator02 extends Frame { //计算器类
TextField textField1,textField2,textField3; //属性
public void loadFrame(){ //方法
textField1=new TextField(10);
textField2=new TextField(10);
textField3=new TextField(20);
Button button = new Button("=");
Label label = new Label("+");
button.addActionListener(new MyCalculatorListener02());
setLayout(new FlowLayout()); //布局
add(textField1);
add(label);
add(textField2);
add(button);
add(textField3);
pack();
setVisible(true);
}
private class MyCalculatorListener02 implements ActionListener { //监听器
public void actionPerformed(ActionEvent e) {
//获取加数和被加数
//将这个值+法运算后,放到第三个框
//清除前两个框
int n1=Integer.parseInt(textField1.getText());
int n2=Integer.parseInt(textField2.getText());
textField3.setText(""+(n1+n2));
textField1.setText("");
textField2.setText("");
}
}
}
2.7 画笔
1 | package 画笔Paint; |
2.8 鼠标监听
目的:想要实现鼠标画画
1 | package 鼠标监听; |
2.9 窗口监听
1 | package 窗口监听; |
2.10 键盘监听
1 | package 键盘监听; |
3. Swing
3.1 窗口、面板
1 | package Swing之JFrame窗体; |
3.2 弹窗
JDialog,用来被弹出,默认就有关闭事件
1 | package JDialog弹窗; |
3.3 标签
label
1 | new JLabel("xxx") |
图标 ICON
1 | package IconImageIcon标签; |
图片 ImageIcon
1 | package IconImageIcon标签; |
3.4 面板
JPanel
1 | package 文本域JScroll面板; |
JScrollPanel面板(可滚动面板)
1 | package 文本域JScroll面板; |
3.5 按钮
图片按钮
1 | package 图片按钮单选框多选框; |
单选按钮
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29package 图片按钮单选框多选框;
import javax.swing.*;
import java.awt.*;
import java.net.URL;
/* 单选框,单选按钮 */
public class TestJButton02 extends JFrame {
public static void main(String[] args) {
new TestJButton02();
}
public TestJButton02(){
Container container=this.getContentPane();
//单选框
JRadioButton jRadioButton1 = new JRadioButton("jRadioButton1");
JRadioButton jRadioButton2 = new JRadioButton("jRadioButton2");
JRadioButton jRadioButton3 = new JRadioButton("jRadioButton3");
//由于单选框只能选一个,分组,一个分组中只能选一个
ButtonGroup buttonGroup = new ButtonGroup();
buttonGroup.add(jRadioButton1);
buttonGroup.add(jRadioButton2);
buttonGroup.add(jRadioButton3);
container.add(jRadioButton1,BorderLayout.NORTH);
container.add(jRadioButton2,BorderLayout.CENTER);
container.add(jRadioButton3,BorderLayout.SOUTH);
this.setVisible(true);
this.setBounds(100,100,400,300);
this.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
}
}复选按钮
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20package 图片按钮单选框多选框;
import javax.swing.*;
import java.awt.*;
public class TestJButton03 extends JFrame {
public static void main(String[] args) {
new TestJButton03();
}
public TestJButton03(){
Container container=this.getContentPane();
//多选框
JCheckBox jCheckBox1 = new JCheckBox("jCheckBox1");
JCheckBox jCheckBox2 = new JCheckBox("jCheckBox2");
container.add(jCheckBox1,BorderLayout.NORTH);
container.add(jCheckBox2,BorderLayout.SOUTH);
this.setVisible(true);
this.setBounds(100,100,400,300);
this.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
}
}
3.6 列表
- 下拉框
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22package 下拉框列表框;
import javax.swing.*;
import java.awt.*;
/* 下拉框 */
public class TestCombobox extends JFrame {
public static void main(String[] args) {
new TestCombobox();
}
public TestCombobox(){
Container contentPane = getContentPane();
JComboBox<Object> objectJComboBox = new JComboBox<>();
objectJComboBox.addItem(null);
objectJComboBox.addItem("语文");
objectJComboBox.addItem("数学");
objectJComboBox.addItem("英语");
contentPane.add(objectJComboBox);
pack();
setVisible(true);
setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
}
}
}snakeX[i]=snakeX[i-1]; snakeY[i]=snakeY[i-1]; } //走向 if (fx.equals("R")){ snakeX[0]=snakeX[0]+25; //边界判断 if (snakeX[0]>850){ snakeX[0]=25; } } if (fx.equals("L")){ snakeX[0]=snakeX[0]-25; //边界判断 if (snakeX[0]<25){ snakeX[0]=850; } } if (fx.equals("U")){ snakeY[0]=snakeY[0]-25; //边界判断 if (snakeY[0]<75){ snakeY[0]=650; } } if (fx.equals("D")){ snakeY[0]=snakeY[0]+25; //边界判断 if (snakeY[0]>650){ snakeY[0]=75; } } //判断失败,撞到自己就算失败 for (int i=1;i<length;i++){ if (snakeX[0]==snakeX[i]&&snakeY[0]==snakeY[i]){ isFail=true; } } repaint();//重画页面 } timer.start();//定时器开启
}