Aula 6 Prof. Roberto Rosa [email protected] Vamos criar um projeto contendo um Menu Principal que chamará todas as outras janelas do nosso Sistema. O Menu principal será criado com o componente JFrame, já que esse contém o método "main()" que chamará todas as outras janelas do nosso sistema. As outras janelas por sua vez não precisam ter método main(), devido a esse fato utilizaremos um formulário sem este método, no caso o JInternalFrame. Além do JFrame/JInternalFrame utilizaremos outros componentes que seguem abaixo na lista: JMenu JMenuBar JMenuItem JSeparator JCheckBoxMenuItem JRadioButtonMenuItem JDesktopPane Agora vamos colocar os componentes de Menu. Para isso acesse a "Paleta" no canto superior direito do Netbeans. Na paleta clique na categoria "Menus Swing". Em Menus Swing escolha uma "Barra de Menu"(JMenuBar1) e arraste até o JFrame, conforme figura a seguir: Onde encontramos os componentes Por padrão o JmenuBar1 já vem com dois menus (File e Edit). Se você clicar em cima dos Menus verá que o nome deles são respectivamente: JMenu1,JMenu2 Só a barra de menu (JmenuBar) com os 2 menus(JMenu) não fica legal. Para que um menu fique funcional, necessitamos inserir os Itens de Menu. No Swing temos 3 tipos de Itens de Menu, são eles: JMenuItem JCheckBoxMenuItem JRadioButtonMenuItem A figura a seguir mostra os tipos de menu: Tipos de Menu Agora, vamos inserir 4 itens de menu para você entender como funciona. Cada item de menu inserindo dentro de um JMenu é uma nova opção, podendo conter quantos JMenuItem nós desejarmos/precisarmos. A figura a seguir mostrar como está ficando o nosso menu: Menu Linha Separadora Em alguns casos você precisará separar os itens de menu em categorias. Para fazer isso você pode utilizar o componente JSeparator. Esse componente simplesmente cria uma linha que separa o menu conforme desejado. Menu com JSeparator Agora vamos modificar o nome dos componentes de menu. Como é bastante componente eu utilizo a seguinte nomenclatura de nomes para cada um dos menus e itens de menu: JmenuBar – jmb Jmenu – jm JmenuItem – jmi JCheckBoxMenuItem - jcbmi JRadioButtonMenuItem - jrbmi O JDesktopPane é um Painel da Área de Trabalho(como o próprio nome já diz). Ele serve para que as janelas sejam abertas apenas dentro da janela principal do sistema, não permitindo que as janelas saiam para fora da janela principal. Isso é o chamado menu MDI. Bom, agora que já sabemos para o que ele serve, o próximo passo é inserir um JDesktopPane, ou seja, um componente que será uma Área de Trabalho onde serão abertas todas as outras janelas (JInternalFrame) do nosso sistema. O JDesktopPane encontra-se na paleta → categoria Contêineres → painel de Área de Trabalho conforme ilustra a figura: Onde encontrar JDesktopPane Obs.: Se o Netbeans estiver sendo executado no Sistema Operacional Windows, a cor de fundo padrão do Painel da Área de Trabalho pode variar. Geralmente as cores utilizadas são o Azul ou preto. Após inserir o JDesktopPane mude o nome da variável para algo do tipo: jAreaTrabalho jdpAreaTrabalho O componente que servirá como área de trabalho deverá ser expandido em toda a janela principal ou em parte dela deixando algumas bordas, conforme a figura: Menu com JDesktopPane Bom, agora vamos abrir a nossa primeira janela. Ao contrário do que vinhamos utilizando agora nós vamos utilizar outro componente do Swing. O nome da janela não será "Form JFrame" e sim "Form JInternalFrame". Mas porque eu utilizo um Form diferente do JFrame? A explicação é simples: O Form JFrame vem com o método main(), enquanto o Form InternalFrame não vem com o método main(). Se colocarmos 2 Form JFrame no mesmo projeto ao executar o java não saberá qual das 2 janelas devem ser "rodadas"(executadas). A não ser que você indique nas propriedades do projeto ou diretamente no Class path. Alguns desenvolvedores ao invés de utilizar JInternalFrame acabam utilizando o Form JPanel. Ao meu ver, indifere qual Form será utilizado; claro, desde que seja um desses 2. Para abrir uma janela a partir do menu siga as instruções a seguir: Vamos primeiro criar a janela que será aberta pelo menu. Para isso clique com o botão direito do mouse no pacote "visao" e escolha a opção: Novo → outros. Será aberta uma caixa de diálogo conforme a figura: Obs.: Nessa caixa de diálogo, você deve escolher "Forms GUI Swing" em seguida "Formulário JInternalFrame", conforme figura: Criando JInternalFrame Como é apenas uma janela teste, vou utilizar o seguinte nome: GUITeste. A Figura a seguir mostra onde ficará a "GuiTeste" recém-criada. GUITeste recém-criada Agora volte até a Classe MenuPrincipal. Clique com o botão direito do mouse no "Item de Menu" que deseja utilizar para abrir a janela" GuiTeste". A Figura mostra que foi utilizado o primeiro "Item de Menu" para inserir o Evento de ActionPerformed. Inserindo evento no item de menu Ao escolher o evento, automaticamente ele nos levará para o código criando um método, conforme Figura: Código do evento ActionPerformed criado Clique em "Projeto" novamente. Agora vamos adicionar o Evento: key → key pressed. Esse evento é responsável pela abertura da janela se alguma tecla for pressionada. Vamos restringir para que somente quando o "Enter" for pressionado a janela abra. Ao clicar em "KeyPressed" o NetBeans redicionará para o código criando outro método conforme figura: abaixo do método jmiGuiTesteActionPerformed, Código do evento KeyPressed criado Método abrirGUITeste sendo chamado nos evento Obs.: O if() dentro do método KeyPressed serve para testar se o código da tecla que foi pressionada (getKeyCode()) é igual ( == ) a tecla Enter (KeyEvent.VK_ENTER). O resultado final pode ser visualizado na figura que segue. Quando clicamos no menu Cadastrar -> opção Teste ele instância e abre a GuiTeste dentro da Área de Trabalho (JDesktopPane) que criamos. GUIMenu abrindo GUITeste