Saber qual o JPanel esta sendo clicado?

3 respostas
fernandopaiva

Salve galera…

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”

Como conseguir fazer isso ???

obrigado.

3 Respostas

ViniGodoy

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:

public class MenuListener implements ActionListener {
    private JPanel owner;

   public MenuListener(JPanel owner) {
      this.owner = owner;
   }
 
   public void actionPerformed(ActionEvent e) {
      String nome = 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:

int i = 0;
while(i <=50){
   //cria panels
}

Encontrei um exemplo no pastebin.

Veja:

final JPopupMenu popup = new JPopupMenu();
    JMenuItem menuItem = new JMenuItem("A popup menu item");
    popup.add(menuItem);
    menuItem = new JMenuItem("Another popup menu item");
    popup.add(menuItem);

    MouseListener popupListener = new MouseAdapter() {
      @Override
      public void mousePressed(MouseEvent e) {
         maybeShowPopup(e);
      }

      @Override
      public void mouseReleased(MouseEvent e) {
        maybeShowPopup(e);

      }

      private void maybeShowPopup(MouseEvent e) {
        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.

public void iniciaPanels() throws SQLException {
//pega conexao com bd
Connection con = Conexao.getConnection();
PreparedStatement stm = con.prepareStatement("select * from panels");
ResultSet rs = stm.executeQuery();

MouseListener popUpListener = new MouseAdapter() {
@Override
public void mousePressed(MouseEvent e) {
maybeShowPopup(e);
System.out.println("Componente: " + e.getComponent().getName());
}

@Override
public void mouseReleased(MouseEvent e) {
maybeShowPopup(e);
}

private void maybeShowPopup(MouseEvent e) {
if (e.isPopupTrigger()) {
popUpGetPanels.show(e.getComponent(), e.getX(), e.getY());
System.out.println("Componente: " + e.getComponent().getName());

}
}
};
while(rs.next()){
JPanel panel = new JPanel();
JLabel label = new JLabel();
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();
}

Obrigado novamente, vcs são 10.

Criado 21 de outubro de 2010
Ultima resposta 23 de out. de 2010
Respostas 3
Participantes 2