Java 防止JXTable自动调整列宽

Java 防止JXTable自动调整列宽,java,jtable,swingx,tablecolumn,jxtable,Java,Jtable,Swingx,Tablecolumn,Jxtable,关于执行“打包所有列”调用后发生的情况,我在JXTable中遇到了一个特定的场景(甚至可能是JTable问题) “打包所有列”工作正常,但当我随后手动减小列宽时,在收到下一个TableModelEvent时,我修改的列宽总是变大。我注意到JTable的私有setWidthsFromPreferredWidths()最终被调用,这看起来像是罪魁祸首 同样,此问题仅在我选择“打包所有列”后发生。这是一个已知的错误还是“打包所有列”的预期行为?我在 它涉及重写columnMarginChanged(C

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

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


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

我在

它涉及重写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();
    }
}