Bonjour,
j'ai créé un JTable auquel j'ai associé un TableModel qui ne renvoie que des objets de type String. Pour chaque colonne du JTable, j'ai défini une taille par les instructions:
Par sécurité, même si cela n'a servi à rien, j'ai aussi indiqué que la classe String n'avait aucun "default renderer".
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 m_contribTable.setDefaultRenderer(String.class, null); m_contribTable.setAutoResizeMode(JTable.AUTO_RESIZE_OFF); // pour faire apparaitre l'ascenseur du bas m_contribTable.getColumnModel().getColumn(0).setPreferredWidth(20); m_contribTable.getColumnModel().getColumn(1).setPreferredWidth(50); m_contribTable.getColumnModel().getColumn(2).setPreferredWidth(100); m_contribTable.getColumnModel().getColumn(3).setPreferredWidth(150); m_contribTable.getColumnModel().getColumn(4).setPreferredWidth(300); m_contribTable.getColumnModel().getColumn(5).setPreferredWidth(150); m_contribTable.getColumnModel().getColumn(6).setPreferredWidth(400); m_contribTable.getColumnModel().getColumn(7).setPreferredWidth(40); m_contribTable.getColumnModel().getColumn(8).setPreferredWidth(120); m_contribTable.getColumnModel().getColumn(9).setPreferredWidth(140); m_contribTable.getColumnModel().getColumn(10).setPreferredWidth(150); m_contribTable.getColumnModel().getColumn(11).setPreferredWidth(150);
Malgré tout, dans certains cas, comme par exemple lorsque je souhaite supprimé une ligne, ce que je fais (dans le modèle) par
les largeurs de colonne sont perdues. On dirait en fait que dans ce cas là il utilise un "renderer" qui sort de je ne sais où. Visiblement le problème est généré par le fireTableRowsDeleted() sachant que cela se passe aussi avec les autres fonctions fireXXXX(). J'ai par exemple essayé avec un fireTableDataChanged() qui m'a fait la même chose en étant appelé par cette function. Mais qui, pourtant, ne me fait pas cet effet de bord lorsqu'il est appelé par une fonction interne (lorsque j'effectue un tri sur les lignes).
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 public void keyPressed(KeyEvent arg0) { if (arg0.getKeyChar() == KeyEvent.VK_DELETE) { int currentRow = this.m_data.currentRow(); if (currentRow >= 0) { this.m_data.deleteRow(currentRow); this.fireTableRowsDeleted(currentRow, currentRow); } } }
Partager