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

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

谢谢
...全文
163 5 打赏 收藏 转发到动态 举报
AI 作业
写回复
用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
为了使更多的Qt初学者能尽快入门Qt,也为了Qt及Qt Creator的快速普及,我们花费大量精力写出了这一系列教程。虽然教程的知识可能很浅显,虽然教程的语言可能不规范,但是它却被数十万网友所认可。我们会将这一系列教程一直写下去,它将涉及Qt的方方面面 一、Qt Creator的安装和hello world程序的编写 二、Qt Creator编写多窗口程序 三、Qt Creator登录对话框 四、Qt Creator添加菜单图标 五、Qt Creator布局管理器的使用 六、Qt Creator实现文本编辑 七、Qt Creator实现文本查找 八、Qt Creator实现状态栏显示 九、Qt Creator中鼠标键盘事件的处理实现自定义鼠标指针 十、Qt Creator中实现定时器和产生随机数 十一、Qt 2D绘图(一)绘制简单图形 十二、Qt 2D绘图(二)渐变填充 十三、Qt 2D绘图(三)绘制文字 十四、Qt 2D绘图(四)绘制路径 十五、Qt 2D绘图(五)显示图片 十六、Qt 2D绘图(六)坐标系统 十七、Qt 2D绘图(七)Qt坐标系统深入 十八、Qt 2D绘图(八)涂鸦板 十九、Qt 2D绘图(九)双缓冲绘图简介 二十、Qt 2D绘图(十)图形视图框架简介 二十一、Qt数据库(一)简介 二十二、Qt数据库(二)添加MySQL数据库驱动插件 二十三、Qt数据库(三)利用QSqlQuery类执行SQL语句(一) 二十四、Qt数据库(四)利用QSqlQuery类执行SQL语句(二) 二十五、Qt数据库(五)QSqlQueryModel 二十六、Qt数据库(六)QSqlTableModel 二十七、Qt数据库(七)QSqlRelationalTableModel 二十八、Qt数据库(八)XML(一) 二十九、Qt数据库(九)XML(二) 三十、Qt数据库(十)XML(三) 三十一、Qt 4.7.0及Qt Creator 2.0 beta版安装全程图解 三十二、第一个Qt Quick程序(QML程序) 三十三、体验QML演示程序 三十四、Qt Quick Designer介绍 三十五、QML组件 三十六、QML项目之Image和BorderImage 三十七、Flipable、Flickable和状态与动画 三十八、QML视图 三十九、QtDeclarative模块 四十、使用Nokia Qt SDK开发Symbian和Maemo终端软件 四十一、Qt网络(一)简介 四十二、Qt网络(二)HTTP编程 四十三、Qt网络(三)FTP(一) 四十四、Qt网络(四)FTP(二) 四十五、Qt网络(五)获取本机网络信息 四十六、Qt网络(六)UDP 四十七、Qt网络(七)TCP(一) 四十八、Qt网络(八)TCP(二)

62,634

社区成员

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

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