Quindi sto lavorando con un JTable
, che è legato a un modello di dati personalizzato del mio. Questo è tutto funzionale, ma il problema che sto avendo è che ogni volta che apporto una modifica alla tabella (firing tableDataChanged, tableStructureChanged, ecc.) Tutte le larghezze delle colonne si resettano ai valori predefiniti. Capisco dalla ricerca che questo ha a che fare con il TableColumnModel
assegnato di default. Al di fuori di questa reimpostazione, sono soddisfatto della funzionalità dello DefaultTableColumnModel
, ma vorrei solo mantenere la larghezza delle colonne se un utente dovrebbe ridimensionarle (trascinando il bordo dell'intestazione della colonna).Come mantenere le larghezze delle colonne specificate dall'utente in una tabella J?
Sono a conoscenza di setPreferredWidth()
per TableColumns e sono riuscito a farlo correttamente; Suppongo che la mia domanda sia quale tipo di evento dovrei ascoltare per salvare e impostare questa larghezza preferita. Ho provato ad aggiungere un PropertyChangeListener
all'intestazione della tabella, ma otterrei uno StackOverflow ogni volta che ho provato a ridimensionare (presumo che fosse in esecuzione in modo ricorsivo). Sto perfettamente bene con l'aggiunta di un membro dati aggiuntivo nel modello dati per le larghezze delle colonne, e memorizzandolo lì, ma non so quando/come impostare queste larghezze in modo che non vengano sovrascritte dallo fireTableStructureChanged()
, ecc. Pensieri?
Prima di chiudere il processo, leggere le larghezze delle colonne e salvarle in un file delle proprietà. Quando apri il tuo processo, leggi il file delle proprietà e, se esiste, imposta le larghezze della colonna. Potrebbe essere necessario estendere il DefaultTableColumnModel in modo da poter controllare le larghezze della colonna. –
Effettua questo in qualsiasi chiamata a fireTableStructureChanged(), non solo all'inizio del programma, quindi se aggiungo o rimuovo le colonne nel modello di dati (dove deve rigenerare le colonne) lo fa. Ho provato a sovrascrivere 'fireTableStructureChanged()' per impostare manualmente le larghezze delle colonne, ma apparentemente non ha alcun effetto. Immagino di non essere esattamente sicuro di dove si trova questa generazione di colonne e dove sovrascriverlo. – kcoppock
Ho sempre fatto le larghezze delle colonne basate sui dati. Se trovo qualcosa, fornirò una risposta. –