Карты JButtons, и я пытаюсь добавить к ним ActionListener, когда я добавляю их в мир. Карты находятся в 2D-массиве, и я добавляю их для циклов. Однако я не могу получить определенную карту, потому что, когда я использую таблицу [r] [c] в классе actionListener, я получаю сообщение об ошибке: «Локальные переменные, на которые ссылается внутренний класс, должны быть окончательными или фактически окончательными». Но это цикл for, поэтому я не могу сделать его окончательным. Любая помощь будет оцененаСсылка на целые числа из цикла «for» внутри внутреннего класса
for(int r = 0;r<2;r++){
for(int c=0;c<5;c++){
int rNum = gen.nextInt(cards.size());
table[r][c]= new Card("deck",cards.get(rNum), 2);
cards.remove(rNum);
add(table[r][c]);
table[r][c].addActionListener(
new ActionListener()
{
public void actionPerformed(ActionEvent event){
BufferedImage img2 = null;
BufferedImage img = null;
int pos = table[r][c].getName().indexOf(".");
String s = table[r][c].getName().substring(0,pos) + "S" + table[r][c].getName().substring(pos, table[r][c].getName().length());
try{
img = ImageIO.read(new File(table[r][c].getPat()+"/"+table[r][c].getName()));
}catch(IOException e){
e.printStackTrace();
}
try{
img2 = ImageIO.read(new File(table[r][c].getPat()+"/"+s));
}catch (IOException e){
e.printStackTrace();
}
if(!table[r][c].isAlive()){
ImageIcon imgFace2 = new ImageIcon(img2);
table[r][c].setIcon(imgFace2);
table[r][c].changeState();
number++;
}else{
ImageIcon imgFace = new ImageIcon(img);
table[r][c].setIcon(imgFace);
table[r][c].changeState();
number--;
}
}
}
);
Я предлагаю вам создать класс верхнего уровня для вашего ActionListener, а не использовать его встроенный. Затем вы можете передать то, что вам нужно, в конструктор этого класса. –
Но вы можете создать новую конечную переменную в своем for-loop. – tkausl
И я верю в java 8, вы можете передавать не конечные переменные в встроенный класс – RobotKarel314