坦克大战01 Java绘图坐标体系与事件处理机制

您所在的位置:网站首页 java星空绘图 坦克大战01 Java绘图坐标体系与事件处理机制

坦克大战01 Java绘图坐标体系与事件处理机制

2023-03-13 09:06| 来源: 网络整理| 查看: 265

1 Java绘图坐标体系 1.1 介绍

1.2 像素

计算机在屏幕上显示的内容都是由屏幕上的每一个像素组成的。例如,计算机显示 器的分辨率是800x600,表示计算机屏幕上的每一行由800个点组成,共有600行, 整个计算机屏幕共有480000个像素。像素是一个密度单位,而厘米是长度单位,两者无法比较

1.3 示例 public class DrawCircle extends JFrame{ private MyPanel mp = null; public static void main(String[] args) { new DrawCircle(); } public DrawCircle() { mp = new MyPanel(); //将panel添加到frame this.add(mp); //设置窗口大小 this.setSize(400,300); this.setVisible(true);//可以显示 this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//点击X释放程序 } } //定义面板 class MyPanel extends JPanel { @Override public void paint(Graphics g) { super.paint(g);//保留,调用父类的方法完成初始化 g.drawOval(10,10,100,100);//画一个圆 } } 1.3 绘图原理

Component类提供了两个和绘图相关最重要的方法

paint(Graphics g):绘制组件的外观repaint():刷新组件的外观

当组件第一次在屏幕显示时,程序会自动调用paint()方法来绘制组件

在以下情况下paint()会被调用:

窗口最小化。再最大化串口的大小发生变化repaint()方法被调用 1.3 Graphics类 画直线 drawLine(int x1,int y1,int x2,int y2)画矩形边框 drawRect(int x, int y, int width, int height)画椭圆边框 drawOval(int x, int y, int width, int height)填充矩形 fillRect(int x, int y, int width, int height)填充椭圆 fillOval(int x, int y, int width, int height)画图片drawlmage(Image img, int x, int y, …)画字符串drawString(String str, int x, int y)设置画笔的字体setFont(Font font)设置画笔的颜色setColor(Color c) 2 Java事件处理机制 2.1 问题

小球受键盘控制上下左右移动

public class BallMove extends JFrame{ MyPanel mp = null; public static void main(String[] args) { new BallMove(); } public BallMove() { mp = new MyPanel(); this.add(mp); this.setSize(400, 300); this.addKeyListener(mp);//JFrame对象可以监听到mp面板上发生的键盘事件 this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); this.setVisible(true); } } //面板 //KeyListener监听器可以监听键盘事件 class MyPanel extends JPanel implements KeyListener { //为了让小球移动,将小球坐标设为变量 int x = 10; int y = 10; @Override public void paint(Graphics g) { super.paint(g); g.fillOval(x, y, 20, 20); } @Override public void keyTyped(KeyEvent e) {//监听字符输出时,触发 } @Override public void keyPressed(KeyEvent e) {//监听某个键按下时,触发 // System.out.println((char)e.getKeyCode() + "被按下"); //根据按下不同的按键,处理小球的移动 if (e.getKeyCode() == KeyEvent.VK_DOWN) {//KeyEvent.VK_DOWN:方向键下键 if ((y+=5) >= 240) y = 0; } else if (e.getKeyCode() == KeyEvent.VK_UP) { if ((y-=5) if ((x-=5)


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3