Applet的一个绘图板

本文介绍了一个使用Java Applet实现的简易绘图板应用程序。该程序支持绘制线条、圆形和矩形,并允许用户选择不同的颜色。文章详细展示了如何通过监听鼠标事件来实现图形绘制,并提供了完整的源代码。

/*用Applet做的一个会图板但是不知道为什么在画圆和方的时候,原来画好的图形会改变位置

如果谁能帮我一下 十分感激!

希望高手能在这留言赐教!

*/



import java.applet.Applet;
import java.awt.BorderLayout;
import java.awt.Button;
import java.awt.Checkbox;
import java.awt.CheckboxGroup;
import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.GridLayout;
import java.awt.Label;
import java.awt.Panel;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.MouseMotionListener;
import java.util.ArrayList;
public class TestOne extends Applet {

String str="我爱你中国,我的家在北京!";
int x1,y1,x2,y2,currentshape=ShapeParam.line;
Color c=Color.black;
CheckboxGroup cbg = new CheckboxGroup();
CheckboxGroup shapecbg=new CheckboxGroup();
ArrayList<ShapeParam> shapeparams=new ArrayList<ShapeParam>();

@Override
public void destroy() {
System.out.println("destroy");
}

@Override
public void init() {
Button btn1=new Button("清屏");
Label lab1=new Label("ControlGroup");
btn1.setBackground(Color.LIGHT_GRAY);

Panel pcolor=new Panel();
Panel pshape=new Panel();


pcolor.setLayout(new GridLayout(2, 3));

Checkbox cb1=new Checkbox("Black", cbg, true);
Checkbox cb2=new Checkbox("Red", cbg, false);
Checkbox cb3=new Checkbox("Blue", cbg, false);


Checkbox shapecb1=new Checkbox("线",shapecbg,true);
Checkbox shapecb2=new Checkbox("圆",shapecbg,false);
Checkbox shapecb3=new Checkbox("方",shapecbg,false);




pcolor.add(cb1);
pcolor.add(cb2);
pcolor.add(cb3);

pcolor.add(lab1);




pcolor.add(shapecb1);
pcolor.add(shapecb2);
pcolor.add(shapecb3);

pcolor.add(btn1);






pcolor.setBackground(Color.LIGHT_GRAY);
pshape.setBackground(Color.LIGHT_GRAY);




this.add(pcolor,BorderLayout.CENTER);



btn1.addActionListener(new Btn1Action());



this.addMouseListener(new MouseAdapter(){



@Override
public void mousePressed(MouseEvent e) {
x1=e.getX();
y1=e.getY();


}




@Override
public void mouseReleased(MouseEvent e) {
shapeparams.add(new ShapeParam(x1,y1,x2,y2,c,currentshape));




}



});

this.setSize(400,400);




this.addMouseMotionListener(new MousePain(){


});




}

@Override
public void start() {

}

@Override
public void stop() {

}

@Override
public void paint(Graphics g) {

int xx=x1;
int yy=y1;
if(x1>x2)xx=x2;
if(y1>y2)yy=y2;
drawshape();
g.setColor(c);
changecolor(g);
changeshape();



if(x1==0 &&x2==0 && y1==0 && y2==0 )return;

if(currentshape==ShapeParam.line)
{

g.drawLine(x1, y1, x2, y2);
}
if(currentshape==ShapeParam.rec)
{

g.draw3DRect(xx, yy, Math.abs(x1-x2), Math.abs(y1-y2), true);
}
if(currentshape==ShapeParam.oval)
{

g.drawOval(xx, yy, Math.abs(x1-x2), Math.abs(y1-y2));
}



}

private void changeshape() {
if(shapecbg.getSelectedCheckbox().getLabel()=="线")currentshape=ShapeParam.line;
if(shapecbg.getSelectedCheckbox().getLabel()=="方")currentshape=ShapeParam.rec;
if(shapecbg.getSelectedCheckbox().getLabel()=="圆")currentshape=ShapeParam.oval;

}

private void changecolor(Graphics g) {
if(cbg.getSelectedCheckbox().getLabel()=="Blue")
{g.setColor(c=Color.blue);return;}
if(cbg.getSelectedCheckbox().getLabel()=="Red")
{g.setColor(c=Color.red);return;}
if(cbg.getSelectedCheckbox().getLabel()=="Black")
{g.setColor(c=Color.black);return;}

}

private void drawshape() {

int dx;
int dy;
Graphics g=this.getGraphics();


for(int i=0;i<shapeparams.size();i++){


ShapeParam sp=shapeparams.get(i);

//System.out.println(sp.toString());
dx=sp.x1;
dy=sp.x2;
if(sp.x1>sp.x2)dx=sp.x2;
if(sp.y1>sp.y2)dy=sp.y2;

if(sp.shape==ShapeParam.line)
{g.setColor(sp.c);

g.drawLine(sp.x1, sp.y1, sp.x2, sp.y2);
System.out.println("l");
}
if(sp.shape==ShapeParam.rec)
{g.setColor(sp.c);

g.draw3DRect(dx, dy, Math.abs(sp.x1-sp.x2), Math.abs(sp.y1-sp.y2), true);
System.out.println("r");
}
if(sp.shape==ShapeParam.oval)
{g.setColor(sp.c);

g.drawOval(dx, dy, Math.abs(sp.x1-sp.x2), Math.abs(sp.y1-sp.y2));
System.out.println("o");
}




}

}

class Btn1Action implements ActionListener{

public void actionPerformed(ActionEvent arg0) {

x1=x2=y1=y2=0;

shapeparams.removeAll(shapeparams);

TestOne.this.repaint();

}

}
class MousePain implements MouseMotionListener {

public void mouseDragged(MouseEvent e) {

TestOne.this.x2=e.getX();
TestOne.this.y2=e.getY();



TestOne.this.repaint();


}

public void mouseMoved(MouseEvent e) {


}



}

class ShapeParam{
static final int line=0;
static final int rec=1;
static final int oval=2;

int x1=0;
int y1=0;
int x2=0;
int y2=0;
int shape;


Color c;
public ShapeParam(int x1,int y1,int x2,int y2,Color c,int shape){
this.x1=x1;
this.y1=y1;
this.x2=x2;
this.y2=y2;
this.c=c;
this.shape=shape;
}

public String toString(){
return String.valueOf(x1)+" "+x2+" "+y1+" "+y2+" "+shape;
}
}

}

//<applet code="TestOne.class" width=400 height=400>

//</applet>


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值