Salut

je suis en train de faire un programme qui contient un JTextPane et un un vecteur de JLabel. À chaque fois que le nombre de lignes dans le JTextPane change, j'ajoute un nouveau JLabel dans le vecteur qui correspond au numéro de la nouvelle ligne ou je supprime le JLabel qui correspond à la ligne supprimée.

Le problème est que, lorsque je supprime un JLabel, l'espace qui utilise n'est pas libérée et je ne comprends pas pourquoi puisque normalement, c'est le gc qui s'en occupe lorsqu'il n'y a plus de référence à l'objet.

Voici ma fonction setLinesNumber qui se charge de modifier les numéro de lignes.

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
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
private void setLinesNumber(int newLinesNumber){
	//Calcule la taille minimum du nombre pour combler le reste avec des zéros
	int newNumberLength = ("" + newLinesNumber).length(); 
	if(newNumberLength < 2){
		newNumberLength = 2;
	}
	int oldNumberLength = ("" + m_lblLinesNumberList.size()).length();
	if(oldNumberLength < 2){
		oldNumberLength = 2;
	}
 
	//Ajoute les zéro au label de l'ordre de grandeur précédante lors du changement d'ordre de grandeur
	if(newNumberLength != oldNumberLength){
		for(int i = 0; i < m_lblLinesNumberList.size(); i++){
			m_lblLinesNumberList.get(i).setText("0" + m_lblLinesNumberList.get(i).getText());
		}
	}
 
	//Ajoute le numéro de chaque nouvelle ligne
	if(newLinesNumber > m_lblLinesNumberList.size()){
		for(int i = m_lblLinesNumberList.size(); i < newLinesNumber; i++){
			String numberToAdd = "";
			for(int j = 0; j < newNumberLength - ("" + (i + 1)).length(); j++){
				numberToAdd += "0";
			}
			numberToAdd += i + 1;
 
			JLabel lblTemp = new JLabel(numberToAdd);
			lblTemp.setForeground(Color.WHITE);
			m_lblLinesNumberList.add(lblTemp);
			m_pnlLinesNumber.add(m_lblLinesNumberList.get(m_lblLinesNumberList.size() - 1));
		}
	}
	//Enlève le numéro de chaque ligne supprimée
	else if(newLinesNumber < m_lblLinesNumberList.size()){
		for(int i = m_lblLinesNumberList.size(); i > newLinesNumber; i--){
			m_pnlLinesNumber.remove(m_lblLinesNumberList.get(i - 1));
			m_pnlLinesNumber.updateUI();
			m_lblLinesNumberList.remove(i - 1);
		}
	}
}