Java GWT动态重新调整大小标头
在datagrid中显示数据的程序上工作。已成功创建类似Excel的拖放可重新调整大小的标题。程序还包含从列表中添加或删除列的选项。问题如下: 添加或删除新列时,调整大小的列的宽度会缩小。这个bug几乎肯定来自创建头的类。当网格中只有几列时,可拖动区域(光标图标变为“列大小调整光标”)从列之间的精确中点向左偏移15-20px。随着列数的增加,该偏移量将稳步缩小,直到拖动图标正好出现在列之间的中点上,即它应该出现的位置 我使用映射存储和维护所有列宽,当可拖动区域偏移时,列宽在映射中测量错误(例如,测量宽度为100px的列可能作为70px放入映射中,这是它在添加/删除列时的渲染方式)。这种情况不会发生在偏移量为零的情况下,因此偏移量很可能是我痛苦的原因 当我试图通过从我设置的位置减去“左偏移”来移动可拖动区域的位置时,什么也没有发生 寻找关于如何调整我的可拖动区域位置的建议。代码如下:Java GWT动态重新调整大小标头,java,javascript,gwt,Java,Javascript,Gwt,在datagrid中显示数据的程序上工作。已成功创建类似Excel的拖放可重新调整大小的标题。程序还包含从列表中添加或删除列的选项。问题如下: 添加或删除新列时,调整大小的列的宽度会缩小。这个bug几乎肯定来自创建头的类。当网格中只有几列时,可拖动区域(光标图标变为“列大小调整光标”)从列之间的精确中点向左偏移15-20px。随着列数的增加,该偏移量将稳步缩小,直到拖动图标正好出现在列之间的中点上,即它应该出现的位置 我使用映射存储和维护所有列宽,当可拖动区域偏移时,列宽在映射中测量错误(例如,
public void onPreviewNativeEvent(NativePreviewEvent event)
{
NativeEvent nativeEvent = event.getNativeEvent();
nativeEvent.preventDefault();
nativeEvent.stopPropagation();
String eventType = nativeEvent.getType();
int clientX = nativeEvent.getClientX();
if (eventType.equals("mousemove") && this.mousedown)
{
int absoluteLeft = this.el.getAbsoluteLeft();
int offsetLeft = this.el.getOffsetLeft();
int newWidth = clientX - absoluteLeft;
newWidth = newWidth < width ? width : newWidth;
this.table.setColumnWidth(this.col, newWidth + "px");
return;
}
if (eventType.equals("mousemove") || eventType.equals("mousedown"))
{
Element eventTargetEl = nativeEvent.getEventTarget().cast();
int absoluteLeft = eventTargetEl.getAbsoluteLeft();
int offsetWidth = eventTargetEl.getOffsetWidth();
// WIDTH of the clickable location is determined ("width" = constant: 20px)
if (clientX > (absoluteLeft) + offsetWidth - width)
{
if (eventType.equals("mousedown"))
{
this.mousedown = true;
}
else
{
//setting cursor icon to col-resize - this MUST relate to draggable area
setCursor(this.el, Cursor.COL_RESIZE);
}
}
else
{
removeHandler();
return;
}
}
public void onPreviewNativeEvent(NativePreviewEvent事件)
{
NativeEvent NativeEvent=event.getNativeEvent();
nativeEvent.preventDefault();
nativeEvent.stopPropagation();
字符串eventType=nativeEvent.getType();
int clientX=nativeEvent.getClientX();
if(eventType.equals(“mousemove”)和&this.mousedown)
{
int absoluteLeft=this.el.getAbsoluteLeft();
int offsetLeft=this.el.getOffsetLeft();
int newWidth=clientX-绝对左;
新宽度=新宽度<宽度?宽度:新宽度;
this.table.setColumnWidth(this.col,newWidth+“px”);
回来
}
if(eventType.equals(“mousemove”)| | eventType.equals(“mousedown”))
{
元素eventTargetEl=nativeEvent.getEventTarget().cast();
int absoluteLeft=eventTargetEl.getAbsoluteLeft();
int offsetWidth=eventTargetEl.getOffsetWidth();
//确定可点击位置的宽度(“宽度”=常数:20px)
if(clientX>(绝对左)+偏移宽度-宽度)
{
if(eventType.equals(“mousedown”))
{
this.mousedown=true;
}
其他的
{
//将光标图标设置为col resize-这必须与可拖动区域相关
setCursor(this.el,Cursor.COL_RESIZE);
}
}
其他的
{
removeHandler();
回来
}
}