API Swing Java

Propaganda
API Swing Java
André Scarmagnani1 , Matheus Madalozzo1 , Miguel Diogenes Matrakas1
1
UDC ANGLO – Faculdade Anglo Americano (FAA)
Av. Paraná, 5661, CEP: 85868-030 – Foz do Iguaçu – PR – Brasil
[email protected], [email protected]
[email protected]
Abstract. The API Swing is a widget toolkit for Java has its designated use. Works
in a different way from the Abstract Window Toolkit (AWT), but is compatible with
it. The Swing aims to render the components on their own, rather than delegate this
function to the operating system, a common practice among other graphical interface
APIs.
Resumo. A API do Swing é um widget toolkit que possui seu uso designado para
Java. Trabalha de uma maneira distinta do Abstract Window Toolkit (AWT), porém,
é compátivel com o mesmo. O Swing tem como objetivo renderizar por conta própria
os componentes, ao invés de delegar esta função ao sistema operacional, prática
comum entre outras APIs de interface gráfica.
1. Introdução
De acordo com [Jandl 2007], uma aplicação gráfica é executada dentro de um ambiente gráfico
disponibilizado por diversos sistemas operacionais. A Graphical User Interface (GUI) permite
que os usuários trabalhem em uma interface padronizada de uma forma mais simples e intuitiva.
Uma GUI pode fornecer diferentes aparências para um sistema operacional, como o
Mac OS, Microsoft Windows XP, Sun Solaris e outros gerenciadores de interfaces baseados no
X-Window System (MIT) incorporados por sistemas Unix.
Uma vantagem presente na linguagem Java, é que a mesma oferece capacidades únicas
no desenvolvimento de aplicações gráficas que, sem modificação ou recompilação, podem ser
executadas em diferentes ambientes gráficos.
2. Objetivos
A proposta do artigo consiste em fornecer um breve entendimento quanto ao funcionamento de
alguns componentes do Swing, bem como explicar o que originou o seu aparecimento através
de uma breve comparação com a toolkit AWT. Será abordado ainda algumas das classes mais
vistas no Swing, no intuito de disponibilizar uma simples implementação das mesmas.
3. Surgimento do Swing
O propósito do pacote Swing é de superar algumas limitações do pacote AWT, por exemplo, o
AWT utilizava rotinas do sistema operacional para manter seus componentes, entretanto, nem
todos componentes estavam disponíveis em todas as plataformas. No objetivo de amenizar a
situação, a Sun Microsystems incluiu no toolkit apenas componentes básicos, ignorando tabelas, árvores e etc, o que resultou em outros problemas, pois para aplicações mais complexas a
solução era implementar componentes próprios devido aos poucos que eram disponibilizados
na AWT.
A partir da versão do Java 1.2, a Sun incluiu o pacote Swing como evolução do pacote AWT. No Swing foram incluídos componentes próprios que não dependiam de rotinas
do sistema operacional, além de oferecer uma interface gráfica mais evoluida e com maiores
efeitos. Ao contrário do AWT, o Swing emula seus próprios componentes (lightweight), sendo
assim, a renderização dos componentes é feita pelo java. O Swing também supriu as incompatibilidades, possibilitando utilizar os mesmos componentes do AWT em qualquer plataforma,
independente das possíveis implementações nativas do sistema operacional.
A família de componentes Swing possui as seguintes características:
• Componentes Swing: São uma nova geração de componentes com vasta capacidade de
configurações e funcionalidades.
• Suporte para múltiplos Pluggable Look and Feel: Possibilita que aplicações Java utilizarem diferentes aparências visuais que podem ou não serem adaptadas ao ambiente de
execução utilizado.
• Acessibilidade: Possibilita o uso integrado de tecnologias para auxílio de portadores de
necessidades especiais através de monitores e teclados adaptados.
• Java 2D: É um pacote de classes para desenho 2D de gráficos, texto e imagens de alta
qualidade.
• Drag and Drop: Este tipo de suporte consiste na capacidade de arrastar e soltar componentes entre aplicações Java e aplicações nativas.
4. Componentes Swing
A figura (1) deixa visível que os componentes Swing possuem o prefixo J em seus nomes,
diferenciando-os dos componentes AWT. A classe JComponent representa as características
comuns de todos os componentes, ou seja, de todos aqueles objetos que possuem uma representação gráfica, que podem interagir com o usuário e que possuem uma aparência e comportamento.
Figura 1. Estrutura dos componentes Swing. Imagem adaptada [Jandl 2007]
A SMA (Separable Model Architecture) é a estrutura interna dos componentes Swing, semelhante ao padrão MVC (Model-View-Controller). As funcionalidades de um componente do
MVC são divididas da seguinte forma:
Model – administra dados associados ao componenente;
View – é responsável pela visualização e aparência do componente;
Controller – gerencia o funcionamento e visualização do componente que integram uma camada de código separada do modelo utilizado para armazenar seus dados.
Todavia, no SMA a funcionalidade e visualização dos componentes integram uma camada de
código separada do modelo utilizado para armazenar seus dados. Existe uma camada responsável pela visualização e funcionalidade dos componentes, cuja função é permitir que os
componentes exibam uma apresentação diferente em cada plataforma, possibilitando algumas
personalizações inclusive na forma de controle dos componentes. Esta camada é vinculada à
JVM (Java Virtual Machine) e é conhecida como Puggable Look and Feel (PL&F).
Tabela 1. Principais componentes Swing. Tabela adaptada [Jandl 2007]
JApplet, applet
JButton, botão
JCheckBox, caixa de opção
JCheckBoxMenuItem, opção do menu
JColorChooser, diálogo para seleção de cores
JCombo, caixa de seleção
JDesktopPane, janela base para MDI1
JDialog, janela de diálogo
JFileChooser, diálogo para seleção de arquivos JFrame, janela completa
JInternalFrame, janela interna para MDI
JLabel, rótulo de texto
JList, caixa de lista
JMenu, menu pull down
JMenuBar, barra de menus
JMenuItem, item de menu
JOptionPane, diálogo configurável
JPanel, painel
JPasswordField, caixa de entrada de senhas
JPopupMenu, menu pop-up
JProgressBar, barra de progresso
JRadioButton, botão de opção
JScrollBar, barra de rolagem
JScrollPane, painel deslocável
JSeparator, separador
JSlider, controle deslizante
JSpliPane, painel de divisão ajustável
JTabbedPane, painel com abas
JTable, tabela
JTextArea, área de texto
JTextField, caixa de entrada de texto
JTextPane, área de texto com atributos
JToggleButton, botão para conjunto
JToolBar, barra de ferramentas
JTree, árvore
JWindow, janela simples
Alguns dos componentes citados na tabela (1), precisam ser agrupados para obtenção de
funcionalidades específicas, por exemplo, o JTextArea combinado com um JScrollPane
terá suas funcionalidades de rolagem habilitadas.1 [OracleTM 2013]
4.1. JFrame
A classe JFrame é responsável por desenhar uma tela e tratar eventos na mesma, ou seja, a
classe representa uma janela. O trecho de código abaixo mostra um JFrame simples:
1
2
3
4
5
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class SnippetFrame extends JFrame{
// Construtor do Frame.
1
MDI = Multiple Document Interface
public SnippetFrame(){
super();
// adiciona um componente
getContentPane().add(new JLabel ("Teste"));
// Seta a cor do background para branco.
getContentPane().setBackground(Color.white);
// Manda o Java calcular o melhor tamanho para o frame.
pack();
//Adiciona um evento para fechar a aplicacao
addWindowListener(new WindowAdapter(){
public void windowClosing(WindowEvent evt){
System.exit(0);
}
});
setVisible(true);
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
}
public static void main(String[] args) {
new SnippetFrame();
}
21
22
23
24
25
}
A figura (2) mostra graficamente as camadas que formam um JFrame:
Figura 2. Estrutura de um JFrame. Imagem adaptada [Jandl 2007]
Técnicamente, pode-se dizer que o ContentPane é o elemento principal pois trata-se da janela
onde é exibido a aplicação (JPanel), ou seja, é nele que serão adicionados os demais componentes para a janela, gerenciando seu layout e demais características. O acesso ao componente
ocorre da seguinte forma: Container conteudo = getContentPane();. Para adicionar
outros componentes tem-se a forma: conteudo.add(componente);.
A classe JFrame é derivada do pacote java.awt e compartilha os demais métodos das
superclasses Window e Frame. [Jandl 2007]
4.2. JDialog
Em [Deitel and Harvey 2009], afirma-se que o uso desta classe implementa a base para construção de janelas de diálogo, é derivada de Dialog(java.awt) e identica a JFrame, ou seja,
ambas possuem a estrutura interna de forma análoga, podendo conter vários componentes em
seu painel de conteúdo. É importante destacar que com a classe Dialog é possível criar uma
janela que quando exibida, bloqueia o uso das demais janelas da mesma aplicação, com exceção
das janelas criadas sob sua responsabilidade, esta prática é conhecida como janela modal.
Quando um diálogo modal é oculto através do setVisible(false) ou fechado,
dispose(), sua janela responsável deixa de ser bloqueada, podendo ser novamente utilizada.
Portanto, a ação default de fechamento de um diálogo é HIDE_ON_CLOSE, e as demais ações
idênticas àquelas possíveis para um JFrame. O exemplo (1) contém a estrutura de um diálogo
simples com o uso da ação de fechamento HIDE_ON_CLOSE.
Exemplo (1) – Classe SwingDialog
1
2
3
4
5
6
7
8
9
import java.awt.*;
import javax.swing.*;
public class SwingDialog extends JDialog{
public SwingDialog(Frame prop, boolean modal){
super(prop, "Swing Dialog", modal);
setBounds(300, 50, 200, 100);
add(new JLabel("Dialogo"));
}
}
4.3. JWindow
JWindow é um container que pode ser exibido em qualquer lugar da área de trabalho do usuário,
mas não possuindo alguns componentes como barra de título, bordas, menus e demais controles típicos das janelas JFrame ou JDialog. É interessante utilizar este container quando a
decoração e controle das janelas não são convenientes para a aplicação, como em elementos de
informação flutuante (dicas de ferramentas, ajuda e opções de autopreenchimento).
5. Componentes pesados
Alguns componentes Swing não estão amarrados em componentes GUI reais da plataforma
subjacente, ou seja, são denominados como componentes leves. Distintamente, os componentes AWT estão vinculados à plataforma local e, por sua vez, são conhecidos como componentes
de peso pesado devido a dependência do sistema de janela da plataforma local, responsável por
determinar sua funcionalidade, aparência e comportamento.
Os componentes Swing GUI pesados e os AWT, requerem interação direta com o sistema de janela local, que restringe sua aparência e funcionalidade, tornando-os menos flexíveis
do que os componentes leves.
Em [Deitel and Harvey 2009], destaca-se que a aparência e comportamento de uma
GUI definida com os componentes de GUI peso pesado do pacote java.awt podem variar
de uma plataforma para outra. Como os componentes pesados estão vinculados à GUI da plataforma local, a aparência e comportamento variam de plataforma para plataforma.
6. Conclusão
Embasado nos estudos realizados sobre a API Swing, nota-se que o Swing é uma API de alto
nível e, consequentemente, possui maior abstração e menor aproximação das APIs do sistema
operacional. Um aspecto positivo, é que a API Swing é mais completa e independente do
sistema operacional utilizado, as aplicações desenvolvidas com o Swing possuem interfaces
semelhantes.
Tendo em vista os componentes Swing destacados neste artigo, percebe-se uma praticidade na implementação dos mesmos, permitindo que muitos sejam combinados para trazer
diferentes possibilidades de resultados esperados.
Entende-se que o Swing foi inserido como resposta aos inconvenientes causados pelo
uso do AWT. Conforme destacado no artigo, o Swing traz seus componentes renderizados no
próprio java, desta forma, problemas de incompatibilidade entre plataformas foram supridos,
assim como outros problemas que impossibilitavam que o AWT mantivesse.
Referências
Deitel, P. and Harvey, D. (2009). Java: como programar. Pearson Prentice Hall, 8th edition.
Jandl, P. J. (2007). Java: Guia do Programador. Novatec Editora Ltda, 1th edition.
OracleTM
(2013).
The
java
tutorials:
Using
swing
component.
http://docs.oracle.com/javase/tutorial/uiswing/components/.
Acessado em: 23 maio
de 2014.
Download