`

Draw2d 拖拽 Drag and Drop

F# 
阅读更多

关键字:Draw2d 拖拽 Drag and Drop

 

public class Scroller2 {
	IFigure getRootFigure() {
		Panel panel = new Panel();
		panel.setLayoutManager(new XYLayout());
		RectangleFigure rFigure = new RectangleFigure();
		rFigure.setSize(55,55);
		rFigure.setBackgroundColor(ColorConstants.green);
		new Dnd(rFigure);
		panel.add(rFigure);
		return panel;
	}

	public static void main(String args[]) {
		Display display = Display.getDefault();
		Shell shell = new Shell();  
		shell.setSize(400, 300);
		shell.open();
		shell.setText("ScrollPane Example");
		LightweightSystem lws = new LightweightSystem(shell);
		lws.setContents(new Scroller2().getRootFigure());
		while (!shell.isDisposed ()) {
			if (!display.readAndDispatch ())
				display.sleep ();
		}
	}
}
class Dnd extends MouseMotionListener.Stub implements MouseListener {
	Point start;
	public Dnd(IFigure figure) 	{
		figure.addMouseMotionListener(this);
		figure.addMouseListener(this);
	}
	public void mouseReleased(MouseEvent e){
		Figure f = ((Figure)e.getSource());
		f.setCursor(null);
	}
	public void mouseClicked(MouseEvent e){}
	public void mouseDoubleClicked(MouseEvent e){}
	public void mousePressed(MouseEvent e) {
		Figure f = ((Figure)e.getSource());
		f.setCursor(Display.getCurrent().getSystemCursor(SWT.CURSOR_SIZEALL));
		start = e.getLocation();
	}
	public void mouseDragged(MouseEvent e) {
		if(start == null) {
			return;
		}
		Point p = e.getLocation();
		Dimension d = p.getDifference(start);
		start = p;
		Figure f = ((Figure)e.getSource());
		f.setBounds(f.getBounds().getTranslated(d.width, d.height));
	}
}

 

 

 

 

关于拖拽有个奇怪的问题:

有连线 + add(IFigure figure, Object constraint)的方式加的图形。不好拖拽,可能因为constraint。

public class HelloWorld2 {
	public static void main(String args[]) {
		Shell shell = new Shell();
		shell.setText("Draw2d Hello World");
		shell.setSize(300, 300);
		shell.open();

		// create content 4 shell.
		createContent4Shell(shell);

		while (!shell.isDisposed ()) {
			if (!Display.getDefault().readAndDispatch ())
				Display.getDefault().sleep ();
		}
	}

	private static void createContent4Shell(Shell shell) {
		Panel rootFigure = new Panel();
		rootFigure.setLayoutManager(new XYLayout());

		IFigure figure1 = new Ellipse();
		Ellipse figure2 = new Ellipse();

		// --------------------------------------------------------
		// add connection
		PolylineConnection connection = new PolylineConnection();
		connection.setSourceAnchor(new ChopboxAnchor(figure1));
		connection.setTargetAnchor(new EllipseAnchor(figure2));

		rootFigure.add(connection);
		
//		figure1.setBounds(new Rectangle(10,10,60,30));
//		figure2.setBounds(new Rectangle(170,170,90,90));
//		rootFigure.add(figure1);
//		rootFigure.add(figure2);
		
		rootFigure.add(figure2,new Rectangle(170,170,90,90));
		rootFigure.add(figure1,new Rectangle(10,10,60,30));
		
		new Dnd(figure1);
		new Dnd(figure2);

		LightweightSystem lws = new LightweightSystem(shell);
		lws.setContents(rootFigure);
	}
}

class Dnd extends MouseMotionListener.Stub implements MouseListener{
	Point start;
	public Dnd(IFigure figure) {
		figure.addMouseMotionListener(this);
		figure.addMouseListener(this);
	}
	public void mouseReleased(MouseEvent e) {
		Figure f = ((Figure)e.getSource());
		f.setCursor(null);
	}
	public void mouseClicked(MouseEvent e) {}
	public void mouseDoubleClicked(MouseEvent e) {}
	public void mousePressed(MouseEvent e) {
		Figure f = ((Figure)e.getSource());
		f.setCursor(Display.getCurrent().getSystemCursor(SWT.CURSOR_SIZEALL));
		start = e.getLocation();
	}
	public void mouseDragged(MouseEvent e) {
		if(start == null) {
			return;
		}
		Point p = e.getLocation();
		Dimension d = p.getDifference(start);
		start = p;
		Figure f = ((Figure)e.getSource());
		f.setBounds(f.getBounds().getTranslated(d.width, d.height));
	}
}

 

 



 

 

但改为:

 

		
		figure1.setBounds(new Rectangle(10,10,60,30));
		figure2.setBounds(new Rectangle(170,170,90,90));
		rootFigure.add(figure1);
		rootFigure.add(figure2);
		
//		rootFigure.add(figure2,new Rectangle(170,170,90,90));
//		rootFigure.add(figure1,new Rectangle(10,10,60,30));

 就可以拖动。可能是因为约束的原因。
 

 

看一下源代码可以看出区别,

	public final void add(IFigure figure) {
		add(figure, null, -1);
	}

 而

	public final void add(IFigure figure, Object constraint) {
		add(figure, constraint, -1);
	}

 也就说约束的方式就定死了figure的大小位置了。 

  • 大小: 6.1 KB
  • 大小: 6.8 KB
分享到:
评论

相关推荐

    Java中的Drag and Drop拖拽技术

    "Java中的Drag and Drop拖拽技术" Java中的Drag and Drop拖拽技术是指在Java应用程序中,实现拖拽操作的技术。Drag and Drop技术可以将数据从一个组件拖拽到另一个组件中,实现数据的传输和交互操作。 Drag and ...

    Android中Drag and Drop拖拽功能的使用

    在Android开发中,拖放(Drag and Drop)功能是一种常见的用户交互方式,允许用户通过手势将一个对象从一处移动到另一处。这个功能在许多场景下都非常实用,比如整理应用抽屉、移动文件或者在布局中调整控件位置等。...

    Android简单的拖拽操作(DragAndDrop)

    在Android开发中,拖放(DragAndDrop)功能是一个常用且有趣的交互方式,它允许用户通过手势将一个视图移动到另一个位置,或者在不同的视图之间传递数据。本示例将详细介绍如何实现一个简单的拖放操作,并解决你在...

    拖拽 Draganddrop.html

    【标题】:“拖拽 Draganddrop.html” 在Web开发中,拖放(Drag and Drop)功能是一项常用的技术,允许用户通过鼠标操作将元素从一处拖动到另一处,实现数据移动或交互。在这个实例中,“Draganddrop.html”很可能...

    Qt之QToolButton 实现动态拖拽Drag、Drop功能

    Qt之QToolButton与QGroupBox实现动态拖拽Drag、Drop功能,可以随意拖放到QGroupBox内,也可以与现有的QToolButton交换位置,也可以拖拽出QGroupBox外释放

    Drag and Drop Component Suite 3.7 (拖放)

    《Drag and Drop Component Suite 3.7:Delphi中的拖放技术详解》 在软件开发过程中,用户界面的易用性和交互性是至关重要的因素之一。"Drag and Drop Component Suite 3.7"是一个专为Delphi开发者设计的组件包,它...

    DragandDrop.rar_dragAndDrop

    在IT行业中,文件拖放(Drag and Drop)是一种常见的用户交互技术,允许用户通过鼠标将一个元素从一处拖动到另一处,常用于文件管理、应用程序界面操作等场景。本资料"DragandDrop.rar_dragAndDrop"聚焦于在Internet...

    表格拖拽排序插件 Table Drag and Drop JQuery plugin v0.7

    表格拖拽排序插件 Table Drag and Drop JQuery plugin v0.7 最新0.7版本

    DragAndDrop_Demo源码

    【标题】"DragAndDrop_Demo源码"是关于C++编程的一个实例,主要展示了拖放(Drag and Drop)功能的实现。在计算机图形用户界面(GUI)开发中,拖放功能允许用户通过鼠标或其他输入设备将一个对象从一处拖动到另一处...

    C#实现Drag and Drop操作例子

    在C#编程中,Drag and Drop操作是一种常见且实用的功能,允许用户通过鼠标将对象从一个位置拖动到另一个位置,比如在不同的控件、窗口甚至应用程序之间移动数据。这个功能在开发桌面应用时,特别是在文件管理或者...

    基于HTML5 拖拽接口(Drag and drag-and-drop interfaces based on HTML5

    HTML5是现代网页开发的重要标准,它引入了许多新特性,其中拖放(Drag and Drop)功能就是一项增强用户交互体验的重要接口。拖放接口允许用户通过鼠标或触控设备将元素从一个位置拖动到另一个位置,使得网页的互动性...

    DragAndDrop_src源码

    "DragAndDrop_src源码" 是一个专门针对C++编程语言设计的项目,它提供了实现拖放(Drag and Drop)功能的源代码。在Windows应用开发中,拖放操作是常见的用户交互方式,允许用户通过鼠标将一项内容从一处拖动到另一...

    Drag and Drop Component Suite Version 5.2 Full Source

    "Drag and Drop Component Suite Version 5.2 Full Source" 是一个专门用于开发具有拖放功能的组件套件的完整源代码版本。这个组件库通常是为了帮助程序员在应用程序中实现更直观、用户友好的交互设计而设计的。在这...

    WPF鼠标拖放操作DragAndDrop

    在Windows Presentation Foundation (WPF) 中,鼠标拖放操作(DragAndDrop)是一种常见的用户交互方式,它允许用户通过鼠标将一个元素从一处移动到另一处。这种功能在各种应用程序中都有广泛的应用,例如文件管理器...

    掌握JavaScript中的Drag and Drop API:交互式Web应用开发指南

    本文将详细介绍Drag and Drop API的基本概念、事件处理、以及如何在JavaScript中使用这个API来实现拖拽功能。 Drag and Drop API为Web应用带来了强大的交互性。通过本文的介绍和示例代码,开发者应该能够理解并实现...

    draganddrop拖放库vuedndmobile

    拖放(Drag and Drop,简称DnD)是一种常见的用户交互模式,允许用户通过拖动元素到目标位置来实现数据操作。在Web应用中,这种功能可以极大地提升用户体验,尤其是在处理列表排序、文件管理等场景下。Vue DnD ...

    Ole Drag and Drop Example.

    标题 "Ole Drag and Drop Example" 提供了一个关于如何在应用程序中实现OLE拖放操作的示例。在编程中,OLE(Object Linking and Embedding)是微软开发的一种技术,允许不同应用程序之间的数据共享和交互。拖放功能...

    ios-iOS11 Drag and Drop功能演示.zip

    在iOS 11中,Apple引入了一项名为“Drag and Drop”的强大功能,极大地提升了用户在设备上处理和移动内容的便捷性。这个功能允许用户通过简单的手势将内容(如文本、图片、文件等)从一个应用拖动到另一个应用,从而...

    The Drag and Drop Component Suite for Delphi XE10

    对于Delphi开发者来说,"The Drag and Drop Component Suite for Delphi XE10"是一款非常实用的工具,它极大地简化了在Delphi XE10环境下实现拖放功能的复杂度。 该组件套件是基于先前版本XE7的修改版,经过优化后...

Global site tag (gtag.js) - Google Analytics