import java.applet.*
import java.awt.*
import java.awt.event.*
public class drawing extends Applet implements ActionListener,
MouseMotionListener {
int x = -1, y = -1, 橡皮擦通知 = 0, 清除通知 = 0
Color c = new Color(255, 0, 0)
int con = 3
Button b_red, b_blue, b_green, 清除, b_quit
public void init() {
addMouseMotionListener(this)
b_red = new Button("画红色图形")
b_blue = new Button("画蓝色图形")
b_green = new Button("画绿色图形")
b_quit = new Button("橡皮")
清除 = new Button("清除")
add(b_red)
add(b_green)
add(b_blue)
add(b_quit)
add(清除)
b_red.addActionListener(this)
b_green.addActionListener(this)
b_blue.addActionListener(this)
b_quit.addActionListener(this)
清除.addActionListener(this)
}
// 画图事件处理
public void paint(Graphics g) {
// 当鼠标的在容器内部(x != -1 &&y != -1)的时候 并且没有点击 橡皮 或者 清除 按钮
/判脊/ 那么根据选择的喊慧颜色画图
if (x != -1 &&y != -1 &&橡皮擦通知 == 0 &&清除通知 == 0) {
g.setColor(c)
g.fillOval(x, y, con, con)
}
// 当点击橡皮的时候 在鼠标移动的时候 清除 鼠郑冲答标当前位置 往X轴和Y轴各10像素的矩形区域
else if (橡皮擦通知 == 1 &&清除通知 == 0) {
g.clearRect(x, y, 10, 10)
}
// 当点击清除的时候 清除整个图形
else if (清除通知 == 1 &&橡皮擦通知 == 0) {
g.clearRect(0, 0, getSize().width, getSize().height)
}
}
// 当鼠标拖动的时候 获得鼠标在画板中的位置 然后调用repaint方法绘制图像,repaint 会调用本类的 update 方法
public void mouseDragged(MouseEvent e) {
x = (int) e.getX()
y = (int) e.getY()
repaint()
}
// 当鼠标移动的时候啥也不做
public void mouseMoved(MouseEvent e) {
}
// 当容器更新的时候 重新绘图 被repaint 内部调用 可以在这里加自己的业务逻辑
public void update(Graphics g) {
// 画图
paint(g)
}
// 自定义按钮的事件处理 当按钮被点击的时候 会调用这个方法 同时传入点击事件 ActionEvent
// ActionEvent 记录了点击的哪个按钮 状态等信息
public void actionPerformed(ActionEvent e) {
// 当点击 画红色图形 的时候改变颜色 这个颜色 被paint方法的画笔使用
if (e.getSource() == b_red) {
橡皮擦通知 = 0
清除通知 = 0
c = new Color(255, 0, 0)
}
// 当点击 画绿色图形 的时候改变颜色 这个颜色 被paint方法的画笔使用
else if (e.getSource() == b_green) {
橡皮擦通知 = 0
清除通知 = 0
c = new Color(0, 255, 0)
}
// 当点击 画蓝色图形 的时候改变颜色 这个颜色 被paint方法的画笔使用
else if (e.getSource() == b_blue) {
橡皮擦通知 = 0
清除通知 = 0
c = new Color(0, 0, 255)
}
// 当点击 橡皮的时候处理
if (e.getSource() == b_quit) {
橡皮擦通知 = 1
清除通知 = 0
}
// 点击 清除的时候处理
if (e.getSource() == 清除) {
清除通知 = 1
橡皮擦通知 = 0
repaint()
}
}
}
package drawimport 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
}
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)