基础笔记7(frame)

关于简单使用frame(awt包) ,一般使用jframe(swing包)

1.窗口的创建:关闭按钮的监听,以及画图

public class FrameTest extends Frame {

    void init() {
        setLocation(333, 111);// 设置位置
        setSize(633, 522);// 大小
        setVisible(true);// 是否显示

        /*
         * 监听是否关闭窗口
         */
        addWindowListener(new WindowAdapter() {
            @Override
            public void windowClosing(WindowEvent e) {
                // TODO Auto-generated method stub
                System.exit(0);
            }
        });

    }

    /*
     * 回调函数
     */
    @Override
    public void paint(Graphics g) {
        g.drawLine(33, 33, 99, 99);
        g.drawOval(33, 55, 65, 67);

        g.setColor(Color.green);
        g.setFont(new Font("宋体", Font.BOLD, 44));
        g.drawString("天下第一", 220, 150);
        g.fillOval(211, 211, 122, 122);
        g.fillRect(111, 111, 111, 111);
        g.drawImage(GameUtil.getImg(), 111, 222, null);//将图片画到面板
    }

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        new FrameTest().init();
    }

2.将图片资源加载到应用中:

public class GameUtil {
    private static final String path = "resource/img.png";

    private GameUtil() {
    }

    public static Image getImg() {
        URL url = GameUtil.class.getClassLoader().getResource(path);
        BufferedImage img = null;
        try {
            img = ImageIO.read(url);
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        return img;
    }

3.如何移动加载图片

new Thread(){
            public void run() {
                while(true){
                repaint();//一直调用paint()
                try {
                    Thread.sleep(22);
                } catch (InterruptedException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
                }
            };
        }.start();

并且修改画出图形的坐标:

g.drawImage(GameUtil.getImg(), x, y, null);
        x++;
        y++;
        if(x+y>400){
            x=y=0;
        }

4.键盘监听,以及左右移动图片:

addKeyListener(new KeyAdapter() {
            @Override
            public void keyPressed(KeyEvent e) {//键盘按下
                key = e.getKeyCode();
                System.out.println(key);
                s.move(key);//下面是move方法
            }
            @Override
            public void keyReleased(KeyEvent e) {//键盘弹起
                // TODO Auto-generated method stub
                super.keyReleased(e);
                //当需要八个方向时候。可以将按下的方向设置成为true,弹起时设置成false.多个if判断使其同时按下的可能
                //move(){if(left)x--;if(top)y++;) 
            }
        });
//int up=KeyEvent.VK_UP;
public
void move(int key) {//四个方向处理 switch (key) { case 38: y-=22; break; case 40: y+=22; break; case 39: x+=22; break; case 37: x-=22; } }

 

 

5.关于碰撞的问题,一般把两个物体当作两个矩形处理,一个矩形的四个端点是否在另一个矩形的内部(圆可以当作一个内切矩形)

new Rectangle().intersects(new Rectangle());//判断一个矩形是否和另一矩形相交

 

posted @ 2016-12-04 04:11  假程序猿  阅读(172)  评论(0)    收藏  举报