Adicionando um mouseListener a um componente desenhado com o método paintComponent
Estou tentando adicionar um mouseListener a cada Jlabel que crio e depois passá-los para o paintComponent.
private List<JLabel> createTiles (){
int x = 10;
int y = 0;
List<JLabel> tiles = new ArrayList<>();
//Number of tiles painted
for (Integer i : gameModelHandle.numbersToDigits()) {
JLabel tile = new JLabel("" + i, JLabel.CENTER);
tile.setSize(new Dimension(140, 140));
tile.setFont(tile.getFont().deriveFont(45f));
tile.setLocation(x, y);
tile.addMouseListener(new MouseAdapter() {
@Override
public void mouseClicked(MouseEvent e) {
GameModel.currentSum(i);
changeColour();
}
@Override
public void mouseReleased(MouseEvent e) {
if (getBounds().intersects(tile.getBounds())){
int number = gameModelHandle.combineDigits(i, Integer.parseInt(tile.getText()));
GameModel.currentSum(number);
}
}
});
tiles.add(tile);
x+=150;
}
return tiles;
}
Como você pode ver, o número de blocos nunca é o mesmo, motivo pelo qual não posso criá-los manualmente; Eu tenho um loop para isso.
Eu pinto-os assim:
protected void paintComponent(Graphics g) {
super.paintComponent(g);
this.removeAll();
for (JLabel i : createTiles()) {
g.setColor(tileColours[activeColourIndex]);
g.fillRoundRect(i.getX(), i.getY(), i.getWidth(), i.getHeight(), 20, 20);
this.add(i);
}
revalidate();
}
E funciona, o problema é que meus mouseListeners parecem não funcionar. Tentei depurar e nunca cheguei ao método mouseClick.
Qualquer contribuição ou orientação seria apreciada.