基础笔记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());//判断一个矩形是否和另一矩形相交

浙公网安备 33010602011771号