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
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!
/*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*/
}
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).