Pegando valor exato em um ArrayList?

Senhores (a)…

Eu tenho o seguinte ambiente.

Um container JPanel1 que possui varios outros JPanels…tipo, JPanel1…2…3…4…5…10…20.

Eu criei um jPopUpMenu com o ItemMenu para verificar esses jPanel, ai no evento MouseRelease do JPopUp eu quero pegar o nome exato do JPanel que foi clicado.
Por exemplo, se alguem clicar no jPanel30 eu vou saber.
Pra isso estou tentando usar a seguinte logica.

private void InformaçõesActionPerformed(java.awt.event.ActionEvent evt) {
        ArrayList panels = new ArrayList();        
        String nomePanels;
        for (int x = 0; x < jPanel1.getComponents().length;x++){
            panels.add(jPanel1.getComponent(x).getName());
            if (jPanel1.getComponent(x).getName().equals(panels.get(x))){
                nomePanels = (String) panels.get(x);
                System.out.println(nomePanels);
            }
        }
    }
       

Ainda não consigo pegar o nome do jPanel que foi clicado, se puderem me ajudar a encontrar uma solução eu agradeço…

obrigado.

private void InformaçõesActionPerformed(java.awt.event.ActionEvent evt) { if (evt.getSource() instanceof JPanel) { JPanel pnlClicado = (JPanel)evt.getSource(); System.out.println(pnlClicado.getName()); } }

Opa Vini…obrigado pela atenção.

Testei seu exemplo aqui e ainda não tive resultados… porem, gostei bastante pq é bem curto o seu codigo…kkkk !!!

Ainda estou testando para ver se consigo ter resultados, qquer dica por favor, poste ae.

obrigado mais uma vez.

P.S: Vcs sabem de um bom canal java no irc em pt-br, o guj tem algum ??? Eu estou no #java-br…Nesse momento que estou aprendendo java, toda ajuda é bem vinda. Obrigado.

Você colocou um nome nos paineis com o setName?

Sim sim, todos os panels tem o nome começando por panel1 e vai até o 50…E quando tento pegar esses valores com jPanel1.getComponent(0).getName(), ele me traz o panel1 …e assim vai, conforme eu mudo o indice do metodo getComponent().getName() ele vai me trazendo o panel conforme o nome.

jPanel1.getComponent(0).getName() -> panel1
jPanel1.getComponent(1).getName() -> panel2
jPanel1.getComponent(2).getName() -> panel3

e assim vai…

obrigado.

Colocou um breakpoint ali para ver o que não funcionou? Por que uma coisa é certa, se o evento ocorreu no painel (mas não dentro de um componente dele) e foi disparado, então, com certeza, o evt.getSource() será o seu painel, com o nome dentro.

Vini,…desculpe a ignorancia. Mas não estou entendendo como fazer, o jPanel é o container dos panels1, 2, 3…etc. O jPopUpMenu eu coloquei no jPanel pq ele é o container.

novamente desculpe a ignorancia, mas realmente naum estou entendendo sua logica de como fazer.

obrigado.

Ah, desculpe, nesse caso o source é o popup menu. Foi noobice minha, pensei que o evento era de clique no JPanel.

Então o que muda é:

private void InformaçõesActionPerformed(java.awt.event.ActionEvent evt) { if (evt.getSource() instanceof JPopup) { JPopup popup = (JPopup)evt.getSource(); if (popup.getInvoker() instanceof JPanel) { JPanel pnlClicado = (JPanel)popup.getInvoker(); System.out.println(pnlClicado.getName()); } } }

ups Vini…noobice minha tbm…Eu to tentando usar um JMenuItem do jPopUpMenu…:blush:

O que vem no evt.getSource()?

Imprime na tela:

Só pra gente ver exatamente que objeto chega.

Bom, tem outra forma também. Você pode adicionar o JPanel como propriedade do mouseListener:

[code]public class JPanelActionListener implements ActionListener {
private JPanel panel;
public JPanelMouseListener(JPanel jpanel) {
this.panel = panel;
}

public void actionPerformed(ActionEvent evt) {
//Agora é só usar panel aqui.
}
}[/code]

Na hora de criar esse listener e associar para o menu, você faz:

[code]JMenuItem mniXyz1 = new JMenuItem();
mniXyz1.addActionListener(new JPanelActionListener(painel1));

JMenuItem mniXyz2 = new JMenuItem();
mniXyz2.addActionListener(new JPanelActionListener(painel2));[/code]

Como cada menu terá seu próprio listener já com o painel certo associado, fica fácil tratar.

javax.swing.JMenuItem…como te falei, o bicho e um JMenuItem…rs !

Então siga a dica que te dei acima e associe cada painel a ao seu respectivo ActionListener. :slight_smile:

Provavelmente dá para pegar o getParent() desse JMenuItem, que deve ser um JMenu.
Ainda assim, está ficando horrivelmente trabalhoso. Acho melhor só associar o JPanel ao ActionListener mesmo.

Vini, bom…Deixa eu ver se entendi.

Da maneira que vc flw para associar todos ao actionlistener respectivo, mesmo assim eu terei que saber o nome dos panels que estou enviando naum é ???

Tbm to achando bem trabalhoso esse negocio de pegar o nome de cada panel que o JPopUpMenu->JMenuItem clica…rapaz, ta tenso…!

kkkk !! Mas vou seguindo na luta, qdo conseguir se conseguir…posto aqui como fiz. Ahhh! Lembrando q eu to usando NetBeans6 para produção e q sou noobie no java…kkk

obrigado novamente, vc é 10.

Mas aí é só pegar pelo panel.getName().

Posta aí o código de onde vc cria os menus.

Opa Vini,

Eu to usando NetBeans, entaum eu arrastei um componente JPopUpMenu para um JPanel(jPanel1) que recebe os outros JPanel(panel1,2…3…4…etc…), ai nesse JPopUpMenu eu cliquei com o direito e adicionei um JMenuItem com o texto (informações) nome variavel (informacao). Bem, essa e a maneira que fiz aqui ate agora usando a ferramenta.

Esses panels que saum criados dentro de jPanel1, cada um tem um nome iniciado com panel1 e vai ate panel50, o q eu quero e pegar o numero exato do panel clicado no jpopupmenu->jmenuitem(informacao).

Eu vi q vc usou instanceof, ai sai lendo aqui para que serve, e pelo que entendi ele serve para dizer a um componente que ele é de outro componente, é isso ??? se naum for me corrija.

Entaum usando esse raciocinio, eu tenho que criar um jmenuitem para cada panel ??? E acho q é o q vc ta tentando me dizer.

Por isso, to na pesquisa aqui pra entender melhor como isso funciona, pois como eu falei, to vindo de outra linguagem…No momento estou lendo seus exemplos e tentando entende-los para ver se consigo chegar a um ponto chave para fazer td aqui.

Obrigado Vini, vc é o cara.

Sim, eu pensei que vc estava criando os vários paineis dinamicamente, num for.

Não entendo quase nada de Netbeans. Não sei qual é a melhor maneira de fazer o que sugeri pela IDE.

Vini, quando eu faço.

jPanel1.getComponent(0).getName(); // retorna panel1
jPanel1.getComponent(1).getName(); // retorna panel2

E por ai vai…Ou seja, quando eu mudo o indicie consigo pegar o nome do panel, o problema e fazer isso automatico…obrigado !

ae Vini, eu acho q o que estou tentando fazer num vai ter jeito naum…ja to quase desistindo e tentando encontrar uma outra maneira…Vou dar mais uma pesquisada pra ver se encontro uma solucao, se encontrar posto aqui.

obrigado.