/*用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>
Applet的一个绘图板
最新推荐文章于 2022-02-25 18:19:43 发布
本文介绍了一个使用Java Applet实现的简易绘图板应用程序。该程序支持绘制线条、圆形和矩形,并允许用户选择不同的颜色。文章详细展示了如何通过监听鼠标事件来实现图形绘制,并提供了完整的源代码。
66

被折叠的 条评论
为什么被折叠?



