Ajuda com JmenuBar, Jmenu e JmenuItem

9 respostas
ZeTripe

Preciso de uma ajuda nesse código, quando executo, parasse que os componentes de menu não inicializam, alguém pode me dizer em que errei?
quando executo, apenas aparece a janela e um pequeno Menu na parte superior, mais bem fino sem nada escrito.

@SuppressWarnings("serial")
public class Menu extends JFrame implements ActionListener {

	
	JMenuBar barra;
	JMenu arquivo, cadastro;
	JMenuItem sair, sobre , funcionario , cliente , carro , locacao;
	ImageIcon icone , bgImagen;

	
	public Menu(){
		

		
		//instaciando items de menu
		
		sair = new JMenuItem("Sair" , KeyEvent.VK_R);
		sobre = new JMenuItem("Sobre" , KeyEvent.VK_S);
		funcionario = new JMenuItem("funcionário");
		cliente = new JMenuItem("cliente");
		carro = new JMenuItem("carro");
		locacao = new JMenuItem("Locação");
		
		arquivo = new JMenu();
		arquivo.setMnemonic(KeyEvent.VK_A);
		arquivo.add(sair);
		arquivo.add(sobre);
		
		cadastro = new JMenu();
		cadastro.setMnemonic(KeyEvent.VK_C);
		cadastro.add(funcionario);
		cadastro.add(cliente);
		cadastro.add(carro);
		cadastro.add(locacao);
		
		barra = new JMenuBar();
		barra.setFont(new Font("arial", Font.PLAIN , 26));
		barra.add(arquivo);
		barra.add(cadastro);
		
		icone = new ImageIcon("icone.png");
		this.setIconImage(icone.getImage());
		
		bgImagen = new ImageIcon("img2.jpg");
		
		JLabel bg = new JLabel(bgImagen, SwingConstants.CENTER);
		
		this.setJMenuBar(barra);
		this.getContentPane().add(bg);
		
		setTitle("Menu");
		setSize(getToolkit().getScreenSize());
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		
	}

9 Respostas

E

O problema pode estar na linha 52, tente usar uma dimensão préestabelecida menor. Se isso não funcionar, nos mostre o código do main da sua aplicação.

ZeTripe

Eu fiz a troca com por uma dimensão 300,300;
mais continuou o mesmo problema com uma janela menor.
os botões do menu na parte superior da janela não aparecem, apenas parece a barra, bem fina mesmo.

Meu método main está simples
public static void main(String[] args) {
		new Menu().setVisible(true);

	}
ViniGodoy

Compartilha a classe toda usando os attachments do GUJ.

ZeTripe

Troquei a cor do fundo para que possa notar apenas a JmenuBar na parte superior


ViniGodoy

Não tem erro nenhum no seu programa. A barra fica pequena porque você não deu nenhum nome nos menus.
Veja:

import java.awt.Color;
import java.awt.Font;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;

import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.SwingConstants;

@SuppressWarnings("serial")
public class Menu extends JFrame implements ActionListener {

	
	JMenuBar barra;
	JMenu arquivo, cadastro;
	JMenuItem sair, sobre , funcionario , cliente , carro , locacao;
	ImageIcon icone , bgImagen;

	
	public Menu(){
		
		//instaciando items de menu
		
		sair = new JMenuItem("Sair" , KeyEvent.VK_R);
		sobre = new JMenuItem("Sobre" , KeyEvent.VK_S);
		funcionario = new JMenuItem("funcionário");
		cliente = new JMenuItem("cliente");
		carro = new JMenuItem("carro");
		locacao = new JMenuItem("Locação");
		
		arquivo = new JMenu("Arquivo");
		arquivo.setMnemonic(KeyEvent.VK_A);
		arquivo.add(sair);
		arquivo.add(sobre);
		
		cadastro = new JMenu("Cadastros");
		cadastro.setMnemonic(KeyEvent.VK_C);
		cadastro.add(funcionario);
		cadastro.add(cliente);
		cadastro.add(carro);
		cadastro.add(locacao);
		
		barra = new JMenuBar("Telas");
		barra.setFont(new Font("arial", Font.PLAIN , 26));
		barra.add(arquivo);
		barra.add(cadastro);
		
		icone = new ImageIcon("icone.png");
		this.setIconImage(icone.getImage());
		
		bgImagen = new ImageIcon("img2.jpg");
		
		JLabel bg = new JLabel(bgImagen, SwingConstants.CENTER);
		
		this.setJMenuBar(barra);
		this.getContentPane().add(bg);
		
		setTitle("Menu");
		setSize(getToolkit().getScreenSize());
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		getContentPane().setBackground(Color.RED);
	}
	
	
	/**
	 * @param args
	 */
	public static void main(String[] args) {
		Menu x = new Menu();
		x.setVisible(true);

	}

	@Override
	public void actionPerformed(ActionEvent e) {
	}
}
ZeTripe

Obrigado mesmo, ajudou muito
estou desenvolvendo o meu TCC do curso técnico e esse menu é essencial, o ruim é que temos meio que ser autodidata, pois não aprendemos a maioria das coisas que pretendemos fazer.
Obrigado pela ajuda, abraços.

E
  1. A palavra é “autodidata”

  2. Para não ficar perdendo tempo desenhando telas, tente usar o Eclipse com o plugin WindowBuilder, e de preferência usando o layout manager “MigLayout”.
    Vocês vão ver que essa parte chata de ficar desenhando telas na mão é coisa do passado.

E

Um exemplo da sua tela redesenhada com o WindowBuilder (não adicionei a parte de maximizar automaticamente a tela, que vocês puseram).
Ele gera mais código que escrever manualmente, mas fica bem mais organizado.
Por exemplo, toda a parte de configurar um determinado elemento da tela fica dentro de um único método, o que facilita quando você precisa modificar esse elemento da tela.

package guj;

import java.awt.BorderLayout;
import java.awt.EventQueue;

import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.border.EmptyBorder;
import javax.swing.JMenuBar;
import javax.swing.JMenu;
import javax.swing.JMenuItem;
import javax.swing.JOptionPane;

import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;

public class AplicacaoFrame extends JFrame {

	private JPanel contentPane;
	private JMenuBar mnbPrincipal;
	private JMenu mnArquivo;
	private JMenu mnCadastros;
	private JMenuItem mntmSair;
	private JMenuItem mntmSobre;
	private JMenuItem mntmFuncionarios;
	private JMenuItem mntmClientes;
	private JMenuItem mntmCarros;
	private JMenuItem mntmLocacoes;

	/**
	 * Launch the application.
	 */
	public static void main(String[] args) {
		EventQueue.invokeLater(new Runnable() {
			public void run() {
				try {
					AplicacaoFrame frame = new AplicacaoFrame();
					frame.setVisible(true);
				} catch (Exception e) {
					e.printStackTrace();
				}
			}
		});
	}

	/**
	 * Create the frame.
	 */
	public AplicacaoFrame() {
		setTitle("Cadastro");
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		setBounds(100, 100, 450, 300);
		setJMenuBar(getMnbPrincipal());
		contentPane = new JPanel();
		contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
		contentPane.setLayout(new BorderLayout(0, 0));
		setContentPane(contentPane);
	}

	private JMenuBar getMnbPrincipal() {
		if (mnbPrincipal == null) {
			mnbPrincipal = new JMenuBar();
			mnbPrincipal.add(getMnArquivo());
			mnbPrincipal.add(getMnCadastros());
		}
		return mnbPrincipal;
	}

	private JMenu getMnArquivo() {
		if (mnArquivo == null) {
			mnArquivo = new JMenu("Arquivo");
			mnArquivo.setMnemonic('A');
			mnArquivo.add(getMntmSair());
			mnArquivo.add(getMntmSobre());
		}
		return mnArquivo;
	}

	private JMenu getMnCadastros() {
		if (mnCadastros == null) {
			mnCadastros = new JMenu("Cadastros");
			mnCadastros.setMnemonic('C');
			mnCadastros.add(getMntmFuncionarios());
			mnCadastros.add(getMntmClientes());
			mnCadastros.add(getMntmCarros());
			mnCadastros.add(getMntmLocacoes());
		}
		return mnCadastros;
	}

	private JMenuItem getMntmSair() {
		if (mntmSair == null) {
			mntmSair = new JMenuItem("Sair");
			mntmSair.addActionListener(new ActionListener() {
				public void actionPerformed(ActionEvent e) {
					int resposta = JOptionPane.showConfirmDialog(
							AplicacaoFrame.this, "Deseja sair da aplicação ?");
					if (resposta == JOptionPane.YES_OPTION) {
						AplicacaoFrame.this.dispose();
					}
				}
			});
			mntmSair.setMnemonic('S');
		}
		return mntmSair;
	}

	private JMenuItem getMntmSobre() {
		if (mntmSobre == null) {
			mntmSobre = new JMenuItem("Sobre...");
			mntmSobre.addActionListener(new ActionListener() {
				public void actionPerformed(ActionEvent e) {
					JOptionPane
							.showMessageDialog(
									AplicacaoFrame.this,
									"<html>Trabalho de Conclusão de Curso - 2012<br/>"
											+ "Sistemas de Informação - Universidade de Pararakelse<br/>"
											+ "<table>"
											+ "<tr><td>Programador:</td><td>Keitaro Urashima</td></tr>"
											+ "<tr><td>Pesquisador:</td><td>Naru Narusegawa</td></tr>"
											+ "<tr><td>Designer:</td><td>Noriyasu Seta</td></tr>"
											+ "</table>" + "</html>");
				}
			});
			mntmSobre.setMnemonic('b');
		}
		return mntmSobre;
	}

	private JMenuItem getMntmFuncionarios() {
		if (mntmFuncionarios == null) {
			mntmFuncionarios = new JMenuItem("Funcionários");
			mntmFuncionarios.setMnemonic('F');
		}
		return mntmFuncionarios;
	}

	private JMenuItem getMntmClientes() {
		if (mntmClientes == null) {
			mntmClientes = new JMenuItem("Clientes");
			mntmClientes.setMnemonic('C');
		}
		return mntmClientes;
	}

	private JMenuItem getMntmCarros() {
		if (mntmCarros == null) {
			mntmCarros = new JMenuItem("Carros");
			mntmCarros.setMnemonic('A');
		}
		return mntmCarros;
	}

	private JMenuItem getMntmLocacoes() {
		if (mntmLocacoes == null) {
			mntmLocacoes = new JMenuItem("Locações");
			mntmLocacoes.setMnemonic('L');
		}
		return mntmLocacoes;
	}
}
ZeTripe

Eu já usava esse plugin, eu só gosto de ter uma noção dos códigos antes de usar um recurso de arrastar.
Mais mesmo assim obrigado pela ajuda, agora preciso procurar sobre, trabalhar com imagens como plano de fundo, se tiver algo que possa me mandar Obg.

Criado 7 de setembro de 2012
Ultima resposta 9 de set. de 2012
Respostas 9
Participantes 4