Domanda

I sono la visualizzazione sacco di dati in JXTable dal href="http://java.net/projects/swingx/" rel="nofollow"> SwingX progetto packAll() sul tavolo, ma con 200 cento colonne e 30.000 record potrebbe prendere 5 secondi o più. Chiamo questo dal filo oscillazione quali mezzi l'interfaccia utente è rinchiuso per quei 5 secondi. Ho provato 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.

È stato utile?

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top