Originariamente inviato da andbin
Sul tutorial c'è un esempio (TableRenderDemo.java) che imposta una larghezza alle colonne ma lo fa in modo concettualmente ridotto (e forse poco utile) perché si limita solo a calcolare il massimo tra la larghezza "preferita" dell'header e la larghezza "preferita" della prima riga.

E non è quello che dicevo io. Io parlavo di andare a prendere la larghezza "preferita" di ogni cella nella colonna e determinare quella massima. E magari (non l'ho detto prima perché subito non ci ho pensato) effettivamente si può inserire in questo calcolo anche la larghezza dell'header.
Infatti avevo messo che bisogna adattarlo al proprio modello di tabella.
un ciclo sulle colonne, uno interno sulle righe, si ottiene il componente che renderizza la cella, se ne prende la dimensione preferita, si aggiunge un 20 per bordi e cose strane. Finito questo ciclo sulle righe si prende la dimensione dell'header, aggiungendo anche qui un 20 per bordi.
Poi se ne fa il massimo e lo si imposta come dimensione preferita di quella colonna.
Avendo la tabella in un JDialog, dopo ho richiamato pack() (forse inutilmente).

Originariamente inviato da andbin
Quando un componente è in un JScrollPane succedono 2 cose: a) La dimensione "fisica" reale del componente è tutta la dimensione fisica della "viewport" del JScrollPane. b) JScrollPane si basa o sul fatto che il componente implementa Scrollable oppure sul "preferred size" del componente per sapere se/quanto "scrollare".
Io ho impostato AutoResizeMode della tabella a AUTO_RESIZE_OFF e la tabella mi appare con la dimensione voluta per le colonne. Se restringo la JDialog, compare correttamente la barra del JScrollPane in cui è inserita. Se allargo la JDialog, mi appare lo sfondo della JDialog. E non è il massimo.

Se imposto la dimensione minima delle colonne della tabella, e restringo la JDialog, non mi compare la barra di scorrimento orizzontale del JScrollPane
Lo so che sto sbagliando qualcosa, ma cosa non lo capisco.