J'ai une classe, appelée boardGUI, elle a une liste de 64 labels (comme un échiquier). Chaque étiquette correspond à une tuile spécifique sur le tableau.La propriété de JLabel ne change pas
List<JLabel> labelList = new ArrayList<>();
Dans une autre classe, je suis en train de mettre une partie de ces étiquettes méthode opaque, avec setOpaque(true)
, chaque fois que je clique sur l'une des étiquettes (à l'intérieur) méthode mouseClicked.
JLabel l1 = boardGUI.labelList.get(1);
l1.setOpaque(true);
Le problème est que, même si l'étiquette fait référence l1 droit dans labelList (j'ai vérifié avec le débogueur), il n `faire un changement visuel (sur l'interface graphique). Mais, si j'essaie de définir l'opacité des étiquettes dans la classe boardGUI, cela fonctionne.
for (int i=0;i<64;i++)
labelList.get(i).setOpaque(true);
Où le problème peut-il être?
ici est la classe où je suis en train d'appliquer les changements:
public class Controller {
private Board board = new Board();
private BoardGUI boardGUI = new BoardGUI();
public Controller() {
boardGUI.setVisible(true);
boardGUI.addLabelListener(new LabelListener());
}
class LabelListener implements MouseListener{
@Override
public void mouseClicked(MouseEvent arg0) {
JLabel l1 = boardGUI.labelList.get(1);
l1.setOpaque(true);
}
classe BoardGUI (il y a plus de code, mais il est pas pertinent):
public class BoardGUI extends JFrame{
List<JLabel> labelList = new ArrayList<>();
public BoardGUI() {
createView();
}
public void createView() {
createLabels(mainPanel);
}
public void createLabels(JPanel mainPanel) {
int startX = 100;
int startY = 87;
int x = 100;
int y = 87;
int j = 0;
for (int i=0;i<64;i++) {
JLabel label = new JLabel();
label.setBounds(x , y , 62, 62);
labelList.add(label);
mainPanel.add(label);
if ((i == 7*(j+1) +j)) {
x = startX;
y = startY + 62 *(i/7);
j=j+1;
}
else {
x = x+62;
}
}
}
Définissez-vous la couleur d'arrière-plan des étiquettes? – JensS
Comment avez-vous eu l'instance de classe qui contient les étiquettes? Il semble que vous travailliez sur différentes instances de la classe qui contient 64 étiquettes. De plus, votre labelList n'est pas statique, ce qui signifie qu'il peut y avoir plusieurs instances de liste existantes dans la mémoire. –
@NaveedKamran. La classe où j'essaye d'appliquer les changements aux étiquettes est réellement le contrôleur de l'interface graphique. 'BoardGUI boardGUI privé = new BoardGUI();' – Tudor