Como adicionar eventos em um vetor JPanel [RESOLVIDO]
5 respostas
InicianteJavaHenriqu
Olá pessoal, estou com uma dúvida…
…há alguns dias atrás postei uma dúvida de como clonar 100 JPanel http://www.guj.com.br/java/233382-como-clonar-100-cem-jpanel# , o pessoal me ajudou e consegui fazer. Só que agora estou querendo colocar um evento que me retorne qual dos índices do vetor JPanel que foi clicado, porque assim eu posso carregar uma imagem em um JLabel que está em um dos indíces do JPanel. Tentei fazer isto usando addActionListener e mouseclicked porém (quando não dava erro e nem rodava) ele não conseguia me retornar o indice que foi clicado.
Se alguém poder me ajudar aguardo uma resposta e desde já agradeço
exemplo de como pegar o indice do jpanel, o indice sera exibido na barra de titulo
publicclassTelaextendsJFrame{JPanel[]jPanels;publicTela(){super();jPanels=newJPanel[4];getContentPane().setLayout(newGridLayout(2,2));for(inti=0;i<4;i++){jPanels[i]=newJPanel();jPanels[i].addMouseListener(newMouseListenerImpl(i));//acaogetContentPane().add(jPanels[i]);}setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);pack();setVisible(true);}privateclassMouseListenerImplimplementsMouseListener{inti;publicMouseListenerImpl(inti){this.i=i;//indice do panel}publicvoidmouseClicked(MouseEvente){}publicvoidmousePressed(MouseEvente){setTitle("panel: "+i);//quando clika esse metodo é chamado, assim podera pegar o indice do array}publicvoidmouseReleased(MouseEvente){}publicvoidmouseEntered(MouseEvente){}publicvoidmouseExited(MouseEvente){}}publicstaticvoidmain(String[]args){newTela();}
Daniel_Girotto
Boa Noite
Eu faria desta forma, mas me parece gambiarra. Por favor se alguem souber a maneira correta de se fazer isso por favor me corrijam.
for(inti=0;i<vetorPainel.length;i++){vetorPainel[i]=newJPanel();vetorPainel[i].addMouseListener(newMouseAdapter(){publicvoidmouseClicked(MouseEvente){for(inti=0;i<vetorPainel.length;i++){if(e.getSource()==vetorPainel[i]){//retorno o painel que gerou o evento}}}});getContentPane().add(vetorPainel[i]);}}
Abraço!
E
elissonandrade
Cara, não é mais simples tu colocar tudo numa list ao invés de array e depois usar indexOf() em conjunso com o e.getSource(), saca? Fala aí se num entendeu a idéia.
Daniel_Girotto
ElissonAndrade, entendi sim, usei uma list como vc falou com o indexOf() e o getSource() assim:
Funcionou perfeitamente, Muito Obrigado!
InicianteJavaHenriqu
Muito obrigado pessoal os exemplos de vocês funcionaram perfeitamenta, obrigado a todos pelo apoio.
Eu consegui fazer também (com a ajuda de um outro post que eu achei aqui no forúm, onde se criava um JFrame com 60 botões simulando um cartão da Mega Sena), então eu vi que se dá para fazer um for e ir instanciando um JButton a cada loop e settando seu nome ex: