Запрет 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();
    }
}
Другие вопросы по тегам