回答
想通了自己想要的东西,这里有一个例子:
public class DraggablePanel extends VerticalPanel {
private boolean isBeingDragged = false;
private boolean isBeingMoved = false;
private Element movingPanelElement;
public void setMovingPanelElement(Element movingPanelElement) {
this.movingPanelElement = movingPanelElement;
}
public DraggablePanel() {
super();
DOM.sinkEvents(getElement(), Event.ONMOUSEDOWN | Event.ONMOUSEMOVE
| Event.ONMOUSEUP | Event.ONMOUSEOVER);
}
@Override
public void onBrowserEvent(Event event) {
final int eventType = DOM.eventGetType(event);
if (Event.ONMOUSEOVER == eventType) {
if (isCursorResize(event)) {
getElement().getStyle().setProperty("cursor", "s-resize");
} else if (isCursorMove(event)) {
getElement().getStyle().setProperty("cursor", "move");
} else {
getElement().getStyle().setProperty("cursor", "default");
}
}
if (Event.ONMOUSEDOWN == eventType) {
if (isCursorResize(event)) {
if (!isBeingDragged) {
isBeingDragged = true;
DOM.setCapture(getElement());
}
} else if (isCursorMove(event)) {
DOM.setCapture(getElement());
isBeingMoved = true;
}
} else if (Event.ONMOUSEMOVE == eventType) {
if (!isCursorResize(event) && !isCursorMove(event)) {
getElement().getStyle().setProperty("cursor", "default");
}
if (isBeingDragged) {
int currentY = event.getClientY();
int originalY = getElement().getAbsoluteTop();
if (currentY > originalY) {
Integer height = currentY - originalY;
this.setHeight(height + "px");
}
} else if (isBeingMoved) {
RootPanel.get().setWidgetPosition(this,
event.getClientX(), event.getClientY());
}
} else if (Event.ONMOUSEUP == eventType) {
if (isBeingMoved) {
isBeingMoved = false;
DOM.releaseCapture(getElement());
}
if (isBeingDragged) {
isBeingDragged = false;
DOM.releaseCapture(getElement());
}
}
}
protected boolean isCursorResize(Event event) {
int cursor = event.getClientY();
int initial = getAbsoluteTop();
int height = getOffsetHeight();
return initial + height - 20 < cursor && cursor <= initial + height;
}
protected boolean isCursorMove(Event event) {
int cursor = event.getClientY();
int initial = movingPanelElement.getAbsoluteTop();
int height = movingPanelElement.getOffsetHeight();
return initial <= cursor && cursor <= initial + height;
}
}
它看起来像GWT-Ext小部件扩展包含您在Resizable Panel
只要看看这里:http://code.google.com/p/resizepanel/ 有一个功能齐全FF/IE/GChrome示例
这是与上面相同的代码。刚刚更新。 – McTrafik 2011-10-03 20:48:54
对于onBrowserEvent(...)中的上述代码,不要忘记插入
event.preventDefault();
或者你将有拖动Firefox图像的麻烦!
在现代浏览器中,您可以独立于GWT解决此问题。更容易和更清洁。只需使用CSS3 resize
属性,并指定overflow
值,而不是默认值(visible
)。
请注意,您可能会想要覆盖子元素的resize
属性,因此它们不会全部继承调整大小句柄。
在我的情况,我有这样的事情在我.ui.xml
文件:
<g:HTMLPanel addStyleNames="myTableContainer">
<g:ScrollPanel>
<g:FlexTable ui:field="myTable"></g:FlexTable>
</g:ScrollPanel>
</g:HTMLPanel>
而且在我的样式表是这样的(GWT增加了一些额外的div,所以你可能需要调整选择,为你的工作情况下):
.myTableContainer div {
resize: vertical;
overflow: auto;
}
.myTableContainer div div {
resize: none;
overflow: visible;
}
这给了我一个FlexTable
调整手柄在右下角,这样的:
用户可以向下拖动手柄以垂直调整包含我的FlexTable
的面板的大小。当然,代替vertical
,您也可以允许调整大小为horizontal
或both
。
如果你喜欢用UiBinder的方式编程,我相信你可以通过在代码中添加适当的样式来适应你的元素。
下降?在IE/Edge中不起作用(嘿,我说现代浏览器...和CSS3),但在most others。
与演示片段的好答案:http://stackoverflow.com/a/11164027/983430 – 2016-02-19 01:46:48
- 1. 调整面板的大小
- 2. 在gwt中调整布局面板的大小
- 3. extjs面板调整大小,而窗口大小调整
- 4. 使GWT Flextable列可调整大小
- 5. 在GWT中触摸调整大小面板
- 6. 在GWT中触摸事件调整大小面板
- 7. GWT Celltable调整大小
- 8. GWT SplitLayoutPanel调整大小
- 9. GWT - FlowPanel和调整大小
- 10. SplitContainer的面板调整大小问题
- 11. Ext JS的面板调整大小
- 12. 限制可调整大小的面板(比例和最小/最大大小)
- 13. jQuery可拖动和可调整大小的面板
- 14. YUI面板调整大小问题
- 15. 调整面板大小引导程序
- 16. Dotnetbar滑动面板 - 调整大小
- 17. 在java面板中调整svg大小
- 18. Extjs面板resizer-调整大小后
- 19. wxpython面板不调整大小
- 20. Extjs面板调整大小问题
- 21. 面板大小调整行为
- 22. 可调整大小的列/面板的jQuery内容?
- 23. Extjs:面板中的工具栏不调整大小浏览器调整大小
- 24. 如何调整面板上的Omnigrid在Mootools中调整大小
- 25. 可调整大小的画布或面板在scrollpane
- 26. 可调整大小的数字金字塔面板与Swing
- 27. 摆动面板可调整大小的差距
- 28. 放置可能会自动调整大小的面板
- 29. 如何制作可调整大小的面板?
- 30. 在GWT中调整TextInputCellCustom的大小
我不使用gwt-ext,只是gwt是我的方式,我认为dom操作可以做到这一点 – 2009-01-02 05:37:53