JAVA GWT 自定义可拖拽PopupPanel

自定义组件:DragDropPopupPanel

public class DragDropPopupPanel extends FlowPanel {

	final Button caption = new Button();

	final Button closebtn = new Button("X");
	final HorizontalPanel hp = new HorizontalPanel();
	final VerticalPanel vp = new VerticalPanel();
	final PopupPanel pop = new PopupPanel(false);

	private List<Button> linked = new ArrayList();

	private String CAPTION_HEIGHT = "20px";

	public DragDropPopupPanel(UIObject uiObject) {
		super();
		initWidget();
	}

	private void initWidget() {

		hp.add(caption);
		hp.add(closebtn);
		vp.add(hp);
		pop.add(vp);
		bindCloseButton();
		caption.setStyleName("caption");
		closebtn.setStyleName("btn");
		caption.setHeight(CAPTION_HEIGHT);
		caption.setWidth(880 + "px");
		closebtn.setHeight(CAPTION_HEIGHT);
		bindmouse();
	}

	private boolean dragging;
	private int dragStartX, dragStartY;
	private void bindmouse() {

		caption.addMouseDownHandler(new MouseDownHandler() {

			@Override
			public void onMouseDown(MouseDownEvent event) {
				dragging = true;
				DOM.setCapture(caption.getElement());
				dragStartX = event.getX();
				dragStartY = event.getY();
			}
		});

		caption.addMouseMoveHandler(new MouseMoveHandler() {

			@Override
			public void onMouseMove(MouseMoveEvent event) {

				if (dragging) {
					int absX = event.getX() + pop.getAbsoluteLeft();
					int absY = event.getY() + pop.getAbsoluteTop();
					setPopupPosition(absX - dragStartX, absY - dragStartY);
				}

			}
		});

		caption.addMouseUpHandler(new MouseUpHandler() {

			@Override
			public void onMouseUp(MouseUpEvent event) {
				// TODO Auto-generated method stub
				dragging = false;
				DOM.releaseCapture(caption.getElement());
			}
		});

	}

	private void bindCloseButton() {
		// TODO Auto-generated method stub
		closebtn.addClickHandler(new ClickHandler() {

			@Override
			public void onClick(ClickEvent event) {
				// TODO Auto-generated method stub
				hide();
			}
		});

	}

	public void add(Widget child) {
		// TODO Auto-generated method stub
		vp.add(child);

	}

	private void hide() {
		// TODO Auto-generated method stub
		for (Button widget : linked) {
			widget.setEnabled(true);
		}
		this.pop.hide();
	}

	public void show() {
		for (Button widget : linked) {
			widget.setEnabled(false);
		}
		pop.show();
	}

	public void setPopupPosition(int left, int top) {
		pop.setPopupPosition(left, top);
	}

	public void addLinkedWidget(Button btn) {
		linked.add(btn);
	}
}


Module:

public class MyPopTest implements EntryPoint {

	public void onModuleLoad() {

		final Button btn = new Button("button");
		RootPanel.get("pop").add(btn);

		btn.addClickHandler(new ClickHandler() {

			@Override
			public void onClick(ClickEvent event) {
				
				DragDropPopupPanel ddpp = new DragDropPopupPanel(btn);
				ddpp.addLinkedWidget(btn);
				ddpp.show();
			}
		});
	}
}

MyPopTest.gwt.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE module PUBLIC "-//Google Inc.//DTD Google Web Toolkit 2.7.0//EN" "http://gwtproject.org/doctype/2.7.0/gwt-module.dtd">
<module rename-to='stockwatcher'>
	<inherits name="com.google.gwt.user.User" />
	<inherits name='com.google.gwt.user.theme.clean.Clean' />
	<inherits name="com.google.gwt.uibinder.UiBinder" />
	<source path="client" />
	<entry-point class="com.zn.client.MyPopTest"></entry-point>
</module>

MyPopTest.html

<!doctype html>
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
<title>test</title>
<link rel="stylesheet" href="mypoptest.css">
<script type="text/javascript" language="javascript"
	src="mypoptest/mypoptest.nocache.js"></script>
</head>

<body>
	<h1>TEST</h1>
	<div id="pop"></div>

</body>
</html>

mypoptext.css

@CHARSET "UTF-8";

body {
	text-align: center;
	font-family: verdana, sans-serif;
}

h1 {
	font-size: 2em;
	font-weight: bold;
	color: #777777;
	margin: 40px 0px 70px;
	text-align: center;
}

.caption {
	padding: 0px;
	margin: 0px;
	background: #8E99A5;
}

.btn {
	padding: 0px;
	background: #8E99A5;
	text-align: center;
	width:20px;
	height:20px;
	color:#FFFFFF;
	margin: 0px;
}
















  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值