1.图中的小太阳会自动弹回
2.源码:
/**
* Frame编程基础
* @author dell
*
*/
public class GameFrame extends Frame { //Frame 是带有标题和边框的顶层窗口。
Image img = GameUtil.getImage("images/sun.jpg");
/**
*
*/
public void launchFrame(){
setSize(500, 500);//调整组件的大小,使其宽度为 width,高度为 height。
setLocation(0, 0);//将组件移到新位置。通过此组件父级坐标空间中的 x 和 y 参数来指定新位置的左上角。
setVisible(true);//根据参数 b 的值显示或隐藏此组件。
new PaintThread().start(); //启动线程
addWindowListener(new WindowAdapter() {//添加指定的窗口侦听器,以从此窗口接收窗口事件。如果 l 为 null,则不抛出任何异常,且不执行任何操作。
@Override
public void windowClosing(WindowEvent e) {//当窗口已被关闭时调用。
System.exit(0);
}
});
}
private double x=100,y=100;
private boolean up;
@Override
public void paint(Graphics g) {//Graphics类是所有图形上下文的抽象基类,允许应用程序在组件(已经在各种设备上实现)以及闭屏图像上进行绘制。
g.drawLine(100, 100, 200, 200);//在点之间使用当前颜色绘制一条线
g.drawRect(100, 100, 200, 200);// 绘制指定矩形的边框。
g.drawOval(100, 100, 200, 150);//绘制椭圆的边框。
Font f =new Font("宋体",Font.BOLD,20);//Font 类表示字体,可以使用它以可见方式呈现文本。字体提供将字符 序列映射到字形 序列所需要的信息,以便在 Graphics 对象和 Component 对象上呈现字形序列。
g.setFont(f);// 将此图形上下文的字体设置为指定字体。
g.drawString("大大大打打", 200, 200);//使用此图形上下文的当前字体和颜色绘制由指定字符串给出的文本。 最左边字符的基线位于此图形上下文坐标系中的位置(x,y)处。
g.fillRect(100, 100, 20, 20);//填充指定的矩形
Color c = g.getColor();
g.setColor(Color.red);//将此图形上下文的当前颜色设置为指定的颜色。
g.fillOval(300, 300, 20, 20);//用当前颜色填充指定矩形的椭圆。
g.setColor(c);// 使用当前颜色填充外接指定矩形框的椭圆。
g.drawImage(img, (int)x, (int)y, null);// 绘制指定图像中当前可用的图像。
if(up){
y -= 10;
x -= 10;
}else{
y +=10;
x +=10;
}
if(y>500-30){
up = true;
}
if(y<30){
up = false;
}
}
/**
* 该线程不断的重绘组件,模拟其动态效果
*/
class PaintThread extends Thread {
public void run(){
while(true){
repaint();//repaint 重绘此组件。如果组件是轻量组件,则此方法会尽快调用此组件的 paint 方法。否则此方法会尽快调用此组件的 update 方法。
try {
Thread.sleep(100); //1s = 1000ms
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
public static void main(String[] args) {
GameFrame gf = new GameFrame();
gf.launchFrame();
}
}