易码技术论坛

 找回密码
 加入易码
搜索
查看: 419869|回复: 11

如何实现橡皮筋绘图?

[复制链接]
发表于 2006-12-22 21:07:03 | 显示全部楼层
楼主的意思是用moveTo和lineTo绘图??。。这个很简单的。。
 楼主| 发表于 2006-12-22 21:12:27 | 显示全部楼层
不是c++,是java中的
鼠标事件处理
发表于 2006-12-22 21:49:09 | 显示全部楼层
"橡皮筋"??
什么意思
 楼主| 发表于 2006-12-22 22:46:55 | 显示全部楼层
橡皮筋:
你打开XP下的绘图器,划图的时候,随鼠标的拖动,图形大小在变!
发表于 2006-12-22 23:08:17 | 显示全部楼层
就是今天Anson想搞出来的那个东西
发表于 2006-12-22 23:15:44 | 显示全部楼层
那好办,楼主看看这个代码是不是你想要的效果:
  1. import java.awt.geom.*;
  2. import java.awt.*;
  3. import java.awt.event.*;
  4. import javax.swing.*;
  5. import java.util.*;
  6. /**
  7. *简单的画图程序
  8. *@author Eastsun
  9. *@version .1
  10. */
  11. public class DrawPanel extends JFrame{
  12.    LinkedList<Shape> shapeList =new LinkedList<Shape>();
  13.    Shape shape;
  14.    Point start,end;
  15.    final String[] type =new String[]{"Line","Rectangle","Ellipse"};
  16.    JComboBox comboBox =new JComboBox(type);
  17.    public DrawPanel(){
  18.       super("DrawPanel");
  19.       JPanel panel =new JPanel(){
  20.         public void paintComponent(Graphics g){
  21.            super.paintComponent(g);
  22.            Graphics2D g2 =(Graphics2D)g;
  23.            g2.setColor(Color.white);
  24.            g2.fillRect(0,0,getWidth(),getHeight());
  25.            g2.setColor(Color.black);
  26.            for(Shape s:shapeList) g2.draw(s);
  27.            g2.draw(shape);
  28.         }
  29.       };
  30.       panel.addMouseListener(new MouseAdapter(){
  31.         public void mousePressed(MouseEvent e){
  32.            start =e.getPoint();
  33.         }
  34.         public void mouseReleased(MouseEvent e){
  35.            shapeList.add(shape);
  36.         }
  37.       });
  38.       panel.addMouseMotionListener(new MouseMotionAdapter(){
  39.         public void mouseDragged(MouseEvent e){
  40.            end =e.getPoint();
  41.            Object select =comboBox.getSelectedItem();
  42.            if(select.equals(type[0])) shape =new Line2D.Float(start,end);
  43.            else{
  44.               if(select.equals(type[1]))  shape =new Rectangle();
  45.               else                shape =new Ellipse2D.Float();
  46.               ((RectangularShape)shape).setFrameFromDiagonal(start,end);
  47.            }
  48.            repaint();
  49.         }
  50.       });
  51.       panel.setPreferredSize(new Dimension(320,240));
  52.       add(panel,BorderLayout.NORTH);
  53.       shape =new Rectangle();
  54.       
  55.       add(comboBox,BorderLayout.SOUTH);
  56.       
  57.       pack();
  58.       setResizable(false);
  59.       setDefaultCloseOperation(EXIT_ON_CLOSE);
  60.       setVisible(true);
  61.       
  62.    }
  63.    public static void main(String[] args){
  64.       new DrawPanel();
  65.    }
  66. }
复制代码
发表于 2006-12-22 23:35:47 | 显示全部楼层
ES真直接...
发表于 2006-12-22 23:44:44 | 显示全部楼层
这种问题用代码解答比用语言更直接,呵呵
发表于 2006-12-23 08:08:48 | 显示全部楼层
我说你直接是说你自己上Anson的代码...
发表于 2006-12-23 11:15:16 | 显示全部楼层
还是俺自己写个吧.
发表于 2006-12-24 14:29:35 | 显示全部楼层
喵~我那段代码也是ES帮我改过的~所以算他的 帖哪个也无所谓=。=~
 楼主| 发表于 2006-12-22 20:59:01 | 显示全部楼层 |阅读模式
  以绘制矩形为例!试了下没做出来,
迫切想知道!
您需要登录后才可以回帖 登录 | 加入易码

本版积分规则

Archiver|手机版|小黑屋|EMAX Studio

GMT+8, 2024-4-20 00:08 , Processed in 0.010736 second(s), 18 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表