0

关于在执行“打包所有列”调用后发生的情况,我遇到了一个使用 JXTable 的特定场景(甚至可能是 JTable 问题)。

“打包所有列”工作正常,但是当我手动缩小列宽时,在收到下一个 TableModelEvent 时,我修改的列宽总是变大。我注意到 JTable 的私有 setWidthsFromPreferredWidths() 最终被调用,这看起来像是罪魁祸首。

同样,仅在我选择“打包所有列”后才会出现此问题。这是一个已知的错误还是“打包所有列”的预期行为?

4

1 回答 1

0

我实际上在http://www.coderanch.com/找到了我的问题的答案

它涉及覆盖columnMarginChanged(ChangeEvent)方法以确保列的getWidth()getPreferredWidth()同步:

@Override
public void columnMarginChanged(final ChangeEvent e)
{
    super.columnMarginChanged(e);

    if (isEditing())
    {
        removeEditor();
    }
    TableColumn resizingColumn = null;
    if (tableHeader != null)
    {
        resizingColumn = tableHeader.getResizingColumn();
    }
    if (resizingColumn != null)
    {
        if (autoResizeMode == AUTO_RESIZE_OFF)
        {
            resizingColumn.setPreferredWidth(resizingColumn.getWidth());
        }
        else
        { 
            SwingUtilities.invokeLater(new Runnable()
            {

                @Override
                public void run()
                {
                    doLayout();
                    repaint();
                }
            });
        }
    }
    else
    {
        resizeAndRepaint();
    }
}
于 2015-11-18T15:43:32.883 回答