SWING - Guia Rápido

Swing API é um conjunto de componentes GUI extensíveis para facilitar a vida do desenvolvedor para criar aplicativos front-end / GUI baseados em JAVA. Ele é construído sobre a API AWT e atua como uma substituição da API AWT, uma vez que tem quase todos os controles correspondentes aos controles AWT. O componente Swing segue uma arquitetura Model-View-Controller para atender aos seguintes critérios.

  • Uma única API deve ser suficiente para oferecer suporte a múltiplas aparências.

  • A API deve ser orientada por modelo, de modo que a API de nível mais alto não precise ter dados.

  • API é usar o modelo Java Bean para que Builder Tools e IDE possam fornecer melhores serviços para os desenvolvedores usarem.

Arquitetura MVC

A arquitetura da API Swing segue a arquitetura MVC vagamente baseada da seguinte maneira.

  • O modelo representa os dados do componente.

  • View representa a representação visual dos dados do componente.

  • O controlador recebe a entrada do usuário na visualização e reflete as alterações nos dados do componente.

  • O componente Swing tem Model como um elemento separado, enquanto a parte View e Controller são clubbed nos elementos da interface do usuário. Por causa disso, o Swing tem uma arquitetura de aparência plugável.

Características do Swing

  • Light Weight - Os componentes Swing são independentes da API do sistema operacional nativo, pois os controles da API Swing são renderizados principalmente usando código JAVA puro em vez de chamadas de sistema operacional subjacentes.

  • Rich Controls - Swing fornece um rico conjunto de controles avançados como Tree, TabbedPane, slider, colorpicker e controles de tabela.

  • Highly Customizable - Os controles de swing podem ser personalizados de uma maneira muito fácil, pois a aparência visual é independente da representação interna.

  • Pluggable look-and-feel - A aparência do aplicativo GUI com base em SWING pode ser alterada em tempo de execução, com base nos valores disponíveis.

Esta seção o orienta sobre como baixar e configurar o Java em sua máquina. Use as seguintes etapas para configurar o ambiente.

Java SE está disponível gratuitamente no link Download Java . Portanto, você pode baixar uma versão com base em seu sistema operacional.

Siga as instruções para baixar o Java e executar o .exepara instalar o Java em sua máquina. Depois de instalar o Java em sua máquina, você precisará definir as variáveis ​​de ambiente para apontar para os diretórios de instalação corretos.

Configurando o caminho para Windows 2000 / XP

Supondo que você tenha instalado o Java em c:\Program Files\java\jdk diretório -

Step 1 - Clique com o botão direito em 'Meu Computador' e selecione 'Propriedades'.

Step 2 - Clique no botão 'Variáveis ​​de ambiente' na guia 'Avançado'.

Step 3- Altere a variável 'Path' para que também contenha o caminho para o executável Java. Exemplo, se o caminho está atualmente definido para'C:\WINDOWS\SYSTEM32', então mude seu caminho para ler 'C:\WINDOWS\SYSTEM32;c:\Program Files\java\jdk\bin'.

Configurando o Caminho para Windows 95/98 / ME

Supondo que você tenha instalado o Java em c:\Program Files\java\jdk diretório -

Step 1 - Edite o 'C:\autoexec.bat' arquivo e adicione a seguinte linha no final: 'SET PATH=%PATH%;C:\Program Files\java\jdk\bin'.

Configurando o caminho para Linux, UNIX, Solaris, FreeBSD

A variável de ambiente PATH deve ser definida para apontar para onde os binários Java foram instalados. Consulte a documentação do Shell se tiver problemas para fazer isso.

Exemplo, se você usar bash como seu shell, então você adicionaria a seguinte linha ao final '.bashrc: export PATH=/path/to/java:$PATH'.

Editores Java populares

Para escrever seus programas Java, você precisará de um editor de texto. Existem IDE ainda mais sofisticados disponíveis no mercado. Mas, por enquanto, você pode considerar um dos seguintes -

  • Notepad - Na máquina Windows, você pode usar qualquer editor de texto simples como o Notepad (recomendado para este tutorial), TextPad.

  • Netbeans - Netbeans é um IDE Java que é de código aberto e gratuito, que pode ser baixado de https://www.netbeans.org/index.html.

  • Eclipse - Eclipse também é um IDE Java desenvolvido pela comunidade de código aberto Eclipse e pode ser baixado de https://www.eclipse.org/.

Cada interface de usuário considera os seguintes três aspectos principais -

  • UI Elements- Esses são os principais elementos visuais que o usuário eventualmente vê e com os quais interage. O GWT fornece uma lista enorme de elementos comuns amplamente usados, variando do básico ao complexo, que abordaremos neste tutorial.

  • Layouts- Eles definem como os elementos da IU devem ser organizados na tela e fornecem uma aparência final para a GUI (Graphical User Interface). Esta parte será abordada no capítulo Layout.

  • Behavior- Esses são os eventos que ocorrem quando o usuário interage com os elementos da IU. Esta parte será abordada no capítulo Tratamento de eventos.

Cada controle SWING herda propriedades da seguinte classe de componente hiearchy.

S.No. Classe e descrição
1 Componente

Um componente é a classe base abstrata para os controles da interface do usuário fora do menu do SWING. O componente representa um objeto com representação gráfica

2 Recipiente

Um contêiner é um componente que pode conter outros componentes SWING

3 JComponent

Um JComponent é uma classe base para todos os componentes SWING UI. Para usar um componente SWING que herda de JComponent, o componente deve estar em uma hierarquia de contenção cuja raiz é um contêiner SWING de nível superior

Elementos de interface do usuário SWING

A seguir está a lista de controles comumente usados ​​ao projetar GUI usando SWING.

S.No. Classe e descrição
1 JLabel

Um objeto JLabel é um componente para colocar texto em um contêiner.

2 JButton

Esta classe cria um botão rotulado.

3 JColorChooser

Um JColorChooser fornece um painel de controles projetado para permitir que um usuário manipule e selecione uma cor.

4 JCheck Box

Um JCheckBox é um componente gráfico que pode estar em um on (verdadeiro ou off (falso) estado.

5 JRadioButton

A classe JRadioButton é um componente gráfico que pode estar em um on (verdadeiro ou off(falso) estado. num grupo.

6 JList

Um componente JList apresenta ao usuário uma lista de rolagem de itens de texto.

7 JComboBox

Um componente JComboBox apresenta ao usuário um menu de opções para mostrar.

8 JTextField

Um objeto JTextField é um componente de texto que permite a edição de uma única linha de texto.

9 JPasswordField

Um objeto JPasswordField é um componente de texto especializado para entrada de senha.

10 JTextArea

Um objeto JTextArea é um componente de texto que permite a edição de várias linhas de texto.

11 ImageIcon

Um controle ImageIcon é uma implementação da interface do ícone que pinta ícones a partir de imagens

12 JScrollbar

Um controle de barra de rolagem representa um componente da barra de rolagem para permitir que o usuário selecione um intervalo de valores.

13 JOptionPane

JOptionPane fornece um conjunto de caixas de diálogo padrão que solicitam aos usuários um valor ou os informa sobre algo.

14 JFileChooser

Um controle JFileChooser representa uma janela de diálogo na qual o usuário pode selecionar um arquivo.

15 JProgressBar

Conforme a tarefa avança em direção à conclusão, a barra de progresso exibe a porcentagem de conclusão da tarefa.

16 JSlider

Um JSlider permite que o usuário selecione graficamente um valor deslizando um botão dentro de um intervalo limitado.

17 JSpinner

Um JSpinner é um campo de entrada de linha única que permite ao usuário selecionar um número ou valor de objeto em uma sequência ordenada.

Neste capítulo, você aprenderá sobre eventos, seus tipos e também como lidar com um evento. Um exemplo é fornecido no final do capítulo para melhor compreensão.

O que é um evento?

A mudança no estado de um objeto é conhecida como Event, ou seja, o evento descreve a mudança no estado da fonte. Os eventos são gerados como resultado da interação do usuário com os componentes da interface gráfica do usuário. Por exemplo, clicar em um botão, mover o mouse, inserir um caractere pelo teclado, selecionar um item da lista e rolar a página são as atividades que fazem com que um evento ocorra.

Tipos de evento

Os eventos podem ser amplamente classificados em duas categorias -

  • Foreground Events- Esses eventos requerem interação direta do usuário. Eles são gerados como consequências da interação de uma pessoa com os componentes gráficos na Interface Gráfica do Usuário. Por exemplo, clicar em um botão, mover o mouse, inserir um caractere pelo teclado, selecionar um item da lista, rolar a página, etc.

  • Background Events- Esses eventos requerem a interação do usuário final. Interrupções do sistema operacional, falha de hardware ou software, expiração do temporizador e conclusão da operação são alguns exemplos de eventos em segundo plano.

O que é manipulação de eventos?

Manipulação de eventos é o mecanismo que controla o evento e decide o que deve acontecer se um evento ocorrer. Este mecanismo possui um código conhecido como manipulador de eventos, que é executado quando ocorre um evento.

Java usa o modelo de evento de delegação para lidar com os eventos. Este modelo define o mecanismo padrão para gerar e tratar os eventos.

O modelo de evento de delegação tem os seguintes participantes principais.

  • Source- A fonte é um objeto no qual o evento ocorre. Source é responsável por fornecer informações do evento ocorrido ao seu manipulador. Java nos fornece classes para o objeto de origem.

  • Listener- Também é conhecido como manipulador de eventos. O ouvinte é responsável por gerar uma resposta a um evento. Do ponto de vista da implementação Java, o ouvinte também é um objeto. O ouvinte espera até receber um evento. Depois que o evento é recebido, o ouvinte processa o evento e retorna.

O benefício dessa abordagem é que a lógica da interface do usuário é completamente separada da lógica que gera o evento. O elemento da interface do usuário é capaz de delegar o processamento de um evento a uma parte separada do código.

Neste modelo, o ouvinte precisa ser registrado com o objeto de origem para que possa receber a notificação do evento. Essa é uma maneira eficiente de lidar com o evento porque as notificações de evento são enviadas apenas para os ouvintes que desejam recebê-las.

Etapas envolvidas no tratamento de eventos

Step 1 - O usuário clica no botão e o evento é gerado.

Step 2 - O objeto da classe de evento em questão é criado automaticamente e as informações sobre a fonte e o evento são preenchidas dentro do mesmo objeto.

Step 3 - O objeto de evento é encaminhado para o método da classe de ouvinte registrada.

Step 4 - O método é executado e retorna.

Pontos a serem lembrados sobre o ouvinte

  • Para projetar uma classe de ouvinte, você deve desenvolver algumas interfaces de ouvinte. Essas interfaces de ouvinte prevêem alguns métodos de retorno de chamada abstratos públicos, que devem ser implementados pela classe de ouvinte.

  • Se você não implementar nenhuma das interfaces predefinidas, sua classe não poderá atuar como uma classe de ouvinte para um objeto de origem.

Métodos de retorno de chamada

Esses são os métodos que são fornecidos pelo provedor de API e são definidos pelo programador do aplicativo e chamados pelo desenvolvedor do aplicativo. Aqui, os métodos de retorno de chamada representam um método de evento. Em resposta a um evento, java jre irá disparar o método de retorno de chamada. Todos esses métodos de retorno de chamada são fornecidos em interfaces de ouvinte.

Se um componente deseja que algum ouvinte ouça seus eventos, a fonte deve se registrar no ouvinte.

Exemplo de manipulação de eventos

Crie o seguinte programa Java usando qualquer editor de sua escolha em dizer D:/ > SWING > com > tutorialspoint > gui >

SwingControlDemo.java

package com.tutorialspoint.gui;

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

public class SwingControlDemo {
   private JFrame mainFrame;
   private JLabel headerLabel;
   private JLabel statusLabel;
   private JPanel controlPanel;

   public SwingControlDemo(){
      prepareGUI();
   }
   public static void main(String[] args){
      SwingControlDemo swingControlDemo = new SwingControlDemo();  
      swingControlDemo.showEventDemo();       
   }
   private void prepareGUI(){
      mainFrame = new JFrame("Java SWING Examples");
      mainFrame.setSize(400,400);
      mainFrame.setLayout(new GridLayout(3, 1));

      headerLabel = new JLabel("",JLabel.CENTER );
      statusLabel = new JLabel("",JLabel.CENTER);        
      statusLabel.setSize(350,100);
      
      mainFrame.addWindowListener(new WindowAdapter() {
         public void windowClosing(WindowEvent windowEvent){
            System.exit(0);
         }        
      });    
      controlPanel = new JPanel();
      controlPanel.setLayout(new FlowLayout());

      mainFrame.add(headerLabel);
      mainFrame.add(controlPanel);
      mainFrame.add(statusLabel);
      mainFrame.setVisible(true);  
   }
   private void showEventDemo(){
      headerLabel.setText("Control in action: Button"); 

      JButton okButton = new JButton("OK");
      JButton submitButton = new JButton("Submit");
      JButton cancelButton = new JButton("Cancel");

      okButton.setActionCommand("OK");
      submitButton.setActionCommand("Submit");
      cancelButton.setActionCommand("Cancel");

      okButton.addActionListener(new ButtonClickListener()); 
      submitButton.addActionListener(new ButtonClickListener()); 
      cancelButton.addActionListener(new ButtonClickListener()); 

      controlPanel.add(okButton);
      controlPanel.add(submitButton);
      controlPanel.add(cancelButton);       

      mainFrame.setVisible(true);  
   }
   private class ButtonClickListener implements ActionListener{
      public void actionPerformed(ActionEvent e) {
         String command = e.getActionCommand();  
         
         if( command.equals( "OK" ))  {
            statusLabel.setText("Ok Button clicked.");
         } else if( command.equals( "Submit" ) )  {
            statusLabel.setText("Submit Button clicked."); 
         } else {
            statusLabel.setText("Cancel Button clicked.");
         }  	
      }		
   }
}

Compile o programa usando o prompt de comando. Vamos paraD:/ > SWING e digite o seguinte comando.

D:\AWT>javac com\tutorialspoint\gui\SwingControlDemo.java

Se nenhum erro ocorrer, significa que a compilação foi bem-sucedida. Execute o programa usando o seguinte comando.

D:\AWT>java com.tutorialspoint.gui.SwingControlDemo

Verifique a seguinte saída.

As classes de eventos representam o evento. Java fornece várias classes de eventos, no entanto, apenas aquelas que são usadas com mais frequência serão discutidas.

Classe EventObject

É a classe raiz da qual todos os objetos de estado de evento devem ser derivados. Todos os eventos são construídos com referência ao objeto, osource, que logicamente é considerado o objeto sobre o qual o Evento em questão ocorreu inicialmente. Esta classe é definida emjava.util pacote.

Declaração de Classe

A seguir está a declaração para java.util.EventObject classe -

public class EventObject
   extends Object
      implements Serializable

Campo

A seguir estão os campos para java.util.EventObject classe -

protected Object source - O objeto no qual o evento ocorreu inicialmente.

Construtores de classe

Sr. Não. Construtor e descrição
1

EventObject(Object source)

Constrói um Evento prototípico.

Métodos de aula

Sr. Não. Método e Descrição
1

Object getSource()

O objeto no qual o evento ocorreu inicialmente.

2

String toString()

Retorna uma representação de String deste EventObject.

Métodos herdados

Esta classe herda métodos da seguinte classe -

  • java.lang.Object

Classes de eventos SWING

A seguir está a lista de classes de eventos comumente usadas.

Sr. Não. Classe e descrição
1 AWTEvent

É a classe de eventos raiz para todos os eventos SWING. Esta classe e suas subclasses substituem o originaljava.awt.Event classe.

2 ActionEvent

O ActionEvent é gerado quando o botão é clicado ou o item de uma lista é clicado duas vezes.

3 InputEvent

A classe InputEvent é a classe de eventos raiz para todos os eventos de entrada em nível de componente.

4 Evento-chave

Ao inserir o caractere, o evento Key é gerado.

5 MouseEvent

Este evento indica que uma ação do mouse ocorreu em um componente.

6 WindowEvent

O objeto desta classe representa a mudança no estado de uma janela.

7 AdjustmentEvent

O objeto desta classe representa o evento de ajuste emitido por objetos Ajustáveis.

8 ComponentEvent

O objeto desta classe representa a mudança no estado de uma janela.

9 ContainerEvent

O objeto desta classe representa a mudança no estado de uma janela.

10 MouseMotionEvent

O objeto desta classe representa a mudança no estado de uma janela.

11 PaintEvent

O objeto desta classe representa a mudança no estado de uma janela.

Os ouvintes de eventos representam as interfaces responsáveis ​​por tratar os eventos. Java fornece várias classes de ouvintes de eventos, no entanto, apenas aquelas que são usadas com mais frequência serão discutidas. Cada método de um método de ouvinte de evento tem um único argumento como um objeto que é a subclasse da classe EventObject. Por exemplo, os métodos de ouvinte de evento do mouse aceitarão a instância de MouseEvent, em que MouseEvent deriva de EventObject.

Interface EventListner

É uma interface de marcador que toda interface de ouvinte deve estender. Esta classe é definida emjava.util pacote.

Declaração de Classe

A seguir está a declaração para java.util.EventListener interface -

public interface EventListener

Interfaces de ouvinte de evento SWING

A seguir está a lista de ouvintes de eventos comumente usados.

Sr. Não. Classe e descrição
1 ActionListener

Esta interface é usada para receber os eventos de ação.

2 ComponentListener

Esta interface é usada para receber os eventos do componente.

3 ItemListener

Esta interface é usada para receber os eventos do item.

4 KeyListener

Esta interface é usada para receber os principais eventos.

5 MouseListener

Esta interface é usada para receber os eventos do mouse.

6 WindowListener

Esta interface é usada para receber os eventos da janela.

7 AdjustmentListener

Esta interface é usada para receber os eventos de ajuste.

8 ContainerListener

Esta interface é usada para receber os eventos do container.

9 MouseMotionListener

Esta interface é usada para receber os eventos de movimento do mouse.

10 FocusListener

Esta interface é usada para receber os eventos de foco.

Adaptadores são classes abstratas para receber vários eventos. Os métodos nessas classes estão vazios. Essas classes existem como conveniência para a criação de objetos de ouvinte.

Adaptadores SWING

A seguir está a lista de adaptadores comumente usados ​​durante a escuta de eventos da GUI no SWING.

Sr. Não. Adaptador e descrição
1 FocusAdapter

Uma classe adaptadora abstrata para receber eventos de foco.

2 KeyAdapter

Uma classe adaptadora abstrata para receber eventos-chave.

3 MouseAdapter

Uma classe adaptadora abstrata para receber eventos de mouse.

4 MouseMotionAdapter

Uma classe de adaptador abstrata para receber eventos de movimento do mouse.

5 WindowAdapter

Uma classe de adaptador abstrata para receber eventos de janela.

Layout refere-se à organização dos componentes dentro do contêiner. De outra forma, pode-se dizer que layout é colocar os componentes em uma determinada posição dentro do contêiner. A tarefa de layout dos controles é feita automaticamente pelo Gerenciador de Layout.

Gerente de Layout

O gerenciador de layout posiciona automaticamente todos os componentes dentro do contêiner. Mesmo se você não usar o gerenciador de layout, os componentes ainda serão posicionados pelo gerenciador de layout padrão. É possível dispor os controles manualmente, no entanto, torna-se muito difícil devido aos dois motivos a seguir.

  • É muito tedioso lidar com um grande número de controles dentro do contêiner.

  • Normalmente, as informações de largura e altura de um componente não são fornecidas quando precisamos organizá-los.

Java fornece vários gerenciadores de layout para posicionar os controles. Propriedades como tamanho, forma e organização variam de um gerenciador de layout para outro. Quando o tamanho do miniaplicativo ou da janela do aplicativo muda, o tamanho, a forma e a organização dos componentes também mudam em resposta, ou seja, os gerenciadores de layout se adaptam às dimensões do visualizador de miniaplicativos ou da janela do aplicativo.

O gerenciador de layout está associado a cada objeto Container. Cada gerenciador de layout é um objeto da classe que implementa a interface LayoutManager.

A seguir estão as interfaces que definem as funcionalidades dos Gerenciadores de Layout.

Sr. Não. Interface e descrição
1 LayoutManager

A interface LayoutManager declara os métodos que precisam ser implementados pela classe, cujo objeto atuará como um gerenciador de layout.

2 LayoutManager2

O LayoutManager2 é a subinterface do LayoutManager. Essa interface é para aquelas classes que sabem como fazer o layout de containers com base no objeto de restrição de layout.

Classes de gerente de layout AWT

A seguir está a lista de controles comumente usados ​​ao projetar GUI usando AWT.

Sr. Não. LayoutManager e descrição
1 BorderLayout

O layout da borda organiza os componentes para caber nas cinco regiões: leste, oeste, norte, sul e centro.

2 CardLayout

O objeto CardLayout trata cada componente do contêiner como um cartão. Apenas um cartão é visível por vez.

3 FlowLayout

O FlowLayout é o layout padrão. Ele faz o layout dos componentes em um fluxo direcional.

4 GridLayout

O GridLayout gerencia os componentes na forma de uma grade retangular.

5 GridBagLayout

Esta é a classe de gerenciador de layout mais flexível. O objeto de GridBagLayout alinha o componente verticalmente, horizontalmente ou ao longo de sua linha de base sem exigir os componentes do mesmo tamanho.

6 GroupLayout

O GroupLayout agrupa hierarquicamente os componentes para posicioná-los em um Container.

7 SpringLayout

Um SpringLayout posiciona os filhos de seu contêiner associado de acordo com um conjunto de restrições.

Como sabemos, cada janela de nível superior possui uma barra de menu associada. Esta barra de menu consiste em várias opções de menu disponíveis para o usuário final. Além disso, cada escolha contém uma lista de opções, que é chamada de menus suspensos. Os controles Menu e MenuItem são subclasses da classe MenuComponent.

Hierarquia do Menu

Controles de menu

Sr. Não. Classe e descrição
1 JMenuBar

O objeto JMenuBar está associado à janela de nível superior.

2 JMenuItem

Os itens no menu devem pertencer ao JMenuItem ou a qualquer uma de suas subclasses.

3 JMenu

O objeto JMenu é um componente de menu suspenso que é exibido na barra de menus.

4 JCheckboxMenuItem

JCheckboxMenuItem é a subclasse de JMenuItem.

5 JRadioButtonMenuItem

JRadioButtonMenuItem é a subclasse de JMenuItem.

6 JPopupMenu

JPopupMenu pode ser exibido dinamicamente em uma posição especificada dentro de um componente.

Os contêineres são parte integrante dos componentes SWING GUI. Um contêiner fornece um espaço onde um componente pode ser localizado. Um contêiner em AWT é um componente em si e fornece a capacidade de adicionar um componente a si mesmo. A seguir estão alguns pontos importantes a serem considerados.

  • As subclasses de Container são chamadas de Container. Por exemplo, JPanel, JFrame e JWindow.

  • O contêiner pode adicionar apenas um componente a si mesmo.

  • Um layout padrão está presente em cada contêiner, que pode ser substituído usando setLayout método.

Contentores SWING

A seguir está a lista de contêineres comumente usados ​​durante a GUI projetada usando SWING.

Sr. Não. Recipiente e descrição
1 Painel

JPanel é o contêiner mais simples. Ele fornece espaço no qual qualquer outro componente pode ser colocado, incluindo outros painéis.

2 Quadro, Armação

Um JFrame é uma janela de nível superior com um título e uma borda.

3 Janela

Um objeto JWindow é uma janela de nível superior sem bordas e sem barra de menus.