防止JXTable自动调整列宽
Preventing JXTable from automatically adjusting column widths
关于我执行 'Pack All Columns' 调用后发生的情况,我 运行 遇到了 JXTable 的特定场景(甚至可能是 JTable 问题)。
'Pack All Columns' 工作正常,但是当我手动缩小列宽时,在收到下一个 TableModelEvent 时,我修改的列宽总是变大。我注意到 JTable 的私有 setWidthsFromPreferredWidths() 最终被调用,这看起来像是罪魁祸首。
同样,这个问题只在我 select 'Pack All Columns' 之后出现。这是已知错误还是 'Pack All Columns' 的预期行为?
我实际上在 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();
}
}
关于我执行 'Pack All Columns' 调用后发生的情况,我 运行 遇到了 JXTable 的特定场景(甚至可能是 JTable 问题)。
'Pack All Columns' 工作正常,但是当我手动缩小列宽时,在收到下一个 TableModelEvent 时,我修改的列宽总是变大。我注意到 JTable 的私有 setWidthsFromPreferredWidths() 最终被调用,这看起来像是罪魁祸首。
同样,这个问题只在我 select 'Pack All Columns' 之后出现。这是已知错误还是 'Pack All Columns' 的预期行为?
我实际上在 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();
}
}