Problemas com ActionEvent

2 respostas
L

Galera , montei um MDI simples e criei dois JMenu e dois JMenuItem , na hora de pegar o evento desses caras , só vem o do primeiro Menu , o do segundo não vem…

Segue o código…é a primeira vez que posto código aqui , vamos ver se consigo…

import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;
import java.beans.PropertyVetoException;

import javax.swing.JDesktopPane;
import javax.swing.JFrame;
import javax.swing.JInternalFrame;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JOptionPane;

public class ExemploMdi extends JFrame {

	private JMenuBar       mainMenu = null;
	private JMenu          mnPrinc  = null;
	private JMenu          mnFinalizar   = null;
	private JMenuItem      mnNovo   = null;
	private JMenuItem      mnSair   = null;
	private JMenuItem      mnTeste  = null;
	private JDesktopPane   mdiPane  = null;
	public static int nrForm = 1;
	public static int fy = 0;
                public static int fx = 0;

    /**
     * Método que será executado quando o menu
     * for clicado, que neste caso será gerado
     * um novo frame MDI e será exibido no
     * JDesktopPane.
     * @param e Recebe o evento
     */
    private void mnNovoPerformed(ActionEvent e) {
        /* Veja que aki estou usando a classe base
         * porém poderia ser por exemplo um tela sua
         * que estivesse extendendo JInternalFrame,
         * algo tipo:
         * JInternalFrame mdiFrame = new MeuFrameCadastroCliente();
         */

		JOptionPane.showMessageDialog(null,e.getActionCommand());

		if (e.getActionCommand().equals("Novo")){

			JInternalFrame mdiFrame = new JInternalFrame(
					"Novo Frame MDI #"+ String.valueOf(nrForm++),
					true, //resizable
					true, //closable
					true, //maximizable
					true  //iconifiable
			);

			mdiFrame.setSize(new Dimension(300, 250));
			mdiFrame.setDefaultCloseOperation(JInternalFrame.DISPOSE_ON_CLOSE);
			mdiFrame.setVisible(true);
			getMdiPane().add(mdiFrame);
			mdiFrame.setLocation(fx,fy);

			fx += 10;
			fy += 10;

			try {
				mdiFrame.setSelected(true);
			} catch (PropertyVetoException ex) {}

		} else if (e.getActionCommand().equals("Sair")){

				JOptionPane.showMessageDialog(null,"TESTE SAINDO");
				//JFrame.DISPOSE_ON_CLOSE

		}
    }


    private void addEvent() {
        mnNovo.addActionListener(
            new ActionListener(){
                public void actionPerformed(ActionEvent e) {
                    mnNovoPerformed(e);
                }
            }
        );
    }

    private JDesktopPane getMdiPane() {
        if (mdiPane == null) {
            mdiPane = new JDesktopPane();
        }
        return mdiPane;
    }

    private JMenuBar getMainMenu() {
        if (mainMenu == null) {

            mainMenu = new JMenuBar();

            mnPrinc = new JMenu("Principal");
            mnPrinc.setMnemonic(KeyEvent.VK_P);

            mnFinalizar = new JMenu("Finalizar");
            mnFinalizar.setMnemonic(KeyEvent.VK_F);

            mnNovo  = new JMenuItem("Novo");
            mnNovo.setMnemonic(KeyEvent.VK_N);

            mnSair = new JMenuItem("Sair");
            mnSair.setMnemonic(KeyEvent.VK_S);

            mnPrinc.add(mnNovo);
            mnFinalizar.add(mnSair);
            mainMenu.add(mnPrinc);
            mainMenu.add(mnFinalizar);
        }

        return mainMenu;
    }

    private void initialize() {

        this.getContentPane().setLayout(new BorderLayout());
        this.getContentPane().add(getMainMenu(), BorderLayout.NORTH);
        this.getContentPane().add(getMdiPane(), BorderLayout.CENTER);
        addEvent();
        this.setSize(new Dimension(640, 480));
        this.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
        this.setTitle("Exemplo Aplicação MDI");
        this.show();
    }

    public ExemploMdi() {
        initialize();
    }


}

2 Respostas

B

Olá , blz, cara é simples, você tem que adicionar action listener para cada JMenuItem que vocêr queira ter uma acão, no estilo:

JMenuItem item = new JMenuItem("Open"); item.addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent e){ ... } }); ...

Tranq?

B

Ah esqueci de dar um bizu, ao invés de incluir o MenuBar no north do borderLayout, inclui no JFrame.setMenuBar(); , porque ai ele vai ser “tratado” pelo gerenciador de layout como uma barra de menu e não como um painel comum …

Valeu

Criado 20 de dezembro de 2004
Ultima resposta 20 de dez. de 2004
Respostas 2
Participantes 2