CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
不看会后悔的Windows XP之经验谈 简单快捷DIY实用家庭影院
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  Java >  Eclipse

有关于图形拖动的问题

楼主NetMan707(网人)2005-11-04 18:13:10 在 Java / Eclipse 提问

我想实现这样一个问题:  
  比如说两个矩形用一条连线连接,当我拖动矩形时,屏幕上会显示一个阴影矩形表示被拖动的矩形。但是连线不能随着这个阴影矩形移动,只能在图形移动后放开鼠标后,重新绘制连线。但我想这条线也能同样的做移动,该怎么解决?  
  是不是解决锚点和鼠标同时计算位置,然后刷新? 问题点数:20、回复次数:8Top

1 楼terry_yip(我只回答引起我思考的问题)回复于 2005-11-05 10:47:30 得分 0

这个用delphi来做,有很多例子,但是,我从来没见到用java可以做到这种程序的,甚至,连可以用鼠标拖放的都没见过。JAVA在这方面是很弱的。  
   
  Top

2 楼NetMan707(网人)回复于 2005-11-07 09:56:46 得分 0

我是在eclipse上做的,使用gef插件,不知道那位能帮我解决这个问题?谢谢Top

3 楼java_augur(听着音乐 ☆☆☆☆☆☆)回复于 2005-11-07 14:52:10 得分 20

 
  import   java.awt.*;  
  import   java.awt.event.MouseEvent;  
  import   java.awt.geom.Line2D;  
  import   java.util.LinkedList;  
  import   java.util.List;  
   
  import   javax.swing.JFrame;  
  import   javax.swing.JPanel;  
  import   javax.swing.event.MouseInputListener;  
   
  public   class   LineTest   extends   JPanel   implements   MouseInputListener  
  {  
  private   List<Point>   points   =   new   LinkedList<Point>();  
  private   Point   draggingPoint;  
   
  public   LineTest()  
  {  
  this.addMouseListener(this);  
  this.addMouseMotionListener(this);  
  }  
   
  @Override  
  protected   void   paintComponent(Graphics   g)  
  {  
  super.paintComponent(g);  
   
  Point   lastPoint   =   null;  
  g.setColor(Color.BLACK);  
  for   (Point   p   :   points)   {  
  if   (lastPoint   !=   null)   {  
  g.drawLine(lastPoint.x,     lastPoint.y,   p.x,   p.y);  
  }  
  lastPoint   =   p;  
  }  
   
  for   (Point   p   :   points)   {  
  g.setColor(getBackground());  
  g.fillRect(p.x-2,   p.y-2,   4,   4);  
  g.setColor(Color.BLACK);  
  g.drawRect(p.x-2,   p.y-2,   4,   4);  
  }  
  }  
   
  private   Point   getPointAtSameLocation(Point   p)    
  {  
  for   (Point   point   :   points)   {  
  if   (Math.abs(p.x   -   point.x)   <=   2   &&   Math.abs(p.y   -   point.y)   <=   2)   {  
  return   point;  
  }  
  }  
  return   null;  
  }  
   
  private   int   getLineAtLocation(Point   p)  
  {  
  int   index   =   -1;  
  Point   lastPoint   =   null;  
  for   (Point   point   :   points)   {  
  if   (lastPoint   !=   null)   {  
  Line2D   line   =   new   Line2D.Float(lastPoint,   point);  
  if   (line.intersects(p.x   -   2,   p.y   -   2,   4,   4))   {  
  return   index;  
  }  
  }  
  lastPoint   =   point;  
  index++;  
  }  
  return   -1;  
  }  
   
  public   void   mouseClicked(MouseEvent   e)   {}  
  public   void   mousePressed(MouseEvent   e)   {  
  Point   point   =   e.getPoint();  
  if   (e.getButton()   ==   MouseEvent.BUTTON1)   {  
  Point   p   =   getPointAtSameLocation(point);  
  if   (p   !=   null)   {  
  this.draggingPoint   =   p;  
  return;  
  }  
   
  int   index   =   getLineAtLocation(point);  
  if   (index   !=   -1)   {  
  points.add(index   +   1,   point);  
  this.draggingPoint   =   point;  
  repaint();  
  return;  
  }  
   
  if   (draggingPoint   ==   null)   {  
  points.add(e.getPoint());  
  repaint();  
  }  
  }  
  else   if   (e.getButton()   ==   MouseEvent.BUTTON3)   {  
  Point   p   =   getPointAtSameLocation(point);  
  if   (p   !=   null)   {  
  points.remove(p);  
  repaint();  
  }  
  }  
  }  
  public   void   mouseReleased(MouseEvent   e)   {  
  draggingPoint   =   null;  
  }  
  public   void   mouseEntered(MouseEvent   e)   {}  
  public   void   mouseExited(MouseEvent   e)   {}  
  public   void   mouseDragged(MouseEvent   e)    
  {  
  if   (this.draggingPoint   !=   null)   {  
  this.draggingPoint.x   =   e.getX();  
  this.draggingPoint.y   =   e.getY();  
  repaint();  
  }  
  }  
  public   void   mouseMoved(MouseEvent   e)    
  {  
  Point   p   =   getPointAtSameLocation(e.getPoint());  
  if   (p   !=   null)   {  
  setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR));  
  return;  
  }  
   
  int   index   =   getLineAtLocation(e.getPoint());  
  if   (index   !=   -1)   {  
  setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR));  
  }  
  else   {  
  setCursor(Cursor.getDefaultCursor());  
  }  
  }  
   
  public   static   void   main(String[]   args)  
  {  
  JFrame   f   =   new   JFrame("Points");  
  f.getContentPane().add(new   LineTest(),   BorderLayout.CENTER);  
  f.setSize(600,   600);  
  f.setLocationRelativeTo(null);  
  f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);  
  f.setVisible(true);  
   
  }  
  }  
   
   
  Top

4 楼hubo2003hq(rain)回复于 2005-11-08 01:39:42 得分 0

private   List<Point>   points   =   new   LinkedList<Point>();    
   
  没见过这种语句哦  
   
  能不能解释下?  
  thanksTop

5 楼hubo2003hq(rain)回复于 2005-11-08 02:18:10 得分 0

for   (Point   p   :   points)  
  这种循环也没见到过哦!!Top

6 楼java_augur(听着音乐 ☆☆☆☆☆☆)回复于 2005-11-08 07:47:59 得分 0

这是java5.0中的特殊语句,如果你没有安装,你可以自己改造一下。  
  不过,为了这段代码,安装java5.0也不为过。  
  private   List   points   =   new   LinkedList();  
  Iterator   it   =   points.iterator();  
  while(it.hasNext()){  
  Point   p   =   (Point)it.next();  
  }Top

7 楼NetMan707(网人)回复于 2005-11-08 10:50:44 得分 0

谢谢Top

8 楼quleaf(auleaf)回复于 2005-11-14 17:20:22 得分 0

haoTop

相关问题

  • 如何拖动一组图形?
  • 请问如何实现一个图形的拖动功能
  • 50分求救怎样实现鼠标拖动原有图形
  • GDI图形缩放拖动显示问题?
  • 矢量图形开发,拖动图形元素时,屏幕闪的厉害,如何解决?
  • 基类从CView改成CScrollView以后出现图形拖动模糊的问题
  • 高手请进啊 如何同时拖动选中的两个图形 小弟跪求啊
  • 关于图形拖动的问题,急!!!在线等!分数不够可以再加!
  • 一个图形拖动的问题(望各位答疑解惑,分不是问题)
  • 我是初学,有谁能告诉我如何实现在VC中画一个图形,能选中并拖动?

关键词

  • 矩形
  • 鼠标
  • swing
  • 移动
  • 解决
  • lastpoint
  • 拖动
  • point
  • 连线
  • setcolor

得分解答快速导航

  • 帖主:NetMan707
  • java_augur

相关链接

  • CSDN Java频道
  • Java类图书
  • Java类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo