import java.awt.*
import java.awt.event.*
import java.awt.geom.*
import java.io.*
import java.util.*
import javax.swing.*
//the point
//impress the info of one point,the x and y
class OnePoint implements Serializable
{
int x
int y
int tool
Color c
int border
public OnePoint(int x,int y,int tool,Color cc,int border)
{
this.x=x
this.y=y
this.tool=tool
this.c=cc
this.border=border
}
public static void main(String[] args)
{
DrawingBoard oneBorder=new DrawingBoard()
}
}
class DrawingBoard extends Frame implements MouseListener,ItemListener,ActionListener,MouseMotionListener
{
Button pen,line,ellipse,rect,clear,colorboard,storebutton,openbutton
Choice sizechoice,colorchoice
Label pensize, pencolor
Panel panel
FileDialog storefile, openfile
FileInputStream filein
FileOutputStream fileout
ObjectInputStream objectin
ObjectOutputStream objectout
int mode=0
int flagtool=0
Color flagcolor
int border
BasicStroke size
private Point2D[] p=new Point2D[3]
OnePoint p1,p2
Vector<OnePoint>points=new Vector<OnePoint>()
public DrawingBoard()
{
pen=new Button("画笔姿档")
line=new Button("直迹胡乱线")
ellipse=new Button("做桥圆")
rect=new Button("矩形")
clear=new Button("清除")
colorboard=new Button("调色板")
storebutton=new Button("存储文件")
openbutton=new Button("打开文件")
pensize=new Label("画笔大小")
pencolor=new Label("画笔颜色")
storefile=new FileDialog(this,"存储文件",FileDialog.SAVE)
storefile.setVisible(false)
storefile.addWindowListener(new WindowAdapter(){
public void windowClosing(WindowEvent e){
storefile.setVisible(false)
}
})
openfile=new FileDialog(this,"打开文件",FileDialog.LOAD)
openfile.setVisible(false)
openfile.addWindowListener(new WindowAdapter(){
public void windowClosing(WindowEvent e){
openfile.setVisible(false)
}
})
sizechoice=new Choice()
sizechoice.add("1")
sizechoice.add("2")
sizechoice.add("4")
sizechoice.add("6")
sizechoice.add("8")
sizechoice.addItemListener(this)
colorchoice=new Choice()
colorchoice.add("black")
colorchoice.add("red")
colorchoice.add("blue")
colorchoice.add("green")
colorchoice.addItemListener(this)
pen.addActionListener(this)
line.addActionListener(this)
ellipse.addActionListener(this)
rect.addActionListener(this)
clear.addActionListener(this)
colorboard.addActionListener(this)
storebutton.addActionListener(this)
openbutton.addActionListener(this)
panel=new Panel()
panel.add(storebutton)
panel.add(openbutton)
panel.add(pen)
panel.add(line)
panel.add(ellipse)
panel.add(rect)
panel.add(clear)
panel.add(sizechoice)
panel.add(pensize)
panel.add(colorchoice)
panel.add(pencolor)
panel.add(colorboard)
add(panel,BorderLayout.NORTH)
setBounds(100,100,700,600)
setVisible(true)
addWindowListener(new WindowAdapter(){
public void windowClosing(WindowEvent e){
System.exit(0)
}
})
/**
* 添加鼠标事件的监听器,否则,鼠标的移动和点击都将无法识别!
* */
addMouseListener(this)
addMouseMotionListener(this)
}
public void paint(Graphics g)
{
Graphics2D g2d=(Graphics2D)g
if(flagtool==2)
{ //qing chu
g.clearRect(0,0,getSize().width,getSize().height)
}
for(int i=0i<points.size()-1i++)
{
p1=(OnePoint)points.elementAt(i)
p2=(OnePoint)points.elementAt(i+1)
g2d.setColor(p1.c)//////////////需要使用Graphics2D从Graphics类中继承下来的方法 setColor()设置当前的颜色
size=new BasicStroke(p1.border,BasicStroke.CAP_BUTT,BasicStroke.JOIN_BEVEL)
g2d.setStroke(size)
if(p1.tool==p2.tool)
{
switch(p1.tool)
{
case 0:
Line2D.Double line1=new Line2D.Double(p1.x,p1.y,p2.x,p2.y)
g2d.draw(line1)
break
case 1:
Line2D.Double line2=new Line2D.Double(p1.x,p1.y,p2.x,p2.y)
g2d.draw(line2)
break
case 3:
Ellipse2D.Double 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 4:
Rectangle2D.Double rect=new Rectangle2D.Double(p1.x,p1.y,Math.abs(p2.x-p1.x),Math.abs(p2.y-p1.y))
g2d.draw(rect)
break
default:
}
}
}
}
public void mouseClicked(MouseEvent e) {}
public void mouseEntered(MouseEvent e) {}
public void mouseExited(MouseEvent e) {}
public void mousePressed(MouseEvent e) //鼠标点下时候,将当前的点信息记录
{
mode=0
p[0]=e.getPoint()
OnePoint pp1=new OnePoint(e.getX(),e.getY(),flagtool,flagcolor,border)
points.addElement(pp1)
//repaint()
}
public void mouseReleased(MouseEvent e) //鼠标松开时候,如果是画笔,则当前截断,是其余状态记下一枚点信息
{
mode=1
if(flagtool==0)
{
points.addElement(new OnePoint(-1,-1,22,flagcolor,border))
}
else
{
OnePoint pp2=new OnePoint(e.getX(),e.getY(),flagtool,flagcolor,border)
points.addElement(pp2)
points.add(new OnePoint(-1,-1,22,flagcolor,border))
}
repaint()
}
public void itemStateChanged(ItemEvent e)
{
if(e.getSource()==colorchoice)
{
String selected=colorchoice.getSelectedItem()
if(selected=="black"){flagcolor=new Color(0,0,0)}
else if(selected=="red"){flagcolor=new Color(255,0,0)}
else if(selected=="blue"){ flagcolor=new Color(0,0,255)}
else if(selected=="green"){ flagcolor=new Color(0,255,0)}
}
else if(e.getSource()==sizechoice)
{
String selected=sizechoice.getSelectedItem()
if (selected=="1"){ border=1}
else if(selected=="2"){ border=2*2}
else if(selected=="4"){ border=4*2}
else if(selected=="6"){ border=6*2}
else if(selected=="8"){ border=8*2}
}
}
/*public void update(Graphics g) { //@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
paint(g)
} */
public void actionPerformed(ActionEvent e)
{
// TODO Auto-generated method stub
if(e.getSource()==pen){flagtool=0}
else if(e.getSource()==line){ flagtool=1}
else if(e.getSource()==clear)
{
flagtool=2
points.removeAllElements()
repaint()//此语要有,否则今生无法删除!
}
else if(e.getSource()==ellipse){ flagtool=3}
else if(e.getSource()==rect){ flagtool=4}
else if(e.getSource()==colorboard)
{
/*
* 使用 javax.swing.×包中的 JColorChooser 类的静态方法showDialog(Component component,String title,Color color ),
* 该方法的参数,component是当前显示对话框的父框架,color是设置调色板初始的被选颜色
*
* 该方法返回被选的颜色,类型为Color
* */
Color color=JColorChooser.showDialog(this, "调色板",flagcolor)
flagcolor=color
}
else if(e.getSource()==openbutton)
{
openfile.setVisible(true)
if(openfile.getFile()!=null)
{
int temp=flagtool
flagtool=2
repaint()
try{
points.removeAllElements()
File file=new File(openfile.getDirectory(),openfile.getFile())
filein=new FileInputStream(file)
objectin=new ObjectInputStream(filein)
points=(Vector)objectin.readObject()
objectin.close()
filein.close()
flagtool=temp
repaint()
}
catch(Exception ee){ System.out.println(ee.toString())}
}
}
else if(e.getSource()==storebutton)
{
storefile.setVisible(true)
if(storefile.getFile()!=null)
{
try {
File file=new File(storefile.getDirectory(),storefile.getFile())
fileout=new FileOutputStream(file)
objectout=new ObjectOutputStream(fileout)
objectout.writeObject(points)
objectout.close()
fileout.close()
repaint()
}
catch (FileNotFoundException e1)
{
System.out.println(e1.toString())
e1.printStackTrace()
} catch (IOException ee) {
System.out.println(ee.toString())
ee.printStackTrace()
}
}
}
}
public void mouseDragged(MouseEvent e) //鼠标拖动时候,//当且仅当 flagtool==0,或者表示为橡皮的时候
//才将拖动过程中涉及到的点全部记录下来,并且调用repain()方法,重画当前
// TODO Auto-generated method stub
{
if(flagtool==0)
{
OnePoint pp3=new OnePoint(e.getX(),e.getY(),flagtool,flagcolor,border)
points.addElement(pp3)
repaint()
}
if(flagtool==1)
{
OnePoint pp3=new OnePoint(e.getX(),e.getY(),flagtool,flagcolor,border)
repaint()
}
}
public void mouseMoved(MouseEvent e) {
// TODO Auto-generated method stub
}
}
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)
}
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)