MiniJava » Tutoriais

Utilização de Menus

Vamos ensinar agora como criar uma barra de Menu simples, com alguns menus dentro. Primeiramente, criaremos uma janela, de tamanho 500x150. Vamos também acrescentar um TextField, para brincarmos um pouco com ele mais tarde. Se você ainda não sabe como criar janelas e TextFields, dê uma olhada neste tutorial. Veja o código abaixo:

import br.ufpe.cin.miniJava.gui.*;
 
 
public class TesteMenu extends Window{
   
   private TextField texto;
   
   public TesteMenu(){                           
           texto = new TextField();
                          
           setTitle("TesteMenu");
           setSize(500,150);
           setPosition(200,200);
           add(texto, 190,80);
           
           this.setVisible(true);
   }
 
   public static void main(String[] args) {
           new TesteMenu();
   }
}
  

A janela deve ter esta aparência após a execução:

Vamos então explicar rapidamente como funciona a hierarquia de menu (usaremos a do Word como exemplo). Acima de todos na hierarquia, está a MenuBar. Ela guarda todas as funcionalidades do programa. Veja abaixo.

Logo abaixo da hierarquia, temos Menus e MenuItems. Menus e MenuItems podem ser colocados dentro de MenuBars, e ambos os Menus e MenuItems podem ser colocados dentro de Menus. Complicado?

Imagine uma árvore. A MenuBar seria o tronco, os Menus seriam os galhos e os MenuItems as folhas. Do tronco (MenuBar) temos vários galhos (Menus), que se desmembram e vários outros galhos, até encontrar as folhas (MenuItems). Ao chegar numa folha, não há mais desmembramento. Veja o exemplo:

Ok então! Vamos fazer o seguinte: criaremos um menu com 2 opções: "Texto" e "Aparência". Em "Texto" teremos itens que mudarão o conteúdo do nosso Textfield. Em "Aparência", alteraremos a carinha do TextField, modificando cores e fontes. Por onde começamos? Pela MenuBar. A nossa barrinha terá 500x25, a mesma largura da janela.

import br.ufpe.cin.miniJava.gui.*;
 
 
public class TesteMenu extends Window{
   
   private TextField texto;
   private MenuBar barraMenu;
   
   public TesteMenu(){                           
           texto = new TextField();
           barraMenu = new MenuBar();
           
           barraMenu.setSize(500,25);
                          
           setTitle("TesteMenu");
           setSize(500,150);
           setPosition(200,200);
           add(texto, 190,80);
           add(barraMenu);//se nao especificada, a posicao default é 0,0
           
           this.setVisible(true);
   }
 
   public static void main(String[] args) {
           new TesteMenu();
   }
}

Veja como ficou nossa janela:

Já temos a barra de menu. Mas ainda não temos nenhuma opção nela. Vamos fazer isso agora: vamos começar com o Menu "Texto". Veja como fazemos. Dentro deste Menu teremos 2 opções de texto. Vejamos como fica o código e a janela.

import br.ufpe.cin.miniJava.gui.*;
 
 
public class TesteMenu extends Window{
   
   private TextField texto;
   private MenuBar barraMenu;
   private Menu menuTexto;
   private MenuItem itemTexto1;
   private MenuItem itemTexto2;
   
   public TesteMenu(){                           
           texto = new TextField();
           barraMenu = new MenuBar();
           menuTexto = new Menu("Texto"); //criando o Menu
                itemTexto1 = new MenuItem("Texto 1"); //criando o MenuItem1
                itemTexto2 = new MenuItem("Texto 2"); //criando o menuItem2
        
                menuTexto.add(itemTexto1); //colocando o menuItem no Menu
                menuTexto.add(itemTexto2); //colocando o menuItem no Menu 
                barraMenu.add(menuTexto); //colocando o Menu na MenuBar
           
           barraMenu.setSize(500,25);
                          
           setTitle("TesteMenu");
           setSize(500,150);
           setPosition(200,200);
           add(texto, 190,80);
           add(barraMenu);
           
           this.setVisible(true);
   }
 
   public static void main(String[] args) {
           new TesteMenu();
   }
}

Veja o resultado. Temos um Menu inserido na MenuBar, e dois MenuItems dentro do Menu.

Agora, vamos criar mais um menu: “Aparência”. Neste, colocaremos outro menu, “Cor da letra”, que por sua vez se desmembra em mais 2 cores.

import br.ufpe.cin.miniJava.gui.*;
 
 
public class TesteMenu extends Window{
   
   private TextField texto;
   private MenuBar barraMenu;
   private Menu menuTexto;
   private MenuItem itemTexto1;
   private MenuItem itemTexto2;
   
   private Menu menuAparencia;
   private Menu menuCorFrente;    
   private MenuItem itemCorAzulFrente;
   private MenuItem itemCorVermelhoFrente;
 
   
   public TesteMenu(){                           
           texto = new TextField();
           barraMenu = new MenuBar();
           
	    //Menu TEXTO
	   menuTexto = new Menu("Texto");
           itemTexto1 = new MenuItem("Texto 1");
           itemTexto2 = new MenuItem("Texto 2");
        
           menuTexto.add(itemTexto1);
           menuTexto.add(itemTexto2); 
           barraMenu.add(menuTexto);
           
	  //Menu APARENCIA
           menuAparencia = new Menu("Aparência");
           menuCorFrente = new Menu("Cor da Frente");    
           itemCorAzulFrente = new MenuItem("Azul");
           itemCorVermelhoFrente = new MenuItem("Vermelho");
           menuCorFrente.add(itemCorAzulFrente);
           menuCorFrente.add(itemCorVermelhoFrente);
           menuAparencia.add(menuCorFrente);
           
           barraMenu.add(menuAparencia);
 
 
           barraMenu.setSize(500,25);
                          
           setTitle("TesteMenu");
           setSize(500,150);
           setPosition(200,200);
           add(texto, 190,80);
           add(barraMenu);
           
           this.setVisible(true);
   }
 
   public static void main(String[] args) {
           new TesteMenu();
   }
}   

Perceba o que fizemos de diferentes nesta vez... agora, colocamos um Menu dentro de outro Menu! Veja como ficou nossa janela:

Como recurso opcional você ainda pode usar Separadores, linhas entre itens de menu para ter uma organização melhor. Veja a modificação:

...
           
           //Menu TEXTO
           menuTexto = new Menu("Texto");
           itemTexto1 = new MenuItem("Texto 1");                     
           itemTexto2 = new MenuItem("Texto 2");
           
           menuTexto.add(itemTexto1);
           menuTexto.add(itemTexto2);
           menuTexto.insertSeparator(1);
           
...

Este separador será colocado entre os itens ‘Texto 1’ e ‘Texto 2’:

O número ‘1’ passado no parâmetro do ‘insertSeparator’ indica após qual item o Separador será colocado. Veja o que aconteceria se tivéssemos colocado ‘0’ ou ‘2’:

tutorial elaborado por Nicole Sultanum - nbs2