Evento mouseClicked

Tenho uma matriz de JTextField, uma matriz de JLabel, e um vetor de String

private JTextField[][] txtFields = new JTextField[20][30]; private JLabel[][] lbDica = new JLabel[20][1]; private String[] dicas = new String[20];

O meu problema consiste criar um evento de clique de mouse para 1 destes JLabels criados
haja visto que foram criados por codigo;

O que pretendo fazer é o seguinte: preencher o Vetor String[] dicas ( Usando o JOptionPane.ShowInputDialog disparado pelo clique em um JLabel)
Sendo que o Indice do Vetor String[]dicas deve Coincidir com o Indice de Coluna da Matriz de JLabel

Agradeço se puderem me ajudar!

    for (int i = 0; i < 20; i++) {
        lbDica[i][1].addMouseListener(new MouseListener() {
            public void mouseClicked(MouseEvent e) {
                dicas[i] = JOptionPane.showInputDialog(framePai, "Digite a dica : ");
            }
            ...
        });
    }

Este não pode ser o melhor método, mas espero que ajude!

Vlw!

É isso mesmo, funcionou, esta atribuindo o evento aos JLabels…

vlw Rummenigge …

Este é o meu metodo:

[code] private JLabel getlbDica(int r, int c) {
if (lbDica[r][c] == null) {
lbDica[r][c] = new JLabel();
lbDica[r][c].setText("Dica ");

        lbDica[r][c].addMouseListener((MouseListener) new MouseListener() {

            public void mouseClicked(MouseEvent e) {
                dicas[r] = JOptionPane.showInputDialog(null, "Digite a Dica :");
                pnlLabels.add(getlbDica(r, c), null);

            }

            public void mousePressed(MouseEvent e) {
            }

            public void mouseReleased(MouseEvent e) {
            }

            public void mouseEntered(MouseEvent e) {
            }

            public void mouseExited(MouseEvent e) {
            }
        });

    }
    return lbDica[r][c];
}

[/code]

Porem pede para tornar final os meus indices : r, c

dicas[r] = JOptionPane.showInputDialog(null, "Digite a Dica :"); pnlLabels.add(getlbDica(r, c), null);

O problema consiste em que estes indices nao podem ser final,
se tornar final, da estouro no meu Vetor:

   /*Não precisa passar como parâmetro a coluna, já que a matriz de Jlabel's tem apenas uma.*/
   1. private JLabel getlbDica(int r) {  
   2.       if (lbDica[r][1] == null) {  
   3.           lbDica[r][1] = new JLabel();  
   4.           lbDica[r][1].setText("Dica  ");  
   5.           /*Não precisa forçar a converção do Mouselistener, o método addMouseListener() já aceita um como parâmetro.*/
   6.           lbDica[r][1].addMouseListener(new MouseListener() {  
   7.   
   8.               public void mouseClicked(MouseEvent e) {  
   9.                   dicas[r] = JOptionPane.showInputDialog(null, "Digite a Dica :");  
  10.                   /*Esta linha de código não deveria estar aqui, já que você está tentando adicionar os labels em um painel.*/
                         //pnlLabels.add(lbDica[r][1], null);  
  11.   
  12.               }  
  13.   
  14.               public void mousePressed(MouseEvent e) {  
  15.               }  
  16.   
  17.               public void mouseReleased(MouseEvent e) {  
  18.               }  
  19.   
  20.               public void mouseEntered(MouseEvent e) {  
  21.               }  
  22.   
  23.               public void mouseExited(MouseEvent e) {  
  24.               }  
  25.           });  
  26.   
  27.       }  
  28.       return lbDica[r][1];  
  29.   }  

Tente fazer assim :

   for (int i = 0; i < 20; i++) {
       /*Chamará o método getlbDica() passando como parâmetro o índice [b]i[/b], ele criará um JLabel, colocará um MouseListener no mesmo, irá retorná-lo e depois o adicionará no painél que você criou*/
       pnlLabels.add(getlbDica(i), null);
       /*Espero que este painél "plnLabels" tenha um BoxLayout com PAGE_AXIS*/
   }

Espero que tenha ajudado!

VLW

Este é o metodo q adiciona os lbDica no Painel

[code]private JPanel gtPnlLabels() {
if (pnlLabels == null) {
GridLayout gridLayout = new GridLayout();
gridLayout.setRows(20);
gridLayout.setColumns(1);
gridLayout.setHgap(1);
gridLayout.setVgap(1);

        pnlLabels = new JPanel();
        pnlLabels.setLayout(gridLayout);

        for (int r = 0; r < 20; r++) {
             pnlLabels.add(getlbDica(r), null);
         }


    }
    return pnlLabels;
}[/code]

Infelizmente o problema com o Vetor permanece:

OBS: Nao estou habituado a programar desta maneira (criando td por codigo),
utilizo mais a parte grafica mesmo(arrastar componentes).
Mas neste caso em especifico de maneira alguma é viavel (arrastar componentes).

Faça com que sua matriz JLabel seja um vetor

private JLabel[] lbDica = new JLabel[20];  

e tente utilizar o BoxLayout no pnlLabels

BoxLayout box = new Boxlayout(pnlLabels, BoxLayout.PAGE_AXIS);
pnlLabels.setlayout(box);