Запрет JXTable от автоматической настройки ширины столбца
Есть определенный сценарий, с которым я столкнулся с JXTable (возможно, это даже проблема JTable) относительно того, что происходит ПОСЛЕ того, как я выполняю вызов "Pack All Columns".
"Упаковать все столбцы" работает нормально, но когда я вручную уменьшаю ширину столбца, при следующем получении TableModelEvent измененная ширина столбца всегда становится БОЛЬШЕ. Я замечаю, что в конечном итоге вызывается приватный setWidthsFromPreferredWidths() JTable, который выглядит как преступник.
Опять же, эта проблема возникает только после выбора "Упаковать все столбцы". Это известная ошибка или предполагаемое поведение "Упаковать все столбцы"?
1 ответ
Я на самом деле нашел ответ на свой вопрос на 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();
}
}