Eu quero criar uma interface gráfica que exiba os conteúdo de uma pasta, parecido com o windows explorer. Eu queria muito fazer isso usando botões. Ou seja, eu construo um método que receba uma url da pasta que terá seu conteúdo exibido e transformo tudo dentro dela em botões. Porém, ao transformar tudo em botões, eu preciso adicionar ActionListeners para cada um desses botões, de forma que quando eu clicar em um deles, ele exiba o conteúdo que está dentro da pasta que ele se refere. (Não caso de ser um arquivo, não precisa fazer nada.) Assim, usando a recursividade, eu só preciso criar um método e tudo se resolve. Veja o código:
[code]public void mudar(String url) { //mudar() é um método que transforma tudo dentro de uma pasta (Pastas e arquivos) em botões.
Button btn = null;
panel_1.setLayout(new GridLayout()); //Como eu uso recursividade, preciso resetar o contentPanel para apagar tudo que tinha antes.
String s = "";
try {
DirectoryStream<Path> paths = Files.newDirectoryStream(Paths.get(url)); //
for (Path path : paths) { /*Minha intenção com esse for each, é dar um valor para o botão, add um ActionListener ao botão e depois add o botão ao panel_1. Dessa maneira, cada botão recebe um ActionListener*/
btn = new Button(path.toString()); //Não tem problema o texto do botão ficar com o endereço absoluto
btn.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
mudar(path.toString()); /*Aqui é que tá o meu problema. O Eclipse diz que eu não posso fazer referencia a uma variável não-final. (Cannot refer to a non-final variable path inside an inner class defined in a different method). Mas se eu transformar path em final, quando eu precisar setar o valor dela, não vai funfar.*/
}
});
panel_1.add(btn);
}
} catch (IOException e) {
e.printStackTrace();
}
}[/code]
Resumindo os comentários aqui fora, na hora de adicionar o ActionListener a um botão, eu não consigo por que não posso fazer referência à variável path, pois ela não é final. Alguém tem noção de com me livrar desse problema?