卡片是JButtons,我試圖向每個人添加一個actionListener,因爲我將它們添加到了世界中。這些卡片是在二維數組中,我用for循環添加它們。然而,我無法獲得某張牌,因爲當我在actionListener類中使用table [r] [c]時,出現一個錯誤,提示「從內部類引用的局部變量必須是最終的或有效的最終結果」。但是這是一個循環,所以我不能做出最後的決定。任何幫助,將不勝感激在內部類中引用「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循環中創建一個新的final變量。 – tkausl
我相信在java 8中,您可以將非最終變量傳遞到內聯類 – RobotKarel314