C'è un modo per chiamare JXTable.packAll () in un modo che non bloccare il filo swing?
-
27-10-2019 - |
Domanda
I sono la visualizzazione sacco di dati in JXTable
dal href="http://java.net/projects/swingx/" rel="nofollow"> SwingX progetto packAll
chiamata su un thread in background e come sospettavo, così facendo ha lato dispari colpisce. Dopo aver chiamato packAll()
, quando mi passa il mouse sopra il tavolo, tutti i numeri della tabella sembrano essere in costante aggiornamento a numeri diversi. C'è un modo per ottenere un'esperienza utente ragionevole con in JXTable quando imballaggio le colonne di una tabella di grandi dimensioni come ad.
Soluzione
Questo ciclo in ColumnFactory
ti sta uccidendo:
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);
}
Si dovrebbe probabilmente solo impostare la larghezza delle colonne da soli, o forse solo caricare una riga, imballare il tavolo e quindi caricare il resto dei dati.
Altri suggerimenti
Jay, non so quale parte della risposta è stata contrassegnata come corretta si intende con "idea eccellente" - è almeno un po 'poco chiaro. Le due proposte sono state:
a) fai da te: lascia aperta la questione di quando e dove e come esattamente b) due fasi di carico, che in ultima analisi si riduce a misurare solo la prima riga caricata. Che è previsto ColumnFactory già, si prega di leggere la documentazione delle API per GetRowCount (JXTable).
Anche se il contesto non è più uniforme da risolvere con una semplice sostituzione di GetRowCount (), un ColumnFactory personalizzato è la strada da percorrere: è possibile implementare qualsiasi strategia di misurazione che si sceglie: -)
@ z7sg: nulla di "uccidere" qualsiasi cosa - come si potrebbe aver notato se tu avessi letto la misura api doc ;-) cellulare non è del tutto banale, un'implementazione di default non può andare bene tutto, è per questo che ColumnFactory è stato progettato per l'estensione : sottoclasse e di adeguarsi alle vostre esigenze.
Saluti Jeanette
200 colonne e 30.000 righe sta andando a prendere un momento per il rendering. Non credo che si sta per essere in grado di eliminare il tempo di attesa a meno che non si fa qualcosa di drastico. La cosa migliore potrebbe essere quella di non mostrare il tavolo fino a quando viene caricato i dati.
Tu dici di avere 200 colonne? Beh dubito che tutti i 200 sono visibili in una sola volta. Che importa se avete appena imballare la prima colonna 10-20? Questo dovrebbe ridurre il ritardo di 1/10 o 1/20.
Se JXTable non consente di assemblare singole colonne allora si può provare a utilizzare il Tabella Colonna regolatore che credo fornisce la stessa funzionalità su una JTable regolare. Esso consente di assemblare le singole colonne.