哪边有画简单图形的例子?

沉珂 2006-05-04 04:01:14
比如画直线、椭圆、矩形等的,
而且可以改变直线的长度,椭圆和矩形的大小,
还可以移动他们的位置的

谢谢
...全文
156 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
lzmailcn 2006-05-05
  • 打赏
  • 举报
回复
sun上有一个Draw for app,有源码,下一个去.
heronce 2006-05-05
  • 打赏
  • 举报
回复
import java.awt.*;
import java.awt.event.*;
import java.awt.geom.*;
import java.applet.*;
import java.util.*;

public class SharpApplet extends Applet implements ItemListener {
/**
* Comment for <code>serialVersionUID</code>
*/
private static final long serialVersionUID = 1L;
private Choice comboBox;
private ShapeCanvas canvas;


public void init(){
setLayout( new BorderLayout());
canvas = new ShapeCanvas();
add(canvas,"Center");
comboBox = new Choice();
comboBox.addItem("Line");
comboBox.addItem("Rectangle");
comboBox.addItem("RoundRectangle");
comboBox.addItem("Ellipse");
comboBox.addItem("Polygon");
comboBox.addItem("QuadCurve");
comboBox.addItem("CubicCurve");
comboBox.addItemListener(this);
add(comboBox,"North");
}

public void itemStateChanged(ItemEvent e) {
ShapeMaker sharpMaker;
String s = comboBox.getSelectedItem();
if(s=="line")
sharpMaker = (ShapeMaker)(new LineMaker());
else if(s=="Rectangle")
sharpMaker = (ShapeMaker)(new RectangleMaker());
else if(s=="RoundRectangle")
sharpMaker = (ShapeMaker)(new RoundRectangleMaker());
else if(s=="Ellipse")
sharpMaker = (ShapeMaker)(new EllipseMaker());
else if(s=="Polygon")
sharpMaker = (ShapeMaker)(new PolygonMaker());
else if(s=="QuadCurve")
sharpMaker = (ShapeMaker)(new QuadCurveMaker());
else
sharpMaker = (ShapeMaker)(new CubicCurveMaker());
canvas.setSharpMaker(sharpMaker);

}

}

class ShapeCanvas extends Canvas{
/**
* Comment for <code>serialVersionUID</code>
*/
private static final long serialVersionUID = 1L;
private Point2D[] points;
private static Random generator = new Random();
private static int SIZE = 10;
private int current;
private ShapeMaker shapeMaker;

public ShapeCanvas(){
addMouseListener(new MouseHandler());
addMouseMotionListener(new MouseMotionHandler());
current=-1;
}

public void setSharpMaker(ShapeMaker aShapeMaker){
shapeMaker = aShapeMaker;
int n = shapeMaker.getPointCount();
points = new Point2D[n];
for(int i=0;i<n;i++){
double x = generator.nextDouble()*getWidth();
double y = generator.nextDouble()*getHeight();
points[i] = new Point2D.Double(x,y);
}
repaint();
}

public void paint(Graphics g){
if(points == null) return;
Graphics2D g2 = (Graphics2D)g;
for(int i = 0;i<points.length;i++){
double x = points[i].getX() - SIZE/2;
double y = points[i].getY() - SIZE/2;
g2.fill(new Rectangle2D.Double(x,y,SIZE,SIZE));
}
g2.draw(shapeMaker.makeShape(points));
}

public class MouseHandler extends MouseAdapter{
public void mousePressed(MouseEvent e){
Point p=e.getPoint();
for(int i = 0;i<points.length;i++){
double x = points[i].getX() - SIZE/2;
double y = points[i].getY() - SIZE/2;
Rectangle2D r = new Rectangle2D.Double(x,y,SIZE,SIZE);
if(r.contains(p)){
current = 1;
return;
}
}
}

public void mouseRelease(MouseEvent e){
current = -1;
}
}

public class MouseMotionHandler extends MouseMotionAdapter{
public void mouseDragged(MouseEvent e){
if(current == -1) return;
points[current] = e.getPoint();
repaint();
}
}
}

abstract class ShapeMaker{
private int pointCount;

public ShapeMaker(int apointCount){
pointCount = apointCount;
}

public int getPointCount(){
return pointCount;
}

public abstract Shape makeShape(Point2D[] p);
}

class LineMaker extends ShapeMaker{
public LineMaker(){
super(2);
}

public Shape makeShape(Point2D[] p){
return new Line2D.Double(p[0],p[1]);
}
}

class RectangleMaker extends ShapeMaker{
public RectangleMaker(){
super(2);
}

public Shape makeShape(Point2D[] p){
Rectangle2D s = new Rectangle2D.Double();
s.setFrameFromDiagonal(p[0],p[1]);
return s;
}
}

class RoundRectangleMaker extends ShapeMaker{
public RoundRectangleMaker(){
super(2);
}

public Shape makeShape(Point2D[] p){
RoundRectangle2D s = new RoundRectangle2D.Double(0,0,0,0,20,20);
s.setFrameFromDiagonal(p[0],p[1]);
return s;
}
}

class EllipseMaker extends ShapeMaker{
public EllipseMaker(){
super(2);
}

public Shape makeShape(Point2D[] p){
Ellipse2D s = new Ellipse2D.Double();
s.setFrameFromDiagonal(p[0],p[1]);
return s;
}
}

/*class ArcMaker extends ShapeMaker{
public ArcMaker(){
super(4);
}

Shape makeShape(Point2D[] p){
double centerX = (p[0].getX() + p[1].getX())/2;
double centerY = (p[0].getY() + p[1].getY())/2;
double width = Math.abs(p[1].getX()-p[0].getX());
double height = Math.abs(p[1].getY()-p[1].getY());

double distortedStartAngle = Math.toDegrees(Math.atan2(-(p[2].getY()-centerY)*width,(p[2].getX()-centerX)*height));
double distortedEndAngle = Math.toDegrees(Math.atan2(-(p[3].getY()-centerY)*width,(p[3].getX()-centerX)*height));
double dis
}
}*/

class PolygonMaker extends ShapeMaker{
public PolygonMaker(){
super(6);
}

public Shape makeShape(Point2D[] p){
GeneralPath s = new GeneralPath();
s.moveTo((float)p[0].getX(),(float)p[0].getY());
for(int i=1;i<p.length;i++){
s.lineTo((float)p[i].getX(),(float)p[i].getY());
}
s.closePath();
return s;
}
}

class QuadCurveMaker extends ShapeMaker{
public QuadCurveMaker(){
super(3);
}

public Shape makeShape(Point2D[] p){
return new QuadCurve2D.Double(p[0].getX(),p[0].getY(),p[1].getX(),p[1].getY(),p[2].getX(),p[2].getY());
}

}

class CubicCurveMaker extends ShapeMaker{
public CubicCurveMaker(){
super(4);
}

public Shape makeShape(Point2D[] p){
return new CubicCurve2D.Double(p[0].getX(),p[0].getY(),p[1].getX(),p[1].getY(),p[2].getX(),p[2].getY(),p[3].getX(),p[3].getY());
}
}

以前照书上敲的个例子,呵
diannaomingong 2006-05-05
  • 打赏
  • 举报
回复
这个我以前上java课最后老师要我做过,楼主可以参考jdk带的例子
沉珂 2006-05-05
  • 打赏
  • 举报
回复
to z_l(等你) :
好,如果找到了发给你
我现在自己在做。。。。
z_l 2006-05-04
  • 打赏
  • 举报
回复
有个这样的例子确实很好,研究一下也好,不过我没有。
楼主如果得到,给我也发一下吧,谢谢了。
zljackson@126.com

62,615

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧