Ir para conteúdo
Faça parte da equipe! (2024) ×

Criando uma Aplicação com Menus (javax.swing)


Neёlix
 Compartilhar

Posts Recomendados

Criando uma aplicação com Menus (javax.swing)

dsadas.jpg

Resultado Final...

 

Antes de iniciar, vou tentar explicar algumas coisas simples quanto aos tipos de botões existentes:

RadioButton: São botões de única escolha, isto é, não é possível escolher mais de uma opção (até dá, se o programador não cria-lo corretamente).

CheckButton: São botões de Múltipla escolha, é possível deixar "selecionado" vários deles (ps: é possível fazer tratamento para que o usuário não marque mais de uma opção, porém em casos assim é mais fácil usar RadioButton).

MenuBar: É simplesmente aquela barra existente no topo do form.

Menu: São as opções de escolhas existentes na barra ("Arquivo, Exibir, Sobre...").

MenuItem: São os itens existente dentro de cada menu, por exemplo: Dentro de "Arquivo" pode conter: Novo, salvar, salvar como, fechar...

 

Usaremos swing para criar nossa interface, então pense nos itens citados acima com o "j" na frente (coisas do java...): JRadioButtonMenuIten, JCheckButtonMenuItem, JMenuBar, JMenu e JMenuItem.

 

- Eu só tenho essas opções para criar meu menu?

Não, há várias outras classes e métodos para isto. Inclusive para tratar a aparência da MenuBar e seus itens (uso de ícones, por exemplo). Mas isto não é assunto para o momento, vamos criar aqui um menu com tipos mais comuns de se usar no dia-a-dia.

 

 

Iniciando...

 

Crie um nova classe com nome "Window" (sugestão) e faça com que ela herde métodos e atributos de JFrame:

 

public class Window extends JFrame {

}

 

Criamos então os atributos da classe:

 

private JFrame root;

private JMenuBar menuBar;

private JMenu menu, subMenu;

private JMenuItem mItem;

private JCheckBoxMenuItem cMenuItem;

private JRadioButtonMenuItem rMenuItem;

 

Ao invés de criar TUDO DE UMA VEZ, vamos separar as coisas? Um método para criar o form e outro para criar/adicionar seus componentes. Vamos ao primeiro, para criar o form:

É necessário se cadastrar para acessar o conteúdo.

 

O bloco try...catch não é necessário. Então por que você criou isto? rsrsrs. Isto serve apenas para deixar a aplicação com a mesma cara do sistema operacional e não com aquela aparência do Swing (quadrada, azul e feia). Mas explicando: " UIManager.setLookAndFeel " modifica o visual do swing. "UIManager.getSystemLookAndFeelClassName" retorna o visual do sistema operacional, ou, a classe que representa este visual. "SwingUtilities.updateComponentTreeUI" aplica o novo visual em todo ou qualquer componente UI criado a partir daquele. Em caso de qualquer exceção o bloco dentro de catch será executado, no caso o nosso apenas irá informar que nao foi possível usar a interface do sistema e mostra a mensagem da exceção.

 

 

Criando o menu e seus itens

 

Vejamos nosso método responsável por isto:

 

o código fica torto por causa das cores, infelizmente.

É necessário se cadastrar para acessar o conteúdo.

 

Aparentemente, muita coisa! Mas vamos analisar o código:

 

menuBar = new JMenuBar();

Criamos a nossa barra, limpa, sem nada! Ainda que ela tenha sido instanciada não é possível vê-la no form, ou seja, se construíssimos o código agora iria aparecer somente o form (mas sim, ela foi criada).

 

menu = new JMenu("Um Menu");

menuBar.add(menu);

Aqui estamos istanciando um menu da classe JMenu e usando um de seus construtores para dar nome ao botão logo na sua criação (nada impede de criar sem texto e posteriormente usar o método menu.setText("Um Menu")). Em seguida, estamos usando o método add, que tem por finalidade adicionar um objeto a outro objeto (se possível, claro), no caso estamos adicionando nosso menu recém criado à nossa barra, até agora nada complicado, certo?! Continuando...

 

mItem = new JMenuItem("Primeira opção");

menu.add(mItem);

 

mItem = new JMenuItem("Segunda opção");

menu.add(mItem);

Finalmente! Aqui estamos criando dois itens e adicionando ao nosso menu. Note que agora estamos adicionando os itens ao atributo menu e não à menuBar. Novamente, o método add adiciona um objeto à outro objeto (simples assim), porém é necessário prestar atenção onde você está adicionando. Um linha de código "menuBar.add(mItem)" resultaria em erro, pois mItem é um item de menu e logicamente precisa ser adicionado à um, e não a uma barra.

 

- Se eu construir meu programa agora irei ver o menu?

Calma, ainda não.

 

menu.addSeparator();

Sem segredo, este método adiciona um separador ao nosso menu, só.

 

ButtonGroup group = new ButtonGroup();

Eu disse antes que "RadioButtons são botões de única escolha, isto é, não é possível escolher mais de uma opção (até dá, se o programador não cria-lo corretamente)" e agora você vai entender o motivo. Radiobuttons precisam fazer parte de um "grupo de botões", pois do contrário o java (e todas as outras linguagens?) não vai saber saber o que fazer se quando um determinado botão for selecionado. PENSE: temos dois radiobuttons, se ambos estiverem em um grupo quando um estiver ativo o outro consequentemente estará inativo, estando dentro de um grupo é possivel distingui-lo. Então, estamos criando um group somente por causa do nosso JRadioButtonMenuItem.

 

rMenuItem = new JRadioButtonMenuItem("Ligado");

rMenuItem.setSelected(true);

group.add(rMenuItem);

menu.add(rMenuItem);

 

rMenuItem = new JRadioButtonMenuItem("Desligado");

group.add(rMenuItem);

menu.add(rMenuItem);

Há exemplo mais fácil para demonstrar o uso de radiobutton que ligado/desligado? Criamos um botão com texto "ligado". Usamos o método "rMenuItem.setSelected(true)" para mostrá-lo selecionado logo de cara. Em seguida, adicionamos ele ao nosso grupo de botões: group.add(rMenuItem). Mas lembre-se, ele foi adicionado ao grupo somente, ainda falta adicioná-lo ao nosso menu, lembra? Então nós fazemos isto com o método: menu.add(rMenuItem).

 

O segundo botão não tem o método que o deixa selecionado, pois iria haver um conflito. Lembre-se que ambos estão em um grupo e, se um estiver inativo o outro estará ativo. Dois botões ATIVOS resultam em... em... ERRO.

 

- Se eu construir meu programa agora irei ver o menu?

Calma, ainda não. Continuando...

 

cMenuItem = new JCheckBoxMenuItem("Escolha 1");

menu.add(cMenuItem);

cMenuItem = new JCheckBoxMenuItem("Escolha 2");

menu.add(cMenuItem);

Aqui criamos nossos botões de check, aquele que pode ser selecionado vários ao mesmo tempo. Lembrando que se eles estiverem em um grupo, é possível fazer com que somente um deles seja selecionado. Mas isto é burrice se existe radiobutton justamente para realizar este trabalho. LÓGICA!

 

subMenu = new JMenu("SubMenu");

menu.add(subMenu);

O nosso submenu. Veja que ele também é um JMenu, porém a veja o que ocorre no método add. Sim, estamos adicionando o nosso submenu ao menu criado anteriormente. Nada de complicado, este método permite um desenvolvimento rápido, mas repito: PRESTE ATENÇÃO ONDE VOCÊ ESTÁ ADICIONANDO OS OBJETOS!!!

 

menu = new JMenu("Outro Menu");

menuBar.add(menu);

Aqui, nada de novidade. Apenas criamos um novo menu e adicionamos ele à menuBar. Se for preciso "preenchê-lo" com componentes, você já sabe como fazer :) .

 

root.setJMenuBar(menuBar);

AQUI SIM estamos "setando" a menuBar do nosso Frame.

 

- Se eu construir meu programa agora irei ver o menu?

Sim, agora o menu já foi adicionado à menuBar. A menuBar já foi adicionada ao Frame.

 

 

Construtor da Classe

 

Criamos os métodos e atributos, mas assim que a classe é instanciada nada irá acontecer. Então vamos implementar nosso código, o contrutor ficará assim:

 

É necessário se cadastrar para acessar o conteúdo.

 

Apenas! Chamamos o método responsável por criar o Form (ou Frame), em seguida chamamos o que cria o menu e seus itens.

Por fim, tornamos visível nosso frame. A classe completa ficaria assim (sem cor):

 

É necessário se cadastrar para acessar o conteúdo.

 

 

E o método main()

Lembre-se que toda ação acontece no construtor da classe, assim tudo que estiver dentro dele será feito assim que a classe for istanciada. Então, faremos simplismente isto:

 

É necessário se cadastrar para acessar o conteúdo.

 

Já os eventos podem ser tratados em outra classe implementando os métodos abstratos de ActionListener, exemplo: http://www.webcheats.com.br/forum/outras-linguagens/2189482-estruturando-melhor-aplicativos-com-ui-user-interface.html

 

Explore a documentação sobre JMenuBar, JMenu, JMenuItem em: Oracle DocumentationVeja também sobre Layout e como usá-lo juntamente com JMenuBar, criando menus tanto na horizontal quanto na vertical.

 

Obrigado pela leitura.

Neelix

Link para o comentário
Compartilhar em outros sites

Tópico muito bem formatado ficou melhor que com as tags de php, Gostei do tutorial muito bem explicado parte por parte !

Poderia postar o programa que você usou para compilar?

 

Grato,

Victor.

Membro - Bronze - Geek - Bronze - Tech - Mod - Coord - Co-Admin - Platinum

Link para o comentário
Compartilhar em outros sites

Tópico muito bem formatado ficou melhor que com as tags de php, Gostei do tutorial muito bem explicado parte por parte !

Poderia postar o programa que você usou para compilar?

 

Grato,

Victor.

Pode usar o compilador padrão do java.Mas se quiser usar outro,eu recomendo o NetBeans (ou Eclipse).

Link para o comentário
Compartilhar em outros sites

Véi cê me manda dar uma olhada no tópico sem eu nem entender disso ashaushau

Mas parece ser algo legal .-.


0yCiaZY.pngu6alZjv.png

V28LX.png

| Membro | Bronze Member | [E]stagiário | Moderador Point Blank | ̶B̶a̶n̶i̶d̶o̶ |

| Membro | Bronze Member | Silver Member | Gold Member | [E]stagiário | Moderador Point Blank | Moderador Global | Coordenador | Eu

Link para o comentário
Compartilhar em outros sites

Este tópico está impedido de receber novos posts.
 Compartilhar

×
×
  • Criar Novo...

Informação Importante

Nós fazemos uso de cookies no seu dispositivo para ajudar a tornar este site melhor. Você pode ajustar suas configurações de cookies , caso contrário, vamos supor que você está bem para continuar.