关于在执行“打包所有列”调用后发生的情况,我遇到了一个使用 JXTable 的特定场景(甚至可能是 JTable 问题)。
“打包所有列”工作正常,但是当我手动缩小列宽时,在收到下一个 TableModelEvent 时,我修改的列宽总是变大。我注意到 JTable 的私有 setWidthsFromPreferredWidths() 最终被调用,这看起来像是罪魁祸首。
同样,仅在我选择“打包所有列”后才会出现此问题。这是一个已知的错误还是“打包所有列”的预期行为?
关于在执行“打包所有列”调用后发生的情况,我遇到了一个使用 JXTable 的特定场景(甚至可能是 JTable 问题)。
“打包所有列”工作正常,但是当我手动缩小列宽时,在收到下一个 TableModelEvent 时,我修改的列宽总是变大。我注意到 JTable 的私有 setWidthsFromPreferredWidths() 最终被调用,这看起来像是罪魁祸首。
同样,仅在我选择“打包所有列”后才会出现此问题。这是一个已知的错误还是“打包所有列”的预期行为?
我实际上在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();
}
}