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. |