一个画图程序,找了好久没找出问题,求大神指导
import java.awt.*;import java.awt.event.*;
import java.util.*;
import javax.swing.*;
import java.awt.geom.*;
class Point
{
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;
}
}
/*
*BasicStroke
*Choice
*validate();
**/
class paintboard extends Frame implements ActionListener, MouseMotionListener, MouseListener, ItemListener
{
int xx0=0,yy0=0;
int xx1=0,yy1=0;
int type=6;
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;
// *工具面板--画笔,直线,圆,矩形,多边形,橡皮,清除*/
Panel toolPanel;
Button eraser, drLine,drCircle,drRect;
Button clear ,pen;
Choice ColChoice,SizeChoice,EraserChoice;
Button colchooser;
Label 颜色,大小B,大小E;
paintboard(String s)//构造函数
{
super(s);
addMouseMotionListener(this);
addMouseListener(this);
paintInfo = new Vector();
/*各工具按钮及选择项*/
//颜色选择
ColChoice = new Choice();
ColChoice.add("黑色");
ColChoice.add("红色");
ColChoice.add("蓝色");
ColChoice.add("绿色");
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("2");
EraserChoice.add("3");
EraserChoice.add("4");
EraserChoice.add("5");
EraserChoice.addItemListener(this);
toolPanel = new Panel();
clear = new Button("清除");
eraser = new Button("橡皮");
pen = new Button("画笔");
drLine = new Button("画直线");
drCircle = new Button("画圆形");
drRect = new Button("画矩形");
colchooser = new Button("显示调色板");
//各组件事件监听
clear.addActionListener(this);
eraser.addActionListener(this);
pen.addActionListener(this);
drLine.addActionListener(this);
drCircle.addActionListener(this);
drRect.addActionListener(this);
colchooser.addActionListener(this);
颜色 = new Label("画笔颜色",Label.CENTER);
大小B = new Label("画笔大小",Label.CENTER);
大小E = new Label("橡皮大小",Label.CENTER);
//面板添加组件
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,800,650);
setVisible(true);
validate();
//dialog for save and load
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);//清除
switch(type)
{
case 3:
Line2D line = new Line2D.Double(xx0,yy0,xx1,yy1);
g2d.draw(line);
break;
case 4:
Ellipse2D ellipse1 = new Ellipse2D.Double(xx0, yy0, Math.abs(xx1-xx0) ,Math.abs(yy1-yy0));
g2d.draw(ellipse1);
break;
case 5:
Rectangle2D rect1 = new Rectangle2D.Double(xx0, yy0, Math.abs(xx1-xx0) , Math.abs(yy1-yy0));
g2d.draw(rect1);
break;
default:break;
}
for(int i=0; i<n-1; 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 :break;
}//end switch
}//end if
}//end for
}
public void itemStateChanged(ItemEvent e)
{
if(e.getSource()==ColChoice)//预选颜色
{
String name = ColChoice.getSelectedItem();
if(name=="黑色")
{ c = new Color(0,0,0); }
else if(name=="红色")
{ c = new Color(255,0,0); }
else if(name=="绿色")
{ c = new Color(0,255,0); }
else if(name=="蓝色")
{ c = new Color(0,0,255); }
}
else if(e.getSource()==SizeChoice)//画笔大小
{
String selected = SizeChoice.getSelectedItem();
if(selected=="1")
{
con = 1;
size = new BasicStroke(con,BasicStroke.CAP_BUTT,
BasicStroke.JOIN_BEVEL);
}
else if(selected=="3")
{
con = 3;
size = new BasicStroke(con,BasicStroke.CAP_BUTT,
BasicStroke.JOIN_BEVEL);
}
else if(selected=="5")
{
con = 5;
size = new BasicStroke(con,BasicStroke.CAP_BUTT,
BasicStroke.JOIN_BEVEL);
}
else if(selected=="7")
{
con = 7;
size = new BasicStroke(con,BasicStroke.CAP_BUTT,
BasicStroke.JOIN_BEVEL);
}
else if(selected=="9")
{
con = 9;
size = new BasicStroke(con,BasicStroke.CAP_BUTT,
BasicStroke.JOIN_BEVEL);
}
}
else if(e.getSource()==EraserChoice)//橡皮大小
{
String Esize = EraserChoice.getSelectedItem();
if(Esize=="2")
{ Econ = 3*3; }
else if(Esize=="3")
{ Econ = 4*4; }
else if(Esize=="4")
{ Econ = 5*5; }
else if(Esize=="5")
{ Econ = 6*6; }
}
}
public void mouseDragged(MouseEvent e)
{
xx1 = (int)e.getX();
yy1 = (int)e.getY();
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;
case 3:
case 4:
case 5:
repaint();
break;
default :
}
//repaint();
}
public void mousePressed(MouseEvent e)
{
xx0= (int)e.getX();
yy0= (int)e.getY();
Point p2;
switch(toolFlag)
{
case 3://直线
type=3;
x = (int)e.getX();
y = (int)e.getY();
p2 = new Point(x, y, c, toolFlag, con);
paintInfo.addElement(p2);
break;
case 4: //圆
type=4;
x = (int)e.getX();
y = (int)e.getY();
p2 = new Point(x, y, c, toolFlag, con);
paintInfo.addElement(p2);
break;
case 5: //矩形
type=5;
x = (int)e.getX();
y = (int)e.getY();
p2 = new Point(x, y, c, toolFlag, con);
paintInfo.addElement(p2);
break;
default :type=6;
}
}
public void mouseEntered(MouseEvent e){}
public void mouseExited(MouseEvent e){}
public void mouseClicked(MouseEvent e){}
public void mouseMoved(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;}
}
}//end
public class PaintBrush
{
public static void main (String args[])
{
new paintboard("画图程序");
}
}
倒数第12行出问题了,求指导!!谢谢
JColorChooser.showDialog(this,
"调色板",c);