一 、Component组件类中有一个public void paint( Graphics g)绘画方法,只要用户自定义的类继承了此组件类或其子类并重写了paint()方法,当用户自定义的类被实例化后,此时java运行环境就会开启一个新线程来自动调用并执行用户自定义类中的paint()方法,从而实现用户可以在重写paint()方法的组件(容器)类的对象上绘制各种图形图像。其绘制图形的一般步骤如下:
①用户自定义一个类并继承Component组件类的子类如:JPanel、Canvas类等
②在用户自定义的容器组件类中重写paint(Grapics g)方法后用户就可以在其方法内使用Grapics类或其子类Grapics2D的形参g对象,在用户自定义的类组件上绘制各种图形图像。
③在主程序中创建主窗口和用户自定义组件容器类的实例后,将其实例组件添加到主窗口中,java虚拟机便可以在用户自定义的组件上绘制各种图形。
注意:在使用Graphics类或其子类的对象绘制图形时,需要先创建出图形对象然后Graphics2D类的对象在调用draw(图形对象)或fill(图形对象)来绘制或填充图形。
二、组件都是矩形形状并都有一个默认的坐标系,其左上角为坐标原点(0,0),类似于数学坐标系的第四象限但x和y轴的值都是正值单位为像素点。若一个值为负值则此负符号一般表示逆向。
三、绘制基本图形可以使用java.awt.geom几何包中的各种图形类中的内部静态类。其内部静态类的实例可以赋值给其所属的外嵌类的对象如:
四、使用AffineTransfrom类可以实现对图形的移动、收缩、旋转操作。其一般步骤如下:
①创建AffineTransfrom类的对象。
AffineTransfrom trans=new AffineTransfrom();
②trans对象可以调用以下方法实现对图形的变换。
③把Graphics的对象g_2d设置成具有变换图形功能的画笔。
g_2d.setTransfrom(trans);
④使用Grapics类的对象g_2d绘制变换后的图形。
g_2d.draw(图形对象);
五、两个图形进行布尔运算后可以获得一个更加复杂的图形。假设T1和T2是两个图形:T1与T2得到的是两图形的重叠部分。T1或T2得到的是两图形的合并。T1差T2得到的是T1图形去除包含T2部分后的剩下的T1图形。T1异或T2得到的是两个图形非重叠部分。其一般步骤如下:
①先创建两个图形的Area区域对象
Area t1 = new Area(T1);
Area t2 = new Area(T2);
②将两个图形进行布尔运算获取新的图形如
t1.intersect(t2)------与
t1.add(t2)-------------或
t1.subtract(t2)--------差
t1.exclusiveOr(t2)----异或
③使用Grapics2D类的对象如:g_2d.draw(t1)或g_2d.fill(t1)来绘制或填充两图形运算后得到的新图形区域Area对象。
说明:使用repaint()方法可以重新绘制图形即JVM会在次调用paint()方法来重绘图形。
六、组件上可以显示图像。
方式一:
①首先使用Icon类的子类ImageIcon创建封装图片文件的ImageIcon类的对象如:Icon icon=new ImageIcon(“图片文件”)
②组件调用方法设置自身的图像如: button.setIcon(icon)。
方式二:
Java运行环境提供的有Toolkit类的对象,任何组件都可以使用getTookit()方法获取Tookit对象引用。用户使用Tookit对象的引用可以调用Image getImage(“图像文件名”)方法获取封装有图像的Image类的对象,之后用户就可以在paint()方法中使用Grapics2D类的对象调用其public boolean drawImage(Image img, int x, int y, int width, int height, ImageObserver observer)方法实现在组件上绘制图像;其中observer是加载图像时的图像观察器,只要是实现ImageObserver接口的类创建的对象都可以作为图像观察器,Java中所有组件都实现了该接口故所有组件都可以作为图像观察器。
说明:JFrame主窗口类的对象可以使用setIconImage(Image img)方法设置主窗口左上角的图标图像。
七、用户可以使用javax.sound.sampled包中的Clip类的对象来播放音频,Clip对象是一个守护线程所以在其播放音频时,程序仍然可以做其它的事情。播放音频的步骤如下:
①创建音频文件File类的对象并使用AudioSystem.getAudioInputStream(file)方法获取音频文件字节输入流。如:File file = new File(“音频文件”); AudioInputStream stream = AudioSystem.getAudioInputStream(file)。
②获取Clip对象。如:Clip clip=AudioSystem.getClip()。
③打开音频流。如:clip.open(stream)。
④操作音频。如:
⑤关闭音频流。如:clip.close()。
注意:音频流一旦关闭如果想再次播放音频需要重新使用clip.open()方法打开音频流后在使用clip.start()方法播放音频。
@声明:“山月润无声”博主知识水平有限,以上文章如有不妥之处,欢迎广大IT爱好者指正,小弟定当虚心受教!