JPopupMenu com itens dinamicos

2 respostas
T

Olá a todos do fórum, dei uma pesquisada aqui no fórum mas não encontrei nada relacionado com minha dúvida. Bem vamos a ela:

Estou desenvolvendo uma aplicação aqui e faço uso de JPopupMenu, o que muda é que a quantidade de itens podem variar, ou seja, os jMenuItem podem ser adicionados dinamicamente pelo usuário. Testei primeiro em hardcode para ver se estou seguindo o caminho certo, o problema é na hora do evento. No caso se eu clicar em um dos menus do popup será feita uma substituição em uma String de um TextArea (conforme observado no código abaixo), o que estou enfrentando é que somente o último ActionPerformed é disparado em todos.

Segue trecho do código:

//Adicionando MenuItem ao Popup
        for (int i = 0; i < 5; i++) {
            
            item = new JMenuItem("<TAG-[" + i + "]><TAG/>");
            
            //evento de cada menuItem
            item.addActionListener(new ActionListener() {
                @Override
                public void actionPerformed(ActionEvent ae) {
                    
                    if (!jTextArea2.getSelectedText().isEmpty()) {
                        //Ações de processamento da String
                        StringBuilder texto = new StringBuilder(jTextArea2.getText());
                        String selecionado = jTextArea2.getSelectedText();
                        selecionado = Text(item) + selecionado + Text(item);
                        texto.replace(jTextArea2.getSelectionStart(), jTextArea2.getSelectionEnd(), selecionado);
                        jTextArea2.setText(texto.toString());
                    }
                }
            });
            jPopupMenu1.add(item);

A pergunta: como faço para que cada item se comporte como desejado? sei que se a quantidade de menuItem fosse estática eu programaria o evento para cada, mas como fazer isto para o cenário exposto?

Grato a atenção.

P.S. se postei no lugar errado desculpem-me o erro.

2 Respostas

E

Uma forma bem bobinha de fazer isso é criar uma classe separada (não anônima) que implemente o ActionListener, e em cujo construtor você passe, por exemplo, o índice do item do menu que você criou. Aí para cada item você associa uma instância diferente dessa classe.

T

Uma boa alternativa, vou implementar aqui, depois posto o resultado ou venho com mais dúvidas.

Grato.

Criado 8 de janeiro de 2013
Ultima resposta 8 de jan. de 2013
Respostas 2
Participantes 2