Fala Galera, beleza? Montei um JMenu o seus respectivos JMenuItem, coloquei as ações para os JMenuItem tranquilo… Agora, para o JMenu Sair, não há a necessidade de se criar um JMenuItem com a descrição “Sair”, sendo assim, deixei apenas o JMenu… A dúvida eh, como definir uma ação para um JMenu??? Tentei usar o método addMenuListener(), mas não consegui… Alguém poderia me ajudar??? Valeu!!
Olá não entendi porque não conseguiu com o addMenuListener, segue abaixo uma implementação:
import java.awt.Container;
import java.awt.GridLayout;
import javax.swing.JFrame;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JOptionPane;
import javax.swing.JTextArea;
import javax.swing.event.MenuEvent;
import javax.swing.event.MenuListener;
public class FPrincipal extends JFrame {
private JMenuBar menubar;
private JMenu menuSair;
public FPrincipal() {
this.menubar= new JMenuBar();
this.menuSair=new JMenu("Sair");
menubar.add(menuSair);
Container container= this.getContentPane();
container.add(menubar);
menuSair.addMenuListener(new MenuListener() {
public void menuCanceled(MenuEvent arg0) {
}
public void menuDeselected(MenuEvent arg0) {
}
public void menuSelected(MenuEvent arg0) {
if (JOptionPane.showConfirmDialog(null,"Deseja sair?","O sistema está perguntando",0)==0) {
System.exit(0);
}
}
});
pack();
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
}
public class Principal {
public static void main(String[] args) {
FPrincipal fp= new FPrincipal();
fp.setVisible(true);
}
}
Seria isto?
Att
Eh, eu tava fazendo coisa errada mesmo… valeu… Outra coisa, eu tinha montado todo o código para montagem do Swing na class Main, mas resolvi mudar para uma classe paralela… No entanto, quando tento compilar aparece o erro:
Não sei o que fazer… deve ser algo besta… Segue o código abaixo, desde já obrigado!!!
package estacionamento;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.ArrayList;
import java.util.List;
import javax.swing.ButtonGroup;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JRadioButton;
import javax.swing.JTextField;
import veiculos.Caminhao;
import veiculos.Carro;
import veiculos.Moto;
import veiculos.Veiculo;
public class interfaceGrafica implements ActionListener{
JLabel placaLabel = new JLabel("Placa: ");
JTextField placaField = new JTextField(7);
JLabel modeloLabel = new JLabel("Modelo: ");
JTextField modeloField = new JTextField(20);
JLabel rgLabel = new JLabel("RG: ");
JTextField rgField = new JTextField(10);
JButton incluirButton = new JButton("Incluir");
JButton sairButton = new JButton("Sair");
JButton consultarButton = new JButton ("Consultar");
JButton baixarButton = new JButton ("Baixar");
JRadioButton carroRadio = new JRadioButton ("Carro");
JRadioButton motoRadio = new JRadioButton ("Moto");
JRadioButton caminhaoRadio = new JRadioButton ("Caminhão");
JPanel container = new JPanel();
JFrame janela = new JFrame("Formulário");
JMenuBar menuBar = new JMenuBar();
JMenu lancamentoMenu = new JMenu("Lançamentos");
JMenuItem entradaItem = new JMenuItem("Entrada");
JMenuItem saidaItem = new JMenuItem("Saida");
JMenu consultaMenu = new JMenu("Consulta");
JMenuItem consultaItem = new JMenuItem("Veículos");
JMenu sairMenu = new JMenu("Sair");
JMenuItem sairItem = new JMenuItem();
ButtonGroup radio = new ButtonGroup();
/* radio.add(carroRadio);
* radio.add(motoRadio);
* radio.add(caminhaoRadio);
*/ menuBar.add(lancamentoMenu);
menuBar.add(consultaMenu);
lancamentoMenu.add(entradaItem);
lancamentoMenu.add(saidaItem);
consultaMenu.add(consultaItem);
menuBar.add(sairMenu);
Olá pelo que vi você está trabalhando de maneira errada com Swing. Deu uma olhada neste modelo, para trabalhar com Swing:
- Cria uma classe que extends JFrame, se quiser Jframe, ou JDialog, se quiser modal, etc…
- Coloque os atributos dessa classe tudo que a janela vai ter, exemplos JMenu, JButton, JTextArea, etc;
- No construtor desta classes, instancie os atributos da classes, ex:
this.bt= new JButton("Teste");
- No construtor adquira uma referencia a Container, fazendo ele receber o retorno do metodo getContentPane, da classe JFrame, ex:
Container container= this.getContentPane();
- Também no construtor, adicione os listeners necessários, aos devidos objetos, se for usar anonymous class, implemente o método definido pela interface, e neste método chame outro método, com um nome coerente, ex:
public interfaceGrafica() {
baixarButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent arg0) {
baixarButtonClick();
}
});
}
public void baixarButtonClick() {
//Codigo aqui
}
- Ainda no construtor sete as ações, default para a janela ex:
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
Agora respondendo suas dúvidas, na sua classe interfaceGrafica, faltou implementar o método definido na interface ActionListener.
public void actionPerformed(ActionEvent arg0) {
//Codigo aqui
Neste pedaço do seu código:
menuBar.add(lancamentoMenu);
menuBar.add(consultaMenu);
lancamentoMenu.add(entradaItem);
lancamentoMenu.add(saidaItem);
consultaMenu.add(consultaItem);
menuBar.add(sairMenu);
Você está adicionando os objetos ao container’s sem estar dentro de nehum método, ou seja está tentando usar açãoes que só é permitido dentro de métodos, ou de construtores.
Acho que estes são erros! Qualquer dúvida posta ae!!
Valeu
Eh isso aih camarada, resolveu meu problema com elegância ^^ Obrigado!!