ItemLIstener - PELO AMOR DE DEUS

4 respostas
K

Amigos.
Estou há horas tentando isto:

Primeiro eu declaro isto, antes do construtor da classe:

JMenuItem escolha = new JMenuItem;

Daí, dentro do construtor eu gero o MenuItem dinamicamente assim,

ItemSelecionado iselect = new ItemSelecionado(); escolha = new JMenuItem(); escolha.setText("MenuItem1"); MenuPrincipal.add(escolha); escolha.addItemListener(iselect);

A classe ItemSelecionado:

private class ItemSelecionado implements ItemListener { public void itemStateChanged( ItemEvent e) { u.atualiza(i); //executa um método... } }
Acontece que quando clico no menuItem nada ocorre e nem dá erro.
Não sei se está tudo certo ou se estou voando alto. Na realidade eu estou querendo gerar itens de menus dinamicamente. Com as instruções acima eu consigo colocar os MenuItens lá, no entanto não estou conseguindo implementar uma ação de clique de mouse sobre os mesmos, ou seja, não estou sabendo usar ItemListener, eu acho.
Alguém pode me ajudar?
Obrigado a todos.

4 Respostas

R

A sua classe ItemSelecionado está private , deve ser por isso que nao responde ao evento …deixa a classe public ou protected(se estiver no mesmo pacote)

K

Humm... não funcionou.
Na realidade eu adaptei uma classe aí do fórum, que captura todos os LookAndFeel instalados e os coloca em um menu. Só que os menus não funcionam. Quando mudo para botões rádio, retirando os menus, seguindo a mesma metodologia ItemListener, aí funciona.

Pegue o código abaixo, compile e veja o resultado:

import javax.swing.*;
import java.awt.event.*;
import java.awt.*;

public class LFDemo extends JFrame{
     private UIManager.LookAndFeelInfo[] looks = UIManager.getInstalledLookAndFeels();

     private JLabel lbLabel01 = new JLabel("Nome :");
     private JLabel lbLabel02 = new JLabel("E-mail :");
     private JTextField jtTexto01 = new JTextField( 10 );
     private JTextField jtTexto02  = new JTextField( 10 );
     private JButton jbOk = new JButton("Enviar");
     private JButton jbLim = new JButton("Limpar");        
     private JMenuItem[] escolha = new JMenuItem[  looks.length ];        
        
     private javax.swing.JMenu jMenu1;
     private javax.swing.JMenuBar jMenuBar1;
        
        
     public static void main( String[] args ){
         LFDemo lfd = new LFDemo();
         lfd.setVisible(true);
     }

     public LFDemo(){
         super("Selecione um LF");
            
         jMenuBar1 = new javax.swing.JMenuBar();
         jMenu1 = new javax.swing.JMenu();        
         jMenu1.setText("Menu");
         jMenuBar1.add(jMenu1);
         setJMenuBar(jMenuBar1);          
            
         Container c = getContentPane();
         c.setLayout ( new FlowLayout());
         c.add(lbLabel01);
         c.add(jtTexto01);
         c.add(lbLabel02);
         c.add(jtTexto02);
         c.add(jbOk);
         c.add(jbLim);            
         c.add(jMenuBar1);
         
         ItemSelecionado iselect = new ItemSelecionado();
         
         for (int i = 0; i < looks.length; i++){
             escolha[i] = new JMenuItem( looks[i].getName() );
             escolha[i].addItemListener( iselect );
             jMenu1.add( escolha[i] );            
         }
         setDefaultCloseOperation( EXIT_ON_CLOSE );
         setSize(200,250);
     }
        
        
     public void atualiza(int i){
         try {
             UIManager.setLookAndFeel(looks[i].getClassName());
             SwingUtilities.updateComponentTreeUI(this);
         }catch(Exception e) {
             e.printStackTrace();
         }
    }
      
        
    public class ItemSelecionado implements ItemListener {
        public void itemStateChanged( ItemEvent e) {
            for (int i=0; i < escolha.length; i++){
                if (escolha[i].isSelected()){
                    atualiza(i);
                }
            }
        }
    }
}
M

suponho que essa classe esteja no mesmo arquivo LFDemo.java, nesse caso só é possível existir uma única classe pública num arquivo fonte. Segundo, analisando teu código… ItemSelecionado implementa ItemListener mas para ativar um item de menu vc precisa de um ActionListener e o método que vc precisa implementar é o actionPerformed(ActionEvent evt). Se vc alterar isso aí acredito que vá funcionar :slight_smile:

K

Isto mesmo. Valeu cara.
Funcionou - troquei o ItemListener por ActionListener + em seguida ActionPerformed.
Ficou beleza.
Obrigado.

Criado 16 de junho de 2006
Ultima resposta 16 de jun. de 2006
Respostas 4
Participantes 3