Então pessoal, estou fazendo um trabalho de programação Java, e como solicitado pelo professor o trabalho consiste em utilizar a IGU, e estou numa parte que ainda nao consegui obter uma solução sozinho. Quero definir actions diferentes para cada menuItem, mas como posso fazer essa comparação se foi utilizado apenas um menuItem(maneira economica e reutilizavel), pois para cada item de menu setado eu quero uma action diferente, por exemplo o ITEM1 abriria alguma coisa, O ITEM2 fecharia alguma coisa , e por ai vai.
public class TelaPrincipal extends JFrame implements ActionListener {
JMenu menu;
JMenuBar menuBarra;
JMenuItem menuItem;
public TelaPrincipal(){
//criando componentes da TELA
menuBarra= new MenuBar();
setJMenuBar(menuBarra);
menu= new Menu("MENU1");
menuBarra.add(menu);
menuItem= new MenuItem("ITEM1");
menu.add(menuItem);
menuItem.addActionListener(this);
menuItem = new MenuItem("ITEM2");
menu.add(menuItem);
menuItem.addActionListener(this);
menuItem= new MenuItem("ITEM3");
menu.add(menuItem);
menuItem.addActionListener(this);
menu= new Menu("MENU2");
menuBarra.add(menu);
menuItem= new MenuItem("ITEM4");
menu.add(menuItem);
menuItem.addActionListener(this);
menuItem= new MenuItem("ITEM5");
menu.add(menuItem);
menuItem.addActionListener(this);
menuItem= new MenuItem("ITEM6");
menu.add(menuItem);
menuItem.addActionListener("this");
menu= new Menu("MENU3");
menuBar.add(menu);
menuItem= new MenuItem("ITEM7");
menu.add(menuItem);
menuItem.addActionListener(this);
menuItem= new MenuItem("ITEM8");
menu.add(menuItem);
menuItem.addActionListener(this);
setDefaultCloserOperation(JFrame.EXIT_ON_CLOSE);
setVisible(true);
setBackgroundColor(Color.blue);
@Override
public void ActionPerformed(ActionEvent e){
//A DUVIDA É BEM AQUI
if(e.getSource() == ? ){
//faz alguma coisa
}
}
}
Desde ja agradeço, fico no aguardo de alguem que possa me ajudar.
Att
Use outras variaveis para o MenuItem, você esta usando a mesma pra todos os itens.
Ex:
[code]
import javax.swing.JFrame;
import javax.swing.JTextPane;
import javax.swing.JMenuBar;
import javax.swing.JMenu;
import javax.swing.JMenuItem;
…
public JanelaSimples() {
JMenuBar barra = new JMenuBar();
JMenu menuArquivo = new JMenu("Arquivo");
JMenuItem arqSair = new JMenuItem("Sair");
arqSair.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
System.exit(0);
}
});
menuArquivo.add(arqSair);
barra.add(menuArquivo);
this.setJMenuBar(barra);
}
}[/code]
então cara, era esse o X da questão porque se eu tiver 50 itens de Menu , eu teria que criar 50 variaveis?
Eu pensei desse jeito pois é uma maneira de tu criar apenas uma variavel e ir alterando os valores dela e ja ir adicionando, dai vc consegue trabalhar apenas com uma varíavel. Alguem sabe se é possivel assim?
[quote]então cara, era esse o X da questão porque se eu tiver 50 itens de Menu , eu teria que criar 50 variaveis?
Eu pensei desse jeito pois é uma maneira de tu criar apenas uma variavel e ir alterando os valores dela e ja ir adicionando, dai vc consegue trabalhar apenas com uma varíavel. Alguem sabe se é possivel assim?[/quote]
Infelizmente não, a unica maneira de fazer isso com uma quantidade menor de variaveis é por Array, porém fica complicado para posteriormente identificar o item tal no menu tal.
Você terá que fazer um objeto para cada item, ai nomeia de acordo com a sua funcao dentro do sistema.
Fazer assim não adianta não? Já experimentou? Acho que vai economizar variaveis do jeito que você quer
if( e.getActionCommand().equals("ITEM1) ) {
//faz alguma coisa
}
else if( e.getActionCommand().equals("ITEM2) ) {
//faz alguma coisa
}
else if( e.getActionCommand().equals("ITEM3) ) {
//faz alguma coisa
}
[quote=lucas_guj]Fazer assim não adianta não? Já experimentou? Acho que vai economizar variaveis do jeito que você quer
if( e.getActionCommand().equals("ITEM1) ) {
//faz alguma coisa
}
else if( e.getActionCommand().equals("ITEM2) ) {
//faz alguma coisa
}
else if( e.getActionCommand().equals("ITEM3) ) {
//faz alguma coisa
}
[/quote]
nesse caso é melhor criar constantes na parte de declaração das variáveis da classe
static final String menuItem1 = "Bla Bla Bla 1";
static final String menuItem2 = "Bla Bla Bla 2";
static final String menuItem3 = "Bla Bla Bla 3";
dai se vc precisar mudar o texto do seu menu, vc muda em uma só parte do código.
[quote=tevatron][quote=lucas_guj]Fazer assim não adianta não? Já experimentou? Acho que vai economizar variaveis do jeito que você quer
if( e.getActionCommand().equals("ITEM1) ) {
//faz alguma coisa
}
else if( e.getActionCommand().equals("ITEM2) ) {
//faz alguma coisa
}
else if( e.getActionCommand().equals("ITEM3) ) {
//faz alguma coisa
}
[/quote]
nesse caso é melhor criar constantes na parte de declaração das variáveis da classe
static final String menuItem1 = "Bla Bla Bla 1";
static final String menuItem2 = "Bla Bla Bla 2";
static final String menuItem3 = "Bla Bla Bla 3";
dai se vc precisar mudar o texto do seu menu, vc muda em uma só parte do código.[/quote]
Correto