一、创建项目
-
创建一个 demo0 项目。
-
在项目根目录中创建 image 文件夹,并把下面两张图片拷贝到 image 目录中。
-
图 1
-
图 2
-
-
在 src 中创建 BallGame 类。
-
目录结构如下:
二、出现窗口
-
代码:
// 导入包 import java.awt.*; import javax.swing.*; // 定义 BallGame 类并继承 javax.swing.* 中的窗口类 public class BallGame extends JFrame { // 加载窗口 void launchFrame() { setSize(300,300); // 窗口大小 setLocation(50,50); // 窗口位置 setVisible(true); // 控制窗口的显隐 } // 入口 public static void main(String[] args) { BallGame game = new BallGame(); game.launchFrame(); } }
-
运行结果:
三、加载图片
-
代码:
// 导入包 import java.awt.*; import javax.swing.*; // 定义 BallGame 类并继承 javax.swing.* 中的窗口类 public class BallGame extends JFrame { // 引入图片 Image ball = Toolkit.getDefaultToolkit().getImage("image/ball.png"); Image desk = Toolkit.getDefaultToolkit().getImage("image/desk.jpg"); // 画窗口 public void paint(Graphics g) { System.out.println("画了一次窗口"); g.drawImage(desk,0,0,null); // 先画桌面,桌面在底层 g.drawImage(ball,100,100,null); // 后画球,球在桌面上 } // 加载窗口 void launchFrame() { setSize(856,500); // 窗口大小 setLocation(50,50); // 窗口位置 setVisible(true); // 控制窗口的显隐 } // 入口 public static void main(String[] args) { BallGame game = new BallGame(); game.launchFrame(); } }
-
运行结果:
-
注意,有的时候窗口里的图片加载不出来,如下图:
遇到这种情况可以先将画出的窗口最小化,然后再从任务栏中把窗口打开,这样图片就加载出来了。
四、小球运动
-
代码:
// 导入包 import java.awt.*; import javax.swing.*; // 定义 BallGame 类并继承 javax.swing.* 中的窗口类 public class BallGame extends JFrame { // 引入图片 Image ball = Toolkit.getDefaultToolkit().getImage("image/ball.png"); Image desk = Toolkit.getDefaultToolkit().getImage("image/desk.jpg"); // 定义小球的坐标 double x = 100; double y = 250; // 定义小球方向 boolean right = true; // 画窗口 public void paint(Graphics g) { System.out.println(x); g.drawImage(desk,0,0,null); // 先画桌面,桌面在底层 g.drawImage(ball,(int)x,(int)y,null); // 后画球,球在桌面上 if(right) x += 15; else x -= 15; if(x > 780) right = false; if(x < 36) right = true; } // 加载窗口 void launchFrame() { setSize(856,500); // 窗口大小 setLocation(50,50); // 窗口位置 setVisible(true); // 控制窗口的显隐 while(true) { repaint(); try { Thread.sleep(40); // 40ms } catch (Exception e) { e.printStackTrace(); } } } // 入口 public static void main(String[] args) { BallGame game = new BallGame(); game.launchFrame(); } }
-
运行结果:
五、任意角度
-
代码:
// 导入包 import java.awt.*; import javax.swing.*; // 定义 BallGame 类并继承 javax.swing.* 中的窗口类 public class BallGame extends JFrame { // 引入图片 Image ball = Toolkit.getDefaultToolkit().getImage("image/ball.png"); Image desk = Toolkit.getDefaultToolkit().getImage("image/desk.jpg"); // 定义小球的坐标 double x = 80; double y = 250; double maxX = 791; double maxY = 430; double minX = 35; double minY = 65; // 定义弧度 60°角 double degree = 3.14 / 3; /* * 经过测试计算洞口坐标:[x,y] * 上左:[35,65] x 最小值和 y 的最小值 * 上中:[413,65] * 上右:[791,65] * * 下左:[35,430] * 下中:[413,430] * 下右:[791,430] x 最大值和 y 的最大值 */ // 画窗口 public void paint(Graphics g) { g.drawImage(desk,0,0,null); // 先画桌面,桌面在底层 g.drawImage(ball,(int)x,(int)y,null); // 后画球,球在桌面上 x += 10 * Math.cos(degree); y += 10 * Math.sin(degree); if(y > maxY || y < minY) degree = -degree; if(x > maxX || x < minX) degree = 3.14 - degree; } // 加载窗口 void launchFrame() { setSize(856,500); // 窗口大小 setLocation(50,50); // 窗口位置 setVisible(true); // 控制窗口的显隐 while(true) { repaint(); try { Thread.sleep(40); // 40ms } catch (Exception e) { e.printStackTrace(); } } } // 入口 public static void main(String[] args) { BallGame game = new BallGame(); game.launchFrame(); } }
-
运行结果: