首页 > 编程知识 正文

一个用java写的画图程序(java画图板程序)

时间:2023-12-22 19:14:06 阅读:319118 作者:RBRR

本文目录一览:

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

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程序:绘图程序包括画圆,椭圆,线,矩形,自定义。并且可以调图形颜色!

public enum ShapeTypes {

LINE, CIRCLE, RECTANGLE

}

public interface Shape {

void paint(Graphics g);

}

public class Rectangle implements Shape {

// 矩形左上角的坐标

private int x, y;

// 矩形的宽度和高度

private int width, height;

private Color rectangleColor;

public Rectangle() {

super();

}

public Rectangle(int x, int y, int width, int height, Color rectangleColor) {

super();

this.x = x;

this.y = y;

this.width = width;

this.height = height;

this.rectangleColor = rectangleColor;

}

@Override

public void paint(Graphics g) {

g.setColor(rectangleColor);

g.drawRect(x, y, width, height);

}

}

public class Line implements Shape {

// 直线的起始位置

private int x1, y1;

// 直线的终止位置

private int x2, y2;

private Color lineColor;

public Line(int x1, int y1, int x2, int y2, Color lineColor) {

super();

this.x1 = x1;

this.y1 = y1;

this.x2 = x2;

this.y2 = y2;

this.lineColor = lineColor;

}

public Line() {

super();

}

@Override

public void paint(Graphics g) {

g.setColor(lineColor);

g.drawLine(x1, y1, x2, y2);

}

}

public class Circle implements Shape {

// 圆的颜色

private Color circleColor;

// 圆心的坐标

private int x, y;

// 圆的半径

private int radius;

public Circle() {

super();

}

public Circle(int x, int y, int radius, Color circleColor) {

super();

this.circleColor = circleColor;

this.x = x;

this.y = y;

this.radius = radius;

}

@Override

public void paint(Graphics g) {

g.setColor(circleColor);

// 画弧, 当弧的宽度和高度一致且从0~360度时就是原形了

g.drawArc(x, y, radius, radius, 0, 360);

}

}

public class SketchpadPanel extends Canvas implements MouseListener, MouseMotionListener {

private static final long serialVersionUID = -5229161042153132522L;

// 鼠标点击起始坐标和当前坐标

private int beginX = 0, beginY = 0, currentX = 0, currentY = 0;

// 判断鼠标是否被按下

private boolean isMousePressing = false;

// 保存当前的图形, 在撤销和恢复时使用

private final StackShape currentShapes = new StackShape();

// 保存已经删除过的图形

private final StackShape deletedShapes = new StackShape();

private ShapeTypes type;

private Color color;

public SketchpadPanel() {

addMouseListener(this);

addMouseMotionListener(this);

}

/**

 * 撤销方法

 */

public void undo() {

if (currentShapes.size()  0) {

// 从所有保存过的图形中取出最后一个, 放入到已删除的图形中去

Shape shape = currentShapes.pop();

deletedShapes.push(shape);

repaint();

}

}

/**

 * 恢复撤销方法

 */

public void redo() {

if (deletedShapes.size()  0) {

// 从所有删除的图形中取出最后一个, 放入保存的图形中

Shape shape = deletedShapes.pop();

currentShapes.push(shape);

repaint();

}

}

/**

 * 设置命令

 * 

 * @param type

 */

public void setShapeType(ShapeTypes type) {

this.type = type;

}

/**

 * 设置颜色

 * 

 * @param color

 */

public void setColor(Color color) {

this.color = color;

}

public void updete(Graphics g) {

paint(g);

}

/**

 * 绘制画板

 */

@Override

public void paint(Graphics g) {

// 绘制画板

Dimension size = getSize();

int width = size.width;

int height = size.height;

g.setColor(Color.WHITE);

g.fillRect(0, 0, width, height);

// 绘制所有图形

Shape shape = null;

EnumerationShape e = currentShapes.elements();

while (e.hasMoreElements()) {

shape = e.nextElement();

shape.paint(g);

}

// 如果当前鼠标没有释放

if (isMousePressing) {

g.setColor(color);

switch (type) {

// 绘制直线

case LINE:

g.drawLine(beginX, beginY, currentX, currentY);

break;

// 绘制矩形

case RECTANGLE:

if (currentX  beginX) {

if (currentY  beginY) {

// 如果当前位置在起始位置的左上方, 则以鼠标当前位置为矩形的左上角位置

g.drawRect(currentX, currentY, beginX - currentX, beginY - currentY);

} else {

// 如果当前位置在起始位置的左下方, 则以鼠标当前位置的横坐标和起始位置的纵坐标作为矩形的左上角位置

g.drawRect(currentX, beginY, beginX - currentX, currentY - beginY);

}

} else {

if (currentY  beginY) {

// 如果当前位置在起始位置的右上方, 则以鼠标起始位置的很坐标和当前位置的纵坐标作为矩形的左上角位置

g.drawRect(beginX, currentY, currentX - beginX, beginY - currentY);

} else {

// 如果当前位置在起始位置的右下方, 则已起始位置作为矩形的左上叫位置

g.drawRect(beginX, beginY, currentX - beginX, currentY - beginY);

}

}

break;

// 绘制圆形

case CIRCLE:

// 半径为a*a + b*b的平方根

int radius = (int) Math

.sqrt((beginX - currentX) * (beginX - currentX) + (beginY - currentY) * (beginY - currentY));

g.drawArc(beginX - radius / 2, beginY - radius / 2, radius, radius, 0, 360);

break;

}

}

}

@Override

public void mouseClicked(MouseEvent e) {

}

@Override

public void mouseEntered(MouseEvent e) {

}

@Override

public void mouseExited(MouseEvent e) {

}

/**

 * 当鼠标按下的时候获得起始坐标

 */

@Override

public void mousePressed(MouseEvent e) {

beginX = e.getX();

beginY = e.getY();

isMousePressing = true;

}

/**

 * 当鼠标释放时获得当前坐标

 */

@Override

public void mouseReleased(MouseEvent e) {

currentX = e.getX();

currentY = e.getY();

isMousePressing = false;

// 当释放鼠标时, 将绘制的图形保存到shapes中

switch (type) {

// 绘制直线

case LINE:

Line line = new Line(beginX, beginY, currentX, currentY, color);

currentShapes.push(line);

break;

// 绘制圆形

case CIRCLE:

// 半径为a*a + b*b的平方根

int radius = (int) Math

.sqrt((beginX - currentX) * (beginX - currentX) + (beginY - currentY) * (beginY - currentY));

Circle circle = new Circle(beginX - radius / 2, beginY - radius / 2, radius, color);

currentShapes.push(circle);

break;

// 绘制矩形

case RECTANGLE:

Rectangle rectangle = null;

if (currentX  beginX) {

if (currentY  beginY) {

rectangle = new Rectangle(currentX, currentY, beginX - currentX, beginY - currentY, color);

} else {

rectangle = new Rectangle(currentX, beginY, beginX - currentX, currentY - beginY, color);

}

} else {

if (currentY  beginY) {

rectangle = new Rectangle(beginX, currentY, currentX - beginX, beginY - currentY, color);

} else {

rectangle = new Rectangle(beginX, beginY, currentX - beginX, currentY - beginY, color);

}

}

currentShapes.push(rectangle);

break;

}

repaint();

}

@Override

public void mouseDragged(MouseEvent e) {

currentX = e.getX();

currentY = e.getY();

this.repaint();

}

@Override

public void mouseMoved(MouseEvent e) {

}

}

public class SketchpadFrame extends JFrame {

private static final long serialVersionUID = -7080053971741609904L;

private final JPanel commandPanel = new JPanel(); // 存放命令的面板

private final JPanel colorPanel = new JPanel(); // 存放颜色的面板

private final JPanel mainPanel = new JPanel(); // 主面板

private final JButton redButton = new JButton("红色");

private final JButton blueButton = new JButton("蓝色");

private final JButton greenButton = new JButton("绿色");

private final JButton lineButton = new JButton("直线");

private final JButton circleButton = new JButton("圆");

private final JButton rectangleButton = new JButton("矩形");

private final JButton undoButton = new JButton("撤销");

private final JButton redoButton = new JButton("恢复撤销");

private final JButton exitButton = new JButton("退出");

SketchpadPanel sketchPanel = new SketchpadPanel();

private void initFrame() {

commandPanel.setLayout(new FlowLayout());

commandPanel.add(lineButton);

commandPanel.add(circleButton);

commandPanel.add(rectangleButton);

commandPanel.add(undoButton);

commandPanel.add(redoButton);

commandPanel.add(exitButton);

colorPanel.setLayout(new FlowLayout());

colorPanel.add(redButton);

colorPanel.add(blueButton);

colorPanel.add(greenButton);

mainPanel.setLayout(new BorderLayout());

mainPanel.add(commandPanel, BorderLayout.NORTH);

mainPanel.add(colorPanel, BorderLayout.CENTER);

getContentPane().add("South", mainPanel);

getContentPane().add("Center", sketchPanel);

// 初始化设置:颜色和命令

lineButton.setForeground(Color.RED);

sketchPanel.setColor(Color.RED);

redButton.setForeground(Color.RED);

sketchPanel.setShapeType(ShapeTypes.LINE);

}

private void initListener() {

redButton.addActionListener(new ActionListener() {

@Override

public void actionPerformed(ActionEvent e) {

redAction(e);

}

});

blueButton.addActionListener(new ActionListener() {

@Override

public void actionPerformed(ActionEvent e) {

blueAction(e);

}

});

greenButton.addActionListener(new ActionListener() {

@Override

public void actionPerformed(ActionEvent e) {

greenAction(e);

}

});

undoButton.addActionListener(new ActionListener() {

@Override

public void actionPerformed(ActionEvent e) {

undoAction(e);

}

});

redoButton.addActionListener(new ActionListener() {

@Override

public void actionPerformed(ActionEvent e) {

redoAction(e);

}

});

exitButton.addActionListener(new ActionListener() {

@Override

public void actionPerformed(ActionEvent e) {

exitAction(e);

}

});

lineButton.addActionListener(new ActionListener() {

@Override

public void actionPerformed(ActionEvent e) {

lineAction(e);

}

});

circleButton.addActionListener(new ActionListener() {

@Override

public void actionPerformed(ActionEvent e) {

circleAction(e);

}

});

rectangleButton.addActionListener(new ActionListener() {

@Override

public void actionPerformed(ActionEvent e) {

rectangleAction(e);

}

});

}

public SketchpadFrame() {

initFrame();

initListener();

this.setSize(500, 600);

setLocationByPlatform(true);

setResizable(true);

}

/* ********************处理事件********************* */

private void undoAction(ActionEvent e) {

sketchPanel.undo();

}

private void redoAction(ActionEvent e) {

sketchPanel.redo();

}

private void exitAction(ActionEvent e) {

System.exit(0);

}

private void lineAction(ActionEvent e) {

// 选中按钮为红色, 其余为黑色

lineButton.setForeground(Color.RED);

circleButton.setForeground(Color.BLACK);

rectangleButton.setForeground(Color.BLACK);

sketchPanel.setShapeType(ShapeTypes.LINE);

}

private void circleAction(ActionEvent e) {

circleButton.setForeground(Color.RED);

lineButton.setForeground(Color.BLACK);

rectangleButton.setForeground(Color.BLACK);

sketchPanel.setShapeType(ShapeTypes.CIRCLE);

}

private void rectangleAction(ActionEvent e) {

rectangleButton.setForeground(Color.RED);

lineButton.setForeground(Color.BLACK);

circleButton.setForeground(Color.BLACK);

sketchPanel.setShapeType(ShapeTypes.RECTANGLE);

}

private void redAction(ActionEvent e) {

redButton.setForeground(Color.RED);

blueButton.setForeground(Color.BLACK);

greenButton.setForeground(Color.BLACK);

sketchPanel.setColor(Color.RED);

}

private void blueAction(ActionEvent e) {

blueButton.setForeground(Color.RED);

redButton.setForeground(Color.BLACK);

greenButton.setForeground(Color.BLACK);

sketchPanel.setColor(Color.BLUE);

}

private void greenAction(ActionEvent e) {

greenButton.setForeground(Color.RED);

redButton.setForeground(Color.BLACK);

blueButton.setForeground(Color.BLACK);

sketchPanel.setColor(Color.GREEN);

}

}

/**

 * 

 * @author 不落的太阳(Sean Yang)

 * @version 1.0

 * @since JDK 1.8

 * 

 */

public class SketchpadMain {

/**

 * 测试方法

 * 

 * @param args命令行参数

 */

public static void main(String[] args) {

EventQueue.invokeLater(new Runnable() {

@Override

public void run() {

JFrame frame = new SketchpadFrame();

frame.setVisible(true);

frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

}

});

}

}

java 绘图程序

我基于你原来画图的方法,添加了事件触发的命令b[j].setActionCommand("b" + j);否则你不能在事件响应处理的方法中使用e.getActionCommand(),而且字符串的比较用equals方法比较好。现在可以运行了,你可以看一下:

import java.applet.Applet;

import java.awt.*;

import java.awt.event.ActionEvent;

import java.awt.event.ActionListener;

public class drawing extends Applet implements ActionListener {

Button b[] = new Button[5];

String fontname = "仿宋_GB2312";

int style = Font.PLAIN;

int size = 24;

int index = 0;

Font myfont;

public void init() {

setSize(700,700);

myfont = new Font(fontname, style, size);

b[0] = new Button("扇形");

b[1] = new Button("圆形");

b[2] = new Button("三角形");

b[3] = new Button("长方形");

b[4] = new Button("椭圆形");

for (int j = 0; j b.length; j++) {

b[j].setBounds(10, 10, 50, 20);

b[j].addActionListener(this);

b[j].setActionCommand("b" + j);

add(b[j]);

}

}

public void actionPerformed(ActionEvent e) {

if (e.getActionCommand().equals("b0")) {

index = 0;

repaint();

}

if (e.getActionCommand().equals("b1")) {

index = 1;

repaint();

}

if (e.getActionCommand().equals("b2")) {

index = 2;

repaint();

}

if (e.getActionCommand().equals("b3")) {

index = 3;

repaint();

}

if (e.getActionCommand().equals("b4")) {

index = 4;

repaint();

}

}

public void paint(Graphics g) {

switch (index) {

case 0:

g.fillArc(0, 60, 80, 60, 30, 120);

break;

case 1:

g.drawOval( 300, 50, 60, 60);

break;

case 2:

Polygon filledPolygon = new Polygon();

filledPolygon.addPoint(380, 50);

filledPolygon.addPoint(380, 110);

filledPolygon.addPoint(450, 90);

g.drawPolygon(filledPolygon);

break;

case 3:

g.drawRect( 200, 50, 80, 60);

break;

case 4:

g.drawOval(100, 50, 80, 60);

break;

default:

g.fillArc(0, 60, 80, 60, 30, 120);

break;

}

}

/*

* public void paint(Graphics g) { g.fillArc( 0, 60, 80, 60, 30, 120);

* //绘制扇形 g.drawOval( 100, 50, 80, 60); g.drawRect( 200, 50, 80, 60);

* g.drawOval( 300, 50, 60, 60); Polygon filledPolygon=new Polygon();

* filledPolygon.addPoint(380,50); filledPolygon.addPoint(380,110);

* filledPolygon.addPoint(450,90); g.drawPolygon(filledPolygon); }

*/

}

用java编写一个简单的画图程序。不用复杂

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一个简单的画图程序

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

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=0;i=row;i++){

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=0;j=cul;j++){

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

x+=lieju;

}

x=csx;

for(int z=0;zcul;z++){

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

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

if(z3)

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=0;v=9;v++){

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=0;n9;n++){

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=0;i=1;i++){

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

yy+=hangju;

}

yy=hangju*row+y;

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

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

if(j0){

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()做了一个记账凭证。

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

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

请高手帮忙完善简单的java画图程序

你的这个程序是Applet

对于applet应用程序,可以用下面的方法运行:

1、javac Paint.java后生成Paint.class

2、在跟Paint.class同一级的目录下新建一个文本文件,并输入:

applet code="Paint.class"

width=320 height=180

/applet

3、保存并将文件名改为Paint.html (这个html文件的名字任意)

4、在cmd中输入appletviewer Paint.html便可以看见你的applet了

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。