java 涂鸦画板

java 涂鸦画板,第1张

 

import java.awt.BasicStroke

import java.awt.BorderLayout

import java.awt.Color

import java.awt.FlowLayout

import java.awt.Frame

import java.awt.Graphics

import java.awt.Graphics2D

import java.awt.Label

import java.awt.Panel

import java.awt.event.MouseAdapter

import java.awt.event.MouseEvent

import java.awt.event.MouseMotionListener

import java.awt.event.WindowAdapter

import java.awt.event.WindowEvent

public class MouseDrawPanel extends Frame

{

private static final long serialVersionUID = 1L

MouseEvent e = null

int startX = -1

int 迹没startY = -1

int endX = -1

int endY = -1

boolean left = false

public MouseDrawPanel 闭消( String title )

{

setTitle (title)

setLayout (new BorderLayout ())

setResizable (false)

setSize (500, 400)

setLocationRelativeTo (null)

addWindowListener (new WindowAdapter ()

{

@Override

public void windowClosing ( WindowEvent e )

{

System.exit (0)

}

})

}

@Override

public void paintComponents ( Graphics g )

{

float lineWidth = 8.0f

( (Graphics2D) g ).setStroke (new BasicStroke (lineWidth))

g.setColor (Color.YELLOW)

g.drawLine (startX, startY, endX, endY)

g.dispose ()

}

public static void main ( 轿州知String[] args )

{

final MouseDrawPanel mdp = new MouseDrawPanel ("Use Mouse Draw")

Panel panel = new Panel ()

panel.setLayout (new FlowLayout (FlowLayout.LEFT))

Label startL = new Label ("start: ")

Label endL = new Label ("end: ")

final Label nowL = new Label ("now: ")

final Label startR = new Label ("000,000")

final Label endR = new Label ("000,000")

final Label nowN = new Label ("000,000")

panel.add (startL)

panel.add (startR)

panel.add (endL)

panel.add (endR)

panel.add (nowL)

panel.add (nowN)

mdp.add (panel, "South")

mdp.addMouseMotionListener (new MouseMotionListener ()

{

@Override

public void mouseMoved ( MouseEvent e )

{

if (mdp.left)

{

nowN.setText (e.getX () + " , " + e.getY ())

}

}

@Override

public void mouseDragged ( MouseEvent e )

{

if (mdp.left)

{

mdp.endX = e.getX ()

mdp.endY = e.getY ()

mdp.paintComponents (mdp.getGraphics ())

mdp.startX = mdp.endX

mdp.startY = mdp.endY

endR.setText (mdp.endX + " , " + mdp.endY)

}

}

})

mdp.addMouseListener (new MouseAdapter ()

{

@Override

public void mousePressed ( MouseEvent e )

{

if (e.getButton () == MouseEvent.BUTTON1)

{

mdp.startX = e.getX ()

mdp.startY = e.getY ()

startR.setText (mdp.startX + " , " + mdp.startY)

mdp.left = true

}

else

{

mdp.left = false

}

}

@Override

public void mouseReleased ( MouseEvent e )

{

if (mdp.left)

{

endR.setText (e.getX () + " , " + e.getY ())

}

}

})

mdp.setVisible (true)

}

}

import java.applet.* 

import java.awt.* 

import java.awt.event.* 

import java.util.* 

import javax.swing.* 

import java.awt.geom.* 

import java.io.* 

import java.sql.Connection

class Point implements Serializable 

int x,y 

Color col 

int tool 

int boarder 

Point(int x, int y, Color col, int tool, int boarder) 

this.x = x 

this.y 或肆= y 

this.col = col 

this.tool = tool 

this.boarder = boarder 

class paintboard extends Frame implements ActionListener,MouseMotionListener,MouseListener,ItemListener 

int x = -1, y = -1 

int con = 猜如1//画笔大小 

int Econ = 5//橡皮大小 

int toolFlag = 0//toolFlag:工具标记 

//toolFlag工具对应表: 

//(0--画笔);(1--橡皮);(2--清除); 

//(3--直线);(4--圆);(5--矩形); 

Color c = new Color(0,0,0) //画笔颜色 

BasicStroke size = new BasicStroke(con,BasicStroke.CAP_BUTT,BasicStroke.JOIN_BEVEL)//画笔粗细 

Point cutflag = new Point(-1, -1, c, 6, con)//截断标志 

Vector paintInfo = null//点信息向量组 

int n = 1 

FileInputStream picIn = null 

FileOutputStream picOut = null 

ObjectInputStream VIn = null 

ObjectOutputStream VOut = null 

// *工具面板--画笔,直线,圆,矩形,多边形,橡皮,清除*/ 

Panel toolPanel 

Button eraser, drLine,drCircle,drRect 

Button clear ,pen 

Choice ColChoice,SizeChoice,EraserChoice 

Button colchooser 

Label 颜色,大小B,大小E 

//保存功能 

Button openPic,savePic 

FileDialog openPicture,savePicture 

paintboard(String s) 

super(s) 

addMouseMotionListener(this) 

addMouseListener(this) 

paintInfo 穗团启= new Vector() 

/*各工具按钮及选择项*/ 

//颜色选择 

ColChoice = new Choice() 

ColChoice.add("black") 

ColChoice.add("red") 

ColChoice.add("blue") 

ColChoice.add("green") 

ColChoice.addItemListener(this) 

//画笔大小选择 

SizeChoice = new Choice() 

SizeChoice.add("1") 

SizeChoice.add("3") 

SizeChoice.add("5") 

SizeChoice.add("7") 

SizeChoice.add("9") 

SizeChoice.addItemListener(this) 

//橡皮大小选择 

EraserChoice = new Choice() 

EraserChoice.add("5") 

EraserChoice.add("9") 

EraserChoice.add("13") 

EraserChoice.add("17") 

EraserChoice.addItemListener(this) 

//////////////////////////////////////////////////// 

toolPanel = new Panel() 

clear = new Button("清除") 

eraser = new Button("橡皮") 

pen = new Button("画笔") 

drLine = new Button("画直线") 

drCircle = new Button("画圆形") 

drRect = new Button("画矩形") 

openPic = new Button("打开图画") 

savePic = new Button("保存图画") 

colchooser = new Button("显示调色板") 

//各组件事件监听 

clear.addActionListener(this) 

eraser.addActionListener(this) 

pen.addActionListener(this) 

drLine.addActionListener(this) 

drCircle.addActionListener(this) 

drRect.addActionListener(this) 

openPic.addActionListener(this) 

savePic.addActionListener(this) 

colchooser.addActionListener(this) 

颜色 = new Label("画笔颜色",Label.CENTER) 

大小B = new Label("画笔大小",Label.CENTER) 

大小E = new Label("橡皮大小",Label.CENTER) 

//面板添加组件 

toolPanel.add(openPic) 

toolPanel.add(savePic) 

toolPanel.add(pen) 

toolPanel.add(drLine) 

toolPanel.add(drCircle) 

toolPanel.add(drRect) 

toolPanel.add(颜色) toolPanel.add(ColChoice) 

toolPanel.add(大小B) toolPanel.add(SizeChoice) 

toolPanel.add(colchooser) 

toolPanel.add(eraser) 

toolPanel.add(大小E) toolPanel.add(EraserChoice) 

toolPanel.add(clear) 

//工具面板到APPLET面板 

add(toolPanel,BorderLayout.NORTH) 

setBounds(60,60,900,600) setVisible(true) 

validate() 

//dialog for save and load 

openPicture = new FileDialog(this,"打开图画",FileDialog.LOAD) 

openPicture.setVisible(false) 

savePicture = new FileDialog(this,"保存图画",FileDialog.SAVE) 

savePicture.setVisible(false) 

openPicture.addWindowListener(new WindowAdapter() 

public void windowClosing(WindowEvent e) 

{ openPicture.setVisible(false) } 

}) 

savePicture.addWindowListener(new WindowAdapter() 

            @Override

public void windowClosing(WindowEvent e) 

{ savePicture.setVisible(false) } 

}) 

addWindowListener(new WindowAdapter() 

public void windowClosing(WindowEvent e) 

{ System.exit(0)} 

}) 

public void paint(Graphics g) 

Graphics2D g2d = (Graphics2D)g 

Point p1,p2 

n = paintInfo.size() 

if(toolFlag==2) 

g.clearRect(0,0,getSize().width,getSize().height)//清除 

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

p1 = (Point)paintInfo.elementAt(i) 

p2 = (Point)paintInfo.elementAt(i+1) 

size = new BasicStroke(p1.boarder,BasicStroke.CAP_BUTT,BasicStroke.JOIN_BEVEL) 

g2d.setColor(p1.col) 

g2d.setStroke(size) 

if(p1.tool==p2.tool) 

switch(p1.tool) 

case 0://画笔 

Line2D line1 = new Line2D.Double(p1.x, p1.y, p2.x, p2.y) 

g2d.draw(line1) 

break 

case 1://橡皮 

g.clearRect(p1.x, p1.y, p1.boarder, p1.boarder) 

break 

case 3://画直线 

Line2D line2 = new Line2D.Double(p1.x, p1.y, p2.x, p2.y) 

g2d.draw(line2) 

break 

case 4://画圆 

Ellipse2D ellipse = new Ellipse2D.Double(p1.x, p1.y, Math.abs(p2.x-p1.x) , Math.abs(p2.y-p1.y)) 

g2d.draw(ellipse) 

break 

case 5://画矩形 

Rectangle2D rect = new Rectangle2D.Double(p1.x, p1.y, Math.abs(p2.x-p1.x) , Math.abs(p2.y-p1.y)) 

g2d.draw(rect) 

break 

case 6://截断,跳过 

i=i+1 

break 

default : 

}//end switch 

}//end if 

}//end for 

public void itemStateChanged(ItemEvent e) 

if(e.getSource()==ColChoice)//预选颜色 

String name = ColChoice.getSelectedItem() 

            switch (name) {

                case "black":

                    c = new Color(0,0,0)

                    break

                case "red":

                    c = new Color(255,0,0)

                    break

                case "green":

                    c = new Color(0,255,0)

                    break

                case "blue":

                    c = new Color(0,0,255)

                    break

            }

else if(e.getSource()==SizeChoice)//画笔大小 

String selected = SizeChoice.getSelectedItem() 

            switch (selected) {

                case "1":

                    con = 1

                    size = new BasicStroke(con,BasicStroke.CAP_BUTT,BasicStroke.JOIN_BEVEL)

                    break

                case "3":

                    con = 3

                    size = new BasicStroke(con,BasicStroke.CAP_BUTT,BasicStroke.JOIN_BEVEL)

                    break

                case "5":

                    con = 5

                    size = new BasicStroke(con,BasicStroke.CAP_BUTT,BasicStroke.JOIN_BEVEL)

                    break

                case "7":

                    con = 7

                    size = new BasicStroke(con,BasicStroke.CAP_BUTT,BasicStroke.JOIN_BEVEL)

                    break

                case "9":

                    con = 9

                    size = new BasicStroke(con,BasicStroke.CAP_BUTT,BasicStroke.JOIN_BEVEL)

                    break

            }

else if(e.getSource()==EraserChoice)//橡皮大小 

String Esize = EraserChoice.getSelectedItem() 

if(Esize=="5") 

{ Econ = 5*2 } 

else if(Esize=="9") 

{ Econ = 9*2 } 

else if(Esize=="13") 

{ Econ = 13*2 } 

else if(Esize=="17") 

{ Econ = 17*3 } 

public void mouseDragged(MouseEvent e) 

Point p1  

switch(toolFlag){ 

case 0://画笔 

x = (int)e.getX() 

y = (int)e.getY() 

p1 = new Point(x, y, c, toolFlag, con) 

paintInfo.addElement(p1) 

repaint() 

break 

case 1://橡皮 

x = (int)e.getX() 

y = (int)e.getY() 

p1 = new Point(x, y, null, toolFlag, Econ) 

paintInfo.addElement(p1) 

repaint() 

break 

default : 

public void mouseMoved(MouseEvent e) {} 

public void update(Graphics g) 

paint(g) 

public void mousePressed(MouseEvent e) 

Point p2 

switch(toolFlag){ 

case 3://直线 

x = (int)e.getX() 

y = (int)e.getY() 

p2 = new Point(x, y, c, toolFlag, con) 

paintInfo.addElement(p2) 

break 

case 4: //圆 

x = (int)e.getX() 

y = (int)e.getY() 

p2 = new Point(x, y, c, toolFlag, con) 

paintInfo.addElement(p2) 

break 

case 5: //矩形 

x = (int)e.getX() 

y = (int)e.getY() 

p2 = new Point(x, y, c, toolFlag, con) 

paintInfo.addElement(p2) 

break 

default : 

public void mouseReleased(MouseEvent e) 

Point p3 

switch(toolFlag){ 

case 0://画笔 

paintInfo.addElement(cutflag) 

break 

case 1: //eraser 

paintInfo.addElement(cutflag) 

break 

case 3://直线 

x = (int)e.getX() 

y = (int)e.getY() 

p3 = new Point(x, y, c, toolFlag, con) 

paintInfo.addElement(p3) 

paintInfo.addElement(cutflag) 

repaint() 

break 

case 4: //圆 

x = (int)e.getX() 

y = (int)e.getY() 

p3 = new Point(x, y, c, toolFlag, con) 

paintInfo.addElement(p3) 

paintInfo.addElement(cutflag) 

repaint() 

break 

case 5: //矩形 

x = (int)e.getX() 

y = (int)e.getY() 

p3 = new Point(x, y, c, toolFlag, con) 

paintInfo.addElement(p3) 

paintInfo.addElement(cutflag) 

repaint() 

break 

default: 

public void mouseEntered(MouseEvent e){} 

public void mouseExited(MouseEvent e){} 

public void mouseClicked(MouseEvent e){} 

public void actionPerformed(ActionEvent e) 

if(e.getSource()==pen)//画笔 

{toolFlag = 0} 

if(e.getSource()==eraser)//橡皮 

{toolFlag = 1} 

if(e.getSource()==clear)//清除 

toolFlag = 2 

paintInfo.removeAllElements() 

repaint() 

if(e.getSource()==drLine)//画线 

{toolFlag = 3} 

if(e.getSource()==drCircle)//画圆 

{toolFlag = 4} 

if(e.getSource()==drRect)//画矩形 

{toolFlag = 5} 

if(e.getSource()==colchooser)//调色板 

Color newColor = JColorChooser.showDialog(this,"调色板",c) 

c = newColor 

if(e.getSource()==openPic)//打开图画 

openPicture.setVisible(true) 

if(openPicture.getFile()!=null) 

int tempflag 

tempflag = toolFlag 

toolFlag = 2  

repaint() 

try{ 

paintInfo.removeAllElements() 

File filein = new File(openPicture.getDirectory(),openPicture.getFile()) 

picIn = new FileInputStream(filein) 

VIn = new ObjectInputStream(picIn) 

paintInfo = (Vector)VIn.readObject() 

VIn.close() 

repaint() 

toolFlag = tempflag 

catch(ClassNotFoundException IOe2) 

repaint() 

toolFlag = tempflag 

System.out.println("can not read object") 

catch(IOException IOe) 

repaint() 

toolFlag = tempflag 

System.out.println("can not read file") 

if(e.getSource()==savePic)//保存图画 

savePicture.setVisible(true) 

try{ 

File fileout = new File(savePicture.getDirectory(),savePicture.getFile()) 

picOut = new FileOutputStream(fileout) 

VOut = new ObjectOutputStream(picOut) 

VOut.writeObject(paintInfo) 

VOut.close() 

catch(IOException IOe) 

System.out.println("can not write object") 

}//end paintboard 

public class Pb 

public static void main(String args[]) 

{ new paintboard("画图程序") } 

}

super是代族洞表父类的意思。

super.paint(g)是启穗歼代表调用父类JApplet的paint方法悄冲

在JApplet容器中把g对象画上。

显示出来。


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/yw/12305887.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-24
下一篇 2023-05-24

发表评论

登录后才能评论

评论列表(0条)

保存