Есть ли способ вызвать JXTable.packAll() таким образом, чтобы не блокировать поток swing?

StackOverflow https://stackoverflow.com/questions/5343364

Вопрос

Я отображаю большое количество данных в JXTable из самого SwingX ( Свингкс ) проект.После загрузки данных я вызываю packAll() в таблице, но с 200 сотнями столбцов и 30 000 записями, это может занять 5 секунд или больше.Я вызываю это из потока swing, что означает, что пользовательский интерфейс заблокирован на эти 5 секунд.Я пытался дозвониться packAll в фоновом потоке, и, как я и подозревал, это имеет нечетные побочные эффекты.После звонка packAll(), когда я навожу курсор мыши на таблицу, кажется, что все числа в таблице постоянно обновляются до разных чисел.Есть ли какой-либо способ, которым я могу получить разумный пользовательский опыт работы с JXTable при упаковке столбцов такой большой таблицы?

Это было полезно?

Решение

Эта петля в ColumnFactory Убивает тебя:

for (int r = 0; r < getRowCount(table); r++) {
        Component comp = renderer.getTableCellRendererComponent(table, table
                .getValueAt(r, column), false, false, r, column);
        width = Math.max(width, comp.getPreferredSize().width);
}

Вы, вероятно, должны просто установить ширину столбца самостоятельно или, возможно, просто загрузить одну строку, упаковать таблицу, а затем загрузить остальные данные.

Другие советы

Джей, не знаю, какую часть ответа вы отметили как правильный, вы имеете в виду с «отличной идеей» - по крайней мере, немного неясно. Два предложения были:

а) Сделайте это самостоятельно: листья открывают вопрос о том, когда и где и как именно б) двухэтапная загрузка, что в конечном итоге сводится к измерению только первой загруженной строки. Который уже предусмотрен в ColoonFactory, пожалуйста, прочитайте DOC API для getRowCount (jxtable).

Даже если ваш контекст не такой равномерный, как решать простым переопределением getRowCount (), настраиваемое ColumnFactory-это путь: вы можете реализовать любую измерение, которую вы выберете :-)

@Z7SG: ничего не «убивает» ничего - как вы могли заметить Приспособитесь к вашим потребностям.

Ура, Джанетт

200 столбцов и 30 000 рядов займут минутку для визуализации. Я не думаю, что вы сможете устранить время ожидания, если вы не сделаете что -то радикальное. Лучше всего может быть не показывать таблицу, пока данные не будут загружены.

Вы говорите, у вас есть 200 колонок?Ну, я сомневаюсь, что все 200 видны одновременно.Ну и что, если вы просто упакуете первые 10-20 столбцов?Это должно сократить время задержки на 1/10 или 1/20.

Если JXTable не позволяет вам упаковывать отдельные столбцы, вы можете попробовать использовать Регулятор столбцов таблицы который, я думаю, обеспечивает ту же функциональность в обычной JTable.Это позволяет вам упаковывать отдельные столбцы.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top