Je crée un jeu d'échecs sur mon temps libre, et après que les utilisateurs effectuent une action (ie déplace un morceau), je mets à jour la fenêtre (JFrame) pour afficher la nouvelle position de la pièce. Cependant, dans ma fonction de mise à jour, j'utilise la fonction add (Component) pour ajouter les JLabels à un JPanel. Par conséquent, à chaque mise à jour, plusieurs JLabels sont ajoutés au composant car la fonction add() empile JLabels.Empêcher JPanel d'ajouter plusieurs fois ImageIcon
BufferedImage img = null;
try{
img = ImageIO.read(getClass().getResource(theTiles.get(i).getPiece().getImagePath()));
}catch(IOException e){
e.printStackTrace();
}
ImageIcon icon = new ImageIcon(img);
JLabel label = new JLabel();
label.setIcon(icon);
//Here is where the error is:
theTiles.get(i).add(label);
label.repaint();
this.window.validate();
this.window.repaint();
Parce que cette fonction est appelée chaque fois qu'il ya une mise à jour, « theTiles.get (i) .add (label) » est d'ajouter plusieurs JLabels au JPanel chaque fois qu'il est appelé. Je l'ai essayé de définir un JLabel unique en tant que variable privée de la classe afin qu'il remplace juste que JLabel au lieu d'ajouter plus quand il a besoin de mettre à jour par exemple:
public class TilePanel extends JPanel{
//JLabel variable
private JLabel someLabel = new JLabel();
TilePanel(){
//Add the component to the Panel
this.add(someLabel);
}
public Jlabel setLabel(JPanel newLabel){
//setLabel function to use in the "update" function
this.someLabel = newLabel
}
...
//Use setLabel instead of add(Component)
theTiles.get(i).setLabel(label);
Cependant, cela ne provoque aucune image apparaisse . Où vais-je mal? (Note: C'est la première fois que je travaille avec des interfaces graphiques)
Vous avez changé la référence (à someLabel), mais l'étiquette d'origine est toujours à l'écran (et je ne sais pas comment cela se compilera), lorsque vous changez l'étiquette, vous devez supprimer l'ancien composant et ajouter le nouveau – MadProgrammer
Vous pouvez également changer le icône du label – MadProgrammer