如何用Java编写一个绘制图形的小程序?

Python029

如何用Java编写一个绘制图形的小程序?,第1张

import java.awt.*

import java.awt.event.*

import java.awt.geom.*

import javax.swing.*

//不规则图形的绘制

public class IrregularShapeDemo extends JFrame {

GeneralPath gPath= new GeneralPath()//GeneralPath对象实例

Point aPoint

//构造函数

public IrregularShapeDemo() {

super("不规则图形的绘制")//调用父类构造函数

enableEvents(AWTEvent.MOUSE_EVENT_MASK|AWTEvent.MOUSE_MOTION_EVENT_MASK)//允许事件

setSize(300, 200)//设置窗口尺寸

setVisible(true)//设置窗口可视

setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE)//关闭窗口时退出程序

}

public void paint(Graphics g) { //重载窗口组件的paint()方法

Graphics2D g2D = (Graphics2D)g//获取图形环境

g2D.draw(gPath)//绘制路径

}

public static void main(String[] args) {

new IrregularShapeDemo()

}

protected void processMouseEvent(MouseEvent e) { //鼠标事件处理

if(e.getID() == MouseEvent.MOUSE_PRESSED) {

aPoint = e.getPoint()//得到当前鼠标点

gPath = new GeneralPath()//重新实例化GeneralPath对象

gPath.moveTo(aPoint.x,aPoint.y)//设置路径点

}

}

protected void processMouseMotionEvent(MouseEvent e) { //鼠标运动事件处理

if(e.getID() == MouseEvent.MOUSE_DRAGGED) {

aPoint = e.getPoint()//得到当前鼠标点

gPath.lineTo(aPoint.x, aPoint.y)//设置路径

gPath.moveTo(aPoint.x, aPoint.y)

repaint()//重绘组件

}

}

}

JAVA的绘图功能非常丰富,绘图包括字体、颜色、图形,以下我们将分技术专题来讲。

一、关于JAVA的绘图机制。

JAVA中的任何一个图形组件,小到文本框、标签,大到一个FRAME,一个DIALOG,都有一个专门负责显示其界面的函数,这个函数名称是固定的:paint,它的原型为: public void paint(Graphics g) { …… } 每当组件大小、位置、组件内容发生变化时,该函数即负责生成新的图形界面显示。由于该函数可以被子类继承,因此,继承的子类有能力修改该函数。如果子类中没有出现该函数,则表示其行为完全继承自父类。则不管是组件中是否添加了新的内容,是否发生了大小的改变,是否发生了位移,父类都要有一个专门的线程,来负责描绘变化以后的组件界面。 paint函数由父类自动维护,并且如果子类一旦重载该函数,必须自己去维护所有的界面显示。

二、设置画笔颜色

1、颜色常识

任何颜色都是三原色组成(RGB),JAVA中支持224位彩色,即红绿蓝色分量可取值介于0..255之间。下面首先学习一个JAVA中的类Color Color中的常量:

public final static Color black=new Color(0,0,0)

public final static Color blue=new Color(0,0,255)

…..

Color的构造函数:

public Color(int r,int g,int b)

使用举例:如果想构造一个灰色对象,则用下面的句子:

Color gray=new Color(205,205,205)

2、设置画笔颜色语法

g.setColor(color)//color是一个Color对象

每修改一次颜色它影响的就是下面所有的绘图语句,一直影响到再次碰到setColor函数才以新的颜色代替。

3、使用JColorChooser组件选择颜色 JAVA中有一个已经定义好的选色器,通过简单的语法我们就可以将该窗口调出来,从其中选择自己喜欢的颜色。下面的这个例子就是通过颜色选取器选取颜色,并将选择到的颜色做为窗体的背景色。

(1)JColorChooser简介 JColorChooser组件的showDialog()方法让用户从弹出的窗口中选择一个颜色,并传给Color对象。其调用语法如下: color=JColorChooser.showDialog(this,”选色”,color)第一个参数指定调用选色器的父窗体,第二个参数指定选色器窗口标题,最后一个为接收颜色的颜色对象。

4、如何将一个图形(以文件存在,如JPG或者GIF)画到窗体的画布中其实放置图形到画板中实际就是调用了画板的drawImage函数。其大致思路如下:首先获取一个ImageIcon对象,这个对象将会从指定的文件中读取相关图象信息,它支持GIF和JPG、BMP等基本图象格式。语法如下:

ImageIcon icon=new ImageIcon(GraExp5.class.getResource("1.gif"))

获取到图象的图标以后,就可以从图标中获取到绘制到画板上的实际需要的图象:

Image img=icon.getImage()

有了这个图象对象,我们就可以用画板的drawImage函数画图了。

g.drawImage(img,0,0,null)

01package com.zuidaima.swing

02

03import java.awt.Color

04import java.awt.Graphics

05import java.awt.Image

06import java.awt.Toolkit

07

08import javax.swing.JFrame

09

10@SuppressWarnings("serial")

11class Cardioid extends JFrame {

12// 定义窗口大小

13private static final int WIDTH = 480

14private static final int HEIGHT = 600

15

16// 获取屏幕大小

17private static int WINDOW_WIDTH = Toolkit.getDefaultToolkit()

18.getScreenSize().width

19private static int WINDOW_HEIGHT = Toolkit.getDefaultToolkit()

20.getScreenSize().height

21

22// 构造函数

23public Cardioid() {

24// 设置窗口标题

25super("❤形线")

26// 设置背景色

27this.setBackground(Color.BLACK)

28// 设置窗口位置

29this.setLocation((WINDOW_WIDTH - WIDTH) / 2,

30(WINDOW_HEIGHT - HEIGHT) / 2)

31// 设置窗口大小

32this.setSize(WIDTH, HEIGHT)

33// 设置窗口布局

34this.setLayout(getLayout())

35// 设置窗口可见

36this.setVisible(true)

37// 设置窗口默认关闭方式

38this.setDefaultCloseOperation(DISPOSE_ON_CLOSE)

39}

40

41public void paint(Graphics g) {

42

43double x, y, r// 横纵坐标及半径

44Image image = this.createImage(WIDTH, HEIGHT)

45Graphics pic = image.getGraphics()

46

47// 绘制图形

48for (int i = 0i <100i++) {

49for (int j = 0j <100j++) {

50r = Math.PI / 45 + Math.PI / 45 * i

51* (1 - Math.sin(Math.PI / 45 * j)) * 18

52

53x = r * Math.cos(Math.PI / 45 * j) * Math.sin(Math.PI / 45 * i)

54+ WIDTH / 2

55

56y = -r * Math.sin(Math.PI / 45 * j) + HEIGHT / 2

57

58pic.setColor(Color.MAGENTA)

59pic.fillOval((int) x, (int) y, 2, 2)

60}

61// 生成图片

62g.drawImage(image, 0, 0, this)

63

64}

65

66}

67

68public static void main(String[] args) {

69

70new Cardioid()

71}

72

73}