Oui, j'utilise pack() et ne je fait jamais de preferentSize(), c'est tout automatisé avec pack()
Version imprimable
Oui, j'utilise pack() et ne je fait jamais de preferentSize(), c'est tout automatisé avec pack()
Attention AUTO_RESIZE_ALL_COLUMNS ne permet pas aux colonnes d'ajuster leur taille à leur contenu : il s'agit d'un mode de redimensionnement automatique lorsque la taille de la JTable change (ici toutes les colonnes s'agrandissent ou se rapetissent proportionnellement). On peut trouver des composants qui font ça (TableColumnAjuster).
J'ai trouvé :
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24 spreadsheet.setAutoResizeMode( JTable.AUTO_RESIZE_OFF ); for (int column = 0; column < spreadsheet.getColumnCount(); column++) { TableColumn tableColumn = spreadsheet.getColumnModel().getColumn(column); int preferredWidth = tableColumn.getMinWidth(); int maxWidth = tableColumn.getMaxWidth(); for (int row = 0; row < spreadsheet.getRowCount(); row++) { TableCellRenderer cellRenderer = spreadsheet.getCellRenderer(row, column); Component c = spreadsheet.prepareRenderer(cellRenderer, row, column); int width = c.getPreferredSize().width + spreadsheet.getIntercellSpacing().width; preferredWidth = Math.max(preferredWidth, width); // We've exceeded the maximum width, no need to check other rows if (preferredWidth >= maxWidth) { preferredWidth = maxWidth; break; } } tableColumn.setPreferredWidth( preferredWidth );
Oui, tu pouvais aussi le faire toi-même.
Euh je viens de voir un petit truc, quand je refais un ajouter fichier il me génère les onglets à la suite au lieu de tout renouveler puis ré-créer :
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30 private void btnLoad_click() { FileChooser fc = new FileChooser(); Component tabHDMT = IhmConverter.getHDMT(); File selectedFile; try { tabHDMT.setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR)); boolean filled = false; int i = 0; do { // DBS message after the first selection if (i > 0) { JOptionPane .showConfirmDialog(null, Final.getMsgDBS(), Final.getMsgDBSTitle(), JOptionPane.WARNING_MESSAGE); } // choose a file selectedFile = fc.fileChooser(); if (selectedFile != null) { // create the tabs filled = utiMethods.populateJTabbedPane(selectedFile); } i++; } while (selectedFile != null && !filled); } finally { // when is wait off tabHDMT.setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR)); } }
Il y a avait un removeAll() à un moment, que tu as du virer par inadvertance, ou déplacer.
devrait suffire.Code:
1
2 Component tabHDMT = IhmConverter.getHDMT(); tabHDMT.removeAll()
Vu que j'ai déjà le titre pour la ligne "dbs" j'aimerai ne pas le reprendre, car comme je l'ai là, il met le titre suivie de la même ligne suivit de la suite donc mes 2 premières lignes sont le même et je voudrais éviter cela.
Est-ce que je dois faire comme avec le hideColumn ? ou je peux faire un +1 à un moment donné ?
Dans sheetToJtable, il suffit d'ajouter un continue, qui va aller directement à la fin du bloc de l'itération, ainsi le if (index >= 0) ne sera exécuté qu'à partir l'itération suivante. Ce n'est pas terrible pour la compréhension du fonctionnement de la boucle, mais c'est encore le plus simple car il n'y a qu'une ligne à ajouter et rien changer d'autre (sinon, il faudrait un booléen, ou jouer sur la valeur de index, ou changer la structure des if comme dans la solution suivante).
Du coup, comme la ligne index==0 n'a pas besoin d'être traitée dans l'itération où elle est détectée, on peut aussi faire (c'est plus propre, plus de continue) :Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34// recovery of adequate lines final Object[][] recorvery = new Object[nbRows][nbColumns]; int index = -1; // indicates the index of the next line to recover, except of -1 int hideColumn = 0; //memorize the DBS column for hide it for (int i = 0; i < nbRows; i++) { if (index < 0) { // we found nothing, so we are searching for (int j = 0; j < nbColumns; j++) { if ("dbs".equals(obj[i][j])) { // we found a line that contains "dbs" index = 0; hideColumn = j; break; // needn't to search in this line } } if (index == 0) { // the first line including "dbs" : the headers // Recovering the headers header = new String[nbColumns-1]; for (int j = 0, col=0; j < nbColumns; j++) { if ( j!=hideColumn ) { header[col++] = String.valueOf(obj[i][j]); } } continue; // do not repeat title in data } } if (index >= 0) { // we found a line that contained "dbs", then copy // copy the lines after the first that contains "dbs" including this one for (int j = 0; j < nbColumns; j++) { // copy the full line recorvery[index][j] = obj[i][j]; } index++; // we advance in the recovery table } }
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31 // recovery of adequate lines final Object[][] recorvery = new Object[nbRows][nbColumns]; int index = -1; // indicates the index of the next line to recover, except of -1 int hideColumn = 0; //memorize the DBS column for hide it for (int i = 0; i < nbRows; i++) { if (index < 0) { // we found nothing, so we are searching for (int j = 0; j < nbColumns; j++) { if ("dbs".equals(obj[i][j])) { // we found a line that contains "dbs" index = 0; hideColumn = j; break; // needn't to search in this line } } if (index == 0) { // the first line including "dbs" : the headers // Recovering the headers header = new String[nbColumns-1]; for (int j = 0, col=0; j < nbColumns; j++) { if ( j!=hideColumn ) { header[col++] = String.valueOf(obj[i][j]); } } } } else { // we found a line that contained "dbs", then copy // copy the lines after the first that contains "dbs" including this one for (int j = 0; j < nbColumns; j++) { // copy the full line recorvery[index][j] = obj[i][j]; } index++; // we advance in the recovery table } }
Ok merci :)
J'ai trouvé mieux côté taille des colonnes avec ce code :
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32 // spreadsheet column adjust int col = 0, larg = 0, row = 0, tableX = 0, width = 0; JTableHeader header = spreadsheet.getTableHeader(); Enumeration<TableColumn> columns = spreadsheet.getColumnModel() .getColumns(); spreadsheet.setAutoResizeMode(JTable.AUTO_RESIZE_OFF); while (columns.hasMoreElements()) { // maximum length of the text or title of a column TableColumn column = (TableColumn) columns.nextElement(); col = header.getColumnModel().getColumnIndex( column.getIdentifier()); width = (int) spreadsheet .getTableHeader() .getDefaultRenderer() .getTableCellRendererComponent(spreadsheet, column.getIdentifier(), false, false, -1, col).getPreferredSize().getWidth(); for (row = 0; row < spreadsheet.getRowCount(); row++) { int preferedWidth = (int) spreadsheet .getCellRenderer(row, col) .getTableCellRendererComponent(spreadsheet, spreadsheet.getValueAt(row, col), false, false, row, col) .getPreferredSize().getWidth(); width = Math.max(width, preferedWidth); } header.setResizingColumn(column); larg = width + spreadsheet.getIntercellSpacing().width; larg = larg + 20; column.setWidth(larg); }