Ja fiz uma pergunta mais ou menos parecida com essa em outro forum aqui do guj, o ViniGodoy por sinal um cara gente boa até umas horas, tentou me ajudar nessa missão que esta parecendo quase impossivel.
Usando o NetBeans eu tenho um JPanel chamado jPanel1. Nesse jPanel1 eu tenho 50 outros jPanels com o seName() iniciado em panel1 que vai ate o panel50…panel1, panel2, panel3…panel10…panel50.
Nesse jPanel1 eu coloquei um JPopUpMenu com um JMenuItem, agora eu preciso saber o getName() do jPanel que eu clicar…
Por exemplo:
se eu clicar no panel20 o JMenuItem vai me trazer o getName do "panel20"
se eu clicar no panel17 o JMenuItem vai me trazer o getName do "panel17"
se eu clicar no panel36 o JMenuItem vai me trazer o getName do “panel36”
A solução que propuz é simples, mas não sei como implementar no Netbeans (pq uso Eclipse).
Seria simplesmente criar um listener para cada menu, já associado ao painel que o compõe:
publicclassMenuListenerimplementsActionListener{privateJPanelowner;publicMenuListener(JPanelowner){this.owner=owner;}publicvoidactionPerformed(ActionEvente){Stringnome=owner.getName();//E aqui ele faz o que quiser com o nome}}
Claro que na hora de criar o Listener, ele deveria especificar o painel. E aí é que está a parte que não sei fazer no Netbeans.
fernandopaiva
Vini, eu entendi em partes sua idéia de como solucionar esse problema…O que eu ainda não sei é como associar os menus aos panels criados. Aquela ideia que vc me deu sobre instanceof é show, li bastante e acabei por entender o q instanceof faz.
Se os panels fossem criados 1 a 1 de maneira estatica acho que seria mais facil, pq assim eu criaria um JMenuItem para cada 1, porem eu tenho um while que os faz…
veja:
inti=0;while(i<=50){
//criapanels
}
Encontrei um exemplo no pastebin.
Veja:
finalJPopupMenupopup=newJPopupMenu();JMenuItemmenuItem=newJMenuItem("A popup menu item");popup.add(menuItem);menuItem=newJMenuItem("Another popup menu item");popup.add(menuItem);MouseListenerpopupListener=newMouseAdapter(){@OverridepublicvoidmousePressed(MouseEvente){maybeShowPopup(e);}@OverridepublicvoidmouseReleased(MouseEvente){maybeShowPopup(e);}privatevoidmaybeShowPopup(MouseEvente){if(e.isPopupTrigger()){popup.show(e.getComponent(),e.getX(),e.getY());System.out.println("Componente: "+e.getComponent().getName());}}};jPanel1.addMouseListener(popupListener);jPanel2.addMouseListener(popupListener);jPanel3.addMouseListener(popupListener);//...
É isso que vc esta propondo Vini ???
obrigado.
fernandopaiva
bem, primeiro quero agradecer ao Vini por sua paciencia em me ajudar e tbm quero agradecer a um outro amigo que me ajudou bastante que atende pelo nome de listerine…Com a ajuda desses consegui resolver meu problema… ! Obrigado a vcs, o java so cresce com sua ajuda.
Segue abaixo o codigo que consegui resolver meu problema.
publicvoidiniciaPanels()throwsSQLException{//pega conexao com bdConnectioncon=Conexao.getConnection();PreparedStatementstm=con.prepareStatement("select * from panels");ResultSetrs=stm.executeQuery();MouseListenerpopUpListener=newMouseAdapter(){@OverridepublicvoidmousePressed(MouseEvente){maybeShowPopup(e);System.out.println("Componente: "+e.getComponent().getName());}@OverridepublicvoidmouseReleased(MouseEvente){maybeShowPopup(e);}privatevoidmaybeShowPopup(MouseEvente){if(e.isPopupTrigger()){popUpGetPanels.show(e.getComponent(),e.getX(),e.getY());System.out.println("Componente: "+e.getComponent().getName());}}};while(rs.next()){JPanelpanel=newJPanel();JLabellabel=newJLabel();panel.setName(rs.getString("nome_panel"));panel.setText(panel.getName());panel.setBorder(BorderFactory.createBevelBorder(javax.swing.border.BevelBorder.RAISED));panel.setSize(104,104);panel.add(label);panel.addMouseListener(popUpListener);jPanel1.add(panel);}jPanel1.revalidate();}