Java GWT动态重新调整大小标头

Java GWT动态重新调整大小标头,java,javascript,gwt,Java,Javascript,Gwt,在datagrid中显示数据的程序上工作。已成功创建类似Excel的拖放可重新调整大小的标题。程序还包含从列表中添加或删除列的选项。问题如下: 添加或删除新列时,调整大小的列的宽度会缩小。这个bug几乎肯定来自创建头的类。当网格中只有几列时,可拖动区域(光标图标变为“列大小调整光标”)从列之间的精确中点向左偏移15-20px。随着列数的增加,该偏移量将稳步缩小,直到拖动图标正好出现在列之间的中点上,即它应该出现的位置 我使用映射存储和维护所有列宽,当可拖动区域偏移时,列宽在映射中测量错误(例如,

在datagrid中显示数据的程序上工作。已成功创建类似Excel的拖放可重新调整大小的标题。程序还包含从列表中添加或删除列的选项。问题如下:

添加或删除新列时,调整大小的列的宽度会缩小。这个bug几乎肯定来自创建头的类。当网格中只有几列时,可拖动区域(光标图标变为“列大小调整光标”)从列之间的精确中点向左偏移15-20px。随着列数的增加,该偏移量将稳步缩小,直到拖动图标正好出现在列之间的中点上,即它应该出现的位置

我使用映射存储和维护所有列宽,当可拖动区域偏移时,列宽在映射中测量错误(例如,测量宽度为100px的列可能作为70px放入映射中,这是它在添加/删除列时的渲染方式)。这种情况不会发生在偏移量为零的情况下,因此偏移量很可能是我痛苦的原因

当我试图通过从我设置的位置减去“左偏移”来移动可拖动区域的位置时,什么也没有发生

寻找关于如何调整我的可拖动区域位置的建议。代码如下:

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();
回来
}
}