Verificar instância de um Icon em uma Label

Tenho uma Label com uma imagem, selecionando com um Menu Popup posso selecionar um ou mais de um Item(Imagem) e adicionar ao Label em uma determinada posição dessa forma:

https://fbcdn-sphotos-a.akamaihd.net/hphotos-ak-ash3/535744_295816230510719_100002470335918_58609282_355146182_n.jpg

Antes de adicionar a imagem em cima do dente eu queria verificar se ela já estava adicionada, se tivesse ao clicar no Item ele removia a imagem.

Eu tava tentando dessa forma:

[code] if (lb_Dente18.getIcon().equals(lbImagem) == false) {

                lb_Dente18.add(lbImagem);
                lbImagem.setBounds(new Rectangle(-1, -32, icon.getIconWidth(), icon.getIconHeight()));                    
                
            } else {
                lbImagem.setIcon(null);
                lbImagem.repaint();
  }     

[/code]
Só que não deu certo, quando eu clico no mesmo Item ele adiciona outra imagem.

[]'s

lbImagem é um JLabel e lb_Dente18.getIcon() é um ImageIcon, e você está tentando comparar maçãs com laranjas. “equals” sempre vai voltar false porque você está tentando comparar coisas de tipos diferentes.

Faltou a primeira parte, os dois são um ImageIcon:

[code] ImageIcon icon = new javax.swing.ImageIcon(getClass().getResource("/br/autodontov1/Procedimentos/Amputacao/18.png"));
JLabel lbImagem = new JLabel(icon);

            if (lb_Dente18.getIcon().equals(lbImagem) == false) {

                lb_Dente18.add(lbImagem);
                lbImagem.setBounds(new Rectangle(-1, -32, icon.getIconWidth(), icon.getIconHeight()));                    
                
            } else {
                lbImagem.setIcon(null);
                lbImagem.repaint();
           }                
        }[/code]

Meu detector de tipos de expressões diz-me que lbImagem é um JLabel e lb_Dente18.getIcon() é um ImageIcon :slight_smile:

Ops :?, os dois são um Label.

private javax.swing.JLabel lb_Dente18; lb_Dente18 = new javax.swing.JLabel();

É claro que lb_Dente18 é um JLabel.

Mas lb_Dente18.getIcon() retorna um ImageIcon.

Provavelmente você está com sono…

Aaaa entendi kkkk

Então sem fazer essa comparação com o lb_Dente18 e o lbImagem como eu verifico se no Label já foi adicionado algum Icon ?

[]'s

Espera um pouquinho.

Você quer saber se já foi adicionado algum icon (nesse caso, getIcon() retorna algo diferente de null) ou se o ícone é igual ao que você carregou?

Se for tentar checar se é igual, mesmo comparar 2 objetos ImageIcon com “equals” não é garantia de sucesso - isso porque não sei como é implementado o “equals” na classe ImageIcon. Acho que ele não é nem reimplementado da classe Object, e compara apenas para ver se as instâncias são a mesma ou não.

Acredito que se você carregar 2 vezes o mesmo ícone do mesmo arquivo com new ImageIcon, como você fez, irá retornar 2 instâncias diferentes (embora mostrando exatamente a mesma coisa na tela) e elas irão comparar, usando o “equals”, como diferentes, não iguais.

Não é melhor você estabelecer um outro tipo de controle?

Queria verificar se já foi adicionado um ícone, pq se eu já tiver a imagem na Label fazer a verificação e em vez de adicionar outra imagem ele remove a que estava.

Eu criei agora mais dois itens de menu pra sair disso logo, um com adicionar e outro com remover.

Bom, dessa forma forma de criar os dois menus deu certo. O ruim é que o código vai ficar enorme D:

Valeu pela ajuda :smiley:

[]'s