Я пытаюсь использовать цикл for для генерации и добавления ActionListeners для jButtons вместе с некоторым необычным редактированием массива и захватом произвольного массива
при этом используется некоторая пользовательская функция (все из которых работают)
for(int i = 0; i < data.length; i++){
//make new jButton with function button to set it up
JButton newGenButton = button(0, (i+1)*20, 100, (i+2)*20,data[i][0][1]);
//add action listner
newGenButton.addActionListener(
new ActionListener(){
public void actionPerformed(ActionEvent e){
//empty string
String gen = "";
//this gets the name (data[i][i2][0]) and uses the ran function to get another random string from the array (data[i][i2])
for(int i2 = 1; i2 < data.length; i2++){
gen+= data[i][i2][0]+": "+ran(data[i][i2])+"\n\n";
}
//this add the text to pre-defined JTextArea
text.setText(gen);
}
});
}
справочные функции здесь, если это полезно
private static JButton button(int x1, int y1, int x2, int y2, String text){
JButton newButton = new JButton(text);
newButton.setBounds(x1,y1,x2-x1,y2-y1);
dp("button \""+text+"\" built");
return newButton;
}
private static String ran(String[] input) {
return input[1+rand.nextInt(input.length-1)];
}
при попытке компиляции я сталкиваюсь с ошибкой
Main.java:127: error: local variables referenced from an inner class must be final or effectively final
gen+= data[i][i2][0]+": "+ran(data[i][i2])+"\n\n";
^
по сути, мне нужен способ получитьслушатель действия знает значение, которым является int i, или просто знает, какие данные [i] [] [] (которые различны для каждой кнопки)