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

Python014

如何用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()//重绘组件

}

}

}

下面是我以前做的小程序,希望能给你点帮助!

package menu

import java.awt.*

import java.awt.event.*

import javax.swing.*

public class DaYin extends JFrame implements ActionListener{

public DaYin() {

Container c=this.getContentPane()

c.setLayout(new BorderLayout())

JMenuBar jmb=new JMenuBar()

JMenu jm=null

jm=new JMenu("文件")

jmb.add(jm)

jm=new JMenu("编辑")

jmb.add(jm)

jm=new JMenu("打印")

JMenuItem jmi=new JMenuItem("打印预览")

jmi.addActionListener(this)

jm.add(jmi)

jmb.add(jm)

jm=new JMenu("帮助")

jmb.add(jm)

this.setJMenuBar(jmb)

this.setSize(1024,768)

this.setVisible(true)

this.addWindowListener(new WindowAdapter(){

public void windowClosing(WindowEvent e){

System.exit(0)

}

})

}

public static void main(String[] args) {

new DaYin()

}

public void update(Graphics g){

g.setColor(Color.black)

String title[]={"摘要","科目","子目或户名","借方金额","贷方金额"}

String danwei[]={"千","百","十","万","千","百","十","元","角","分"}

int csx=200//打印x的初始坐标

int csy=200//打印y的初始坐标

int x=csx

int y=csy

int a=x+20//打印字体x的初始坐标

int b=y+20//打印字体y的初始坐标

int row=7//一共打印出几条横线

int cul=5//一共打印出几条竖线

int hangju=30//线与线之间的纵向间距

int lieju=100//线与线之间的横向间距

int yy=hangju*row+y

int c=yy+20

g.setFont(new Font("行楷",Font.TYPE1_FONT,24))

g.drawString("记 账 凭 证", x+160, y-40)//打印出记账凭证这几个字

g.drawLine(x+100, y-30, x+340, y-30)//打印出记账凭证下面的那条线

g.setFont(new Font("行楷",Font.TYPE1_FONT,13))

g.drawString("年 月 日 第_______号", x+260, y-10)

//g.drawLine(x+430, y-10, x+470, y-10)

for(int i=0i<=rowi++){

g.drawLine(x, y, cul*lieju+x+25, y)//此循环用于画出表格的行

if(i==0)

y+=hangju*2

else

y+=hangju

}

y=csy

g.drawLine(x+lieju*3, y+hangju, cul*lieju+x, y+hangju)//打印出第一行半的横线

for(int j=0j<=culj++){

g.drawLine(x, y, x, row*hangju+y)//此循环用于画出表格的列

x+=lieju

}

x=csx

for(int z=0z<culz++){

g.setColor(Color.red)//设置颜色

g.setFont(new Font("",Font.TYPE1_FONT,13))//设置表头字体

if(z<3)

g.drawString(title[z], a, b+hangju/2)

else

g.drawString(title[z], a, b)//为表格添加表头

a+=lieju

}//76-89打印出一个表格形状

int xx=lieju*3+x+10

for(int v=0v<=9v++){

g.drawLine(xx, y+hangju, xx, row*hangju+y+hangju)//此循环用于画出表格的列

g.setFont(new Font("",Font.TYPE1_FONT,11))

g.drawString(danwei[v], xx-10, y+hangju+20)//为表格添加表头

if(v%2==0)

g.setColor(Color.red)//设置颜色

else

g.setColor(Color.BLUE)//设置颜色

xx+=10

}

for(int n=0n<9n++){

g.drawLine(xx, y+hangju, xx, row*hangju+y+hangju)//此循环用于画出表格的列

g.drawString(danwei[n],xx-10, y+hangju+20)//为表格添加表头

if(n%2==0)

g.setColor(Color.red)//设置颜色

else

g.setColor(Color.BLUE)//设置颜色

xx+=10

}

g.drawString(danwei[9],xx-10, y+hangju+20)

g.setColor(Color.black)//设置颜色

for(int i=0i<=1i++){

g.drawLine(x,yy , cul*lieju+x, yy)//此循环用于画出表格的行

yy+=hangju

}

yy=hangju*row+y

for(int j=0j<=3j++){

g.drawLine(x, yy, x, (row+1)*hangju+y)//此循环用于画出表格的列

if(j>0){

x+=lieju

}else{

x+=lieju*3

}

}//112-128打印出表格的最后一行单元格

x=csx

g.setFont(new Font("",Font.TYPE1_FONT,13))

g.drawString("合 计",x+60, c)

g.drawString("会计主管 记账 出纳 审核 制证", x+30, yy+50)

g.drawLine(cul*lieju+x+25, y, cul*lieju+x+25, (row+1)*hangju+y)//打印出最后一列

g.drawString("记",cul*lieju+x+6, y+15)

g.drawString("账", cul*lieju+x+6, y+35)

g.drawString("√", cul*lieju+x+6, y+55)//134-136为最后一列写入字体

g.drawString("附",cul*lieju+x+35, y+75)

g.drawString("件", cul*lieju+x+35, y+95)

g.drawString("张", cul*lieju+x+35, y+175)//134-136为最后一列后写入字体

}

public void actionPerformed(ActionEvent e) {

// TODO Auto-generated method stub

if(e.getActionCommand().equals("打印预览")){

this.repaint()

}

}

}

使用drawLine()做了一个记账凭证。

执行点击"打印"子菜单"打印预览"就可显示出我们所画的"记账凭证表"

希望这个小程序能够给你点灵感