//画图程序——电子07-3班 朱俊星制作 学号:20072058
import java.awt.*;
import java.awt.event.*;
import java.applet.Applet;
import javax.swing.*;
public class pic2 extends javax.swing.JApplet implements ActionListener,MouseListener,MouseMotionListener
{
Checkbox b1,b2,b3,b4,b5,b6,b7,b8,ch1,ch2; JPanel pan1,pan2,pan10,pan11,pan12,pan13;
Label l1,l2,l3;TextField tf1,tf2,tf3;
Button setc;Color col;
int x1,y1,x2,y2,R1,G1,B1;
public void init()
{
Container pan=getContentPane();// 获得浏览器提供的顶层容器的内容面板
pan.setLayout(new BorderLayout());//设置面板的板式
CheckboxGroup g1=new CheckboxGroup();//建立选项组
b8=new Checkbox("铅笔工具",g1,false);
b1=new Checkbox("画直线",g1,false);
b2=new Checkbox("画圆",g1,false);
b3=new Checkbox("画椭圆",g1,false);
b4=new Checkbox("画圆角矩形",g1,false);
b5=new Checkbox("画矩形",g1,false);
b6=new Checkbox("橡皮擦工具",g1,false);
b7=new Checkbox("不选择任何工具",g1,true);
pan1=new JPanel();//作为工具箱区
pan2=new JPanel();//作为绘图区
pan2.setBackground(Color.white);//绘图区背景色为白色
pan.add("West",pan1);pan.add("Center",pan2);
pan1.setLayout(new GridLayout(13,1));
pan10=new JPanel();//工具设置面板
CheckboxGroup g2=new CheckboxGroup();//建立工具状态选项组
ch1=new Checkbox("实心图形",g2,true);
ch2=new Checkbox("空心图形",g2,false);
pan11=new JPanel();pan12=new JPanel();pan13=new JPanel();//三个颜色设置面板
pan1.add(b8);
pan1.add(b1);pan1.add(b2);pan1.add(b3);pan1.add(b4);pan1.add(b5);
pan1.add(b6);pan1.add(b7);pan1.add(pan10);pan1.add(pan11);pan1.add(pan12);pan1.add(pan13);
pan10.add(ch1);pan10.add(ch2);
l1=new Label("红色分量值(0-255):"); tf1=new TextField("0");
l2=new Label("绿色分量值(0-255):"); tf2=new TextField("0");
l3=new Label("蓝色分量值(0-255):"); tf3=new TextField("0");
pan11.add(l1);pan11.add(tf1);
pan12.add(l2);pan12.add(tf2);
pan13.add(l3);pan13.add(tf3);
setc=new Button("设定颜色值");
pan1.add(setc);
this.addMouseListener(this); //注册鼠标监听器
this.addMouseMotionListener(this); //注册鼠标移动监听器
setc.addActionListener(this); //注册按键监听器
}
public void start()
{}
public void paint(Graphics g)
{ g.setColor(col);
if(b8.getState())//铅笔工具
{
g.drawLine(x1,y1,x2,y2);
}
if(b1.getState())//画直线处理
{g.drawLine(x1,y1,x2,y2);}
else if(b2.getState())//画圆处理
{int x3=(x1+x2)/2;
int y3=(y1+y2)/2;
int Ri=(int)Math.sqrt(Math.pow((double)(x2-x1), 2)+Math.pow((double)(y2-y1), 2));//计算直径
if(ch2.getState())//画空心
{g.drawOval(x3-Ri/2, y3-Ri/2,Ri,Ri);}
else//画实心
{g.fillOval(x3-Ri/2,y3-Ri/2,Ri,Ri);}
}
else if(b3.getState())//画椭圆处理
{int x3=(x1+x2)/2;
int y3=(y1+y2)/2;
int il=Math.abs(x1-x2);
int iw=Math.abs(y1-y2);
if(ch2.getState())//画空心
{g.drawOval(x3-il/2,y3-iw/2,il,iw);}
else
{g.fillOval(x3-il/2,y3-iw/2,il,iw);}
}
else if(b4.getState())//画圆角矩形处理
{
int x3=(x1+x2)/2;
int y3=(y1+y2)/2;
int il=Math.abs(x1-x2);
int iw=Math.abs(y1-y2);
if(ch2.getState())//画空心
{g.drawRoundRect(x3-il/2,y3-iw/2,il,iw, il/6,iw/6);}
else
{g.fillRoundRect(x3-il/2,y3-iw/2,il,iw, il/6,iw/6);}
}
else if(b5.getState())//画矩形处理
{
int x3=(x1+x2)/2;
int y3=(y1+y2)/2;
int il=Math.abs(x1-x2);
int iw=Math.abs(y1-y2);
if(ch2.getState())//画空心
g.drawRect(x3-il/2,y3-iw/2,il,iw);
else
g.fillRect(x3-il/2,y3-iw/2,il,iw);
}
else if(b6.getState())//橡皮擦处理
{ g.setColor(Color.white);
int x3=(x1+x2)/2;
int y3=(y1+y2)/2;
g.fillRect(x3-4,y3-4,8,8);
}
}
public void actionPerformed(ActionEvent e)//处理按键事件的函数
{
R1=分析(tf1);
G1=分析(tf2);
B1=分析(tf3);
col=new Color(R1,G1,B1);//设定画线颜色
}
public int 分析(TextField tft)
{int i;
String s=tft.getText();
try{i=Integer.parseInt(s);}
catch(NumberFormatException nfe)
{i=0;tft.setText("0");}//如果像素值输入的不是数字,则将其置0
if(i<0||i>255)//如果输入数值超出正常范围,则将其置0
{i=0;tft.setText("0");}
return i;
}
public void mouseMoved(MouseEvent e)
{}
public void mouseEntered(MouseEvent e) {}
public void mouseExited(MouseEvent e) {}
public void mouseClicked(MouseEvent e) {}
public void mousePressed(MouseEvent e)
{
x1=e.getX();
y1=e.getY();
x2=e.getX();
y2=e.getY();
}
public void mouseReleased(MouseEvent e)
{
if(!b7.getState())
{x2=e.getX();
y2=e.getY();
repaint();//用于用户动作与Applet的画图动作交互
}
}
public void mouseDragged(MouseEvent e)
{ if(b8.getState())
{ x1=x2;
y1=y2;
x2=e.getX();
y2=e.getY();
repaint();
}
if(b6.getState())//用于橡皮擦工具的处理
{ x1=x2;
y1=y2;
x2=e.getX();
y2=e.getY();
repaint();
}
}
}