o problema é o seguinte:
eu to fazendo um programa q tem varias jLabel, e quando o usuario clica nelas, o icone delas muda
o problema é que tem MUITA label, entao eu criei um metodo, eu queria que esse metodo identificasse qual label foi clicada e alterasse o icone dela, só que eu não to sabendo como ver qual das label foi clicada, o unico jeito que eu conseguiria seria fazendo um if pra cada label, mas assim fica meio inviavel, alguem tem alguma ideia?
no seu metodo listener vc tem um evento como parametro é vc so pegar o metodo getSource e comparar com todos suas variaveis de Jlabel, pq qdo ele achar a a referencia de variavel que seja igual ao objeto retornado, vc faz sua logica.
eu queria que quando esse evento fosse chamado, ele mandasse como parametro pro metodoa label que foi clicada, e o metodo ja mudasse o icone da label q ele recebeu como parametro.
se eu for fazer igual vc disse, dava pra continuar fazendo igual eu to fazendo e mandar a String como parametro, mas o problema é que eu teria que fazer aproximadamente 40 testes (um pra cada label que pode ser modificado) e eu tava evitando deixar o codigo tao grande assim, sera q n tem outra opção nao?
pelo que eu entendi desse codigo, a unica coisa que voce fez foi mudar o texto da label q foi clicada para “foi clicada” isso tb n adiantaria, pq eu teria q testar label por label pra ver qual está com este texto, o que eu preciso é mandar como parametro do metodo a label q foi clicada, pra q o metodo altere a label entendeu?
eu so fiz um exemplo para vc ver, basta vc criar um parametro no seu metodo que recebe um JLabel e dentro do metodo mouseClicked basta vc passar fazer um cast do object que vem do metodo getSource().
só mais uma coisa ^^"
eu coloquei o codigo igual voce fez no exemplo ai, mas n entendi mto bem o que eu fiz, ta funcionando, mas eu gostaria de saber o porque, tem como dar uma explicaçãozinha?
meu codigo ficou assim
o metodo:
public void aumentaPonto (JLabel label, int nivel) {
if ( nivel<5) {
label.setIcon(new javax.swing.ImageIcon(getClass().getResource("/imagens/nvl"+(nivel+1)+".png")));
}
}
minha duvida é nessa parte que eu to enviando o parametro (na linha 4 do evento)
pra que serve esse (Jlabel) ai antes do evt.getSource() ?
qual o nome disso?
pq q qdo eu coloco o (Jlabel) na frente do evt.getSource() funciona direitinho e ele manda exatamente a label que eu quero, e quando eu coloco só o evt.getSource() ele manda outra coisa?
tem algum lugar em que eu possa aprender melhor sobre isso?
foi mal a quantidade de duvidas, mas é que nunca tinha visto isso mesmo, e parece ser algo bem interessante
de qualquer jeito, muito obrigado mesmo, voce me ajudou muito xD
isso chama cast, se vc ver o metodo getSource(), ele tem retorno de Object, entao vc ta falando para o Java que vc que vc quer um obejto especifico, pois ele ta passando um objeto generico, mas vc pode fazer uma pesquisa no google que vc acha bastante coisa sobre o assunto.
[quote=yurifw]resolveu meu problema sim, muito obrigado xD
só mais uma coisa ^^"
eu coloquei o codigo igual voce fez no exemplo ai, mas n entendi mto bem o que eu fiz, ta funcionando, mas eu gostaria de saber o porque, tem como dar uma explicaçãozinha?
meu codigo ficou assim
o metodo:
public void aumentaPonto (JLabel label, int nivel) {
if ( nivel<5) {
label.setIcon(new javax.swing.ImageIcon(getClass().getResource("/imagens/nvl"+(nivel+1)+".png")));
}
}
[/quote]
Fala cara blz?
Bem, isso funciona porque em Java todo objeto (incluindo os componentes também), ganham um espaço na memória e uma referência (instância), sendo assim, na hora que vc usa o cast:
(JLabel) evt.getSource() ...
Você quer que o java pegue a referência desse objeto (no caso a label clicada) e transforme-a em JLabel para depois no método seu atributo setIcon() seja modificado, pegou?
Basicamente você disse pro java:
Pega a origem de quem foi clicado;
Muda o atributo (setIcon()) icone dele para… ;