注:此笔记是观看完java黄金矿工项目实战后的笔记,

1.窗口的设置(JFrame)

JFrame是 Java Swing GUI(图形用户界面)库中的一个核心类。用于创建主窗口或顶级容器。

以下是一个简单的示例,演示了如何使用 JFrame 创建一个基本的窗口:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
import javax.swing.*;

public class window extends JFrame {

void launch() {
//设置窗口可见
this.setVisible(true);
//设置窗口大小
this.setSize(768, 1000);
//设置窗口位置位于屏幕中心
this.setLocationRelativeTo(null);
//设置窗口标题
this.setTitle("尚学堂黄金矿工");
// 设置窗口关闭时的操作(默认为 DO_NOTHING_ON_CLOSE)
this.setDefaultCloseOperation(EXIT_ON_CLOSE);

}

public static void main(String[] args) {
//new出window类,调用launch()方法
window w = new window();
w.launch();
}
}

2.图片的导入

注:此处算是一个速成,图片导入没有检验不太严谨,还要其他一些不严谨的地方,具体先跳过,能用就行,以后会补充。

paint函数的drawImage,paintLine

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
public class window extends JFrame {
//绘制红线的绘制方法
void paintSelf(Graphics g){
//颜色为红色
g.setColor(Color.red)
//此处的x,y,endx,endy;分别为起始的xy轴坐标
g.drawLine(x,y,endx,endy)
}


//载入背景
Image bg = Toolkit.getDefaultToolkit().getImage("图片的地址");
//绘制方法
public void paint(Graphics g){
//drawImage的参数分别是:图片路径(image)类型;起;始坐标;接收图像加载进度的通知(不必须),null为不接收
g.drawImage(bg,0,0,null);
paintself(g)
}
}

双缓存技术

即:创建一个画布,将所有东西加载到画布上面,然后将画布传入窗体中,解决闪动问题。

我使用了 Graphics 而不是 Graphics2D,因为 Graphics2D 提供了更多的绘制功能,而我暂时不需要用。

1
2
3
4
5
6
7
8
9
10
//此处代码是接着上面的代码写的
Image offScreenImage;
public void paint(Graphics g){
//画布的大小
offScreenImage =this.createImage(768,1000);
//给画布添加一个画笔
Graphics glImage = offScreenImage.getGraphics();
//调用画笔向画布上绘制东西
paintSelf(glImage);
}

解析

Image offScreenImage;

  • 知识点Image 是Java AWT库中的一个类,用于表示图像。在这里,它被用作一个“离屏缓冲区”,即一个不在屏幕上直接显示的图像缓冲区。
  • 用途:通常,离屏缓冲区用于提高图形渲染的性能。你可以在这个缓冲区上进行复杂的绘制操作,然后再一次性将这个缓冲区的内容绘制到屏幕上,而不是在屏幕上进行频繁的绘制操作。

public void paint(Graphics g)

  • 知识点paint 方法是Java AWT和Swing组件中用于绘制组件内容的方法。当组件需要被重绘时(例如,首次显示、组件大小改变或调用了 repaint 方法),这个方法就会被调用。

offScreenImage =this.createImage(768,1000);

  • 知识点createImage 是Java AWT组件的一个方法,用于创建一个新的离屏图像。这里,它创建了一个宽度为768像素、高度为1000像素的离屏图像。

Graphics glImage = offScreenImage.getGraphics();

  • 知识点getGraphics 方法是从 Image 对象中获取 Graphics 对象的方法,这个 Graphics 对象可以用于在图像上进行绘制。

鼠标监听事件

作用:获取鼠标的状态,通过获得不同的状态,进而进行不同的操作

1
2
3
4
5
6
7
8
9
10
11
12
13
14
addMouseListener(new MouseAdapter() {  
@Override
public void mouseClicked(MouseEvent e) {
// 调用超类(MouseAdapter)的mouseClicked方法,但在这个例子中,它什么也不做
super.mouseClicked(e);

// e.getButton()检查点击的是哪个鼠标按钮
// 1:左键,2:滚轮,3:右键
if (e.getButton() == 1) {
// 如果点击的是鼠标左键,打印 "1"
System.out.println("1");
}
}
});

增强for循环

在创建金块对象时,创建一个Object类型的集合,使用增强for循环来遍历提取金块元素

作用及优势:简洁,容易读,类型安全

增强for循环(Enhanced For Loop),也称为”for-each”循环,是Java 5及以后版本引入的一种简化数组和集合遍历的语法。它允许你更简洁地遍历数组或集合中的元素,而无需使用传统的基于索引的for循环。

遍历数组

1
2
3
4
5
6
int[] numbers = {1, 2, 3, 4, 5};  

// 使用增强for循环遍历数组
for (int number : numbers) {
System.out.println(number);
}

在这个例子中,number 是数组 numbers 中当前遍历到的元素。for (int number : numbers) 这种语法告诉Java我们想要遍历 numbers 数组中的每一个元素,并且每次迭代时都将当前元素的值赋给 number 变量。

遍历集合

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
import java.util.ArrayList;  
import java.util.List;

public class EnhancedForLoopExample {
public static void main(String[] args) {
List<String> names = new ArrayList<>();
names.add("Alice");
names.add("Bob");
names.add("Charlie");

// 使用增强for循环遍历集合
for (String name : names) {
System.out.println(name);
}
}
}

在这个例子中,name 是 names 列表中当前遍历到的字符串。for (String name : names) 语法告诉Java我们想要遍历 names 列表中的每一个元素,并且每次迭代时都将当前元素的值赋给 name 变量。


Author: Jie
Reprint policy: All articles in this blog are used except for special statements CC BY 4.0 reprint polocy. If reproduced, please indicate source Jie !
 Previous
2024-06-02 Jie
Next 
2024-05-26 Jie
  TOC