Ir para o conteúdo

Interfaces Gráficas

No desenvolvimento de aplicações é natural a necessidade de se criarem interfaces gráficas que permitam a interacção entre o utilizador e a aplicação, em Java, criar aplicações com interface gráficas (GUI1) é possível através de uma de 4 tecnologias: AWT, Swing, SWT e Java2D.

Java2D, como o nome indica, permite-nos criar elementos em 2D, permite ler imagens, mostrar texto, imprimir, desenhar formas geométricas básicas (quadrados, circunferências, etc.) ou polígonos mais complexos. Com Java2D, embora possamos fazer muitas GUIs interessantes, o código necessário é em quantidade e exigência técnica2 maior que nas restantes tecnologias.

AWT3 é o toolkit4 gráfico que foi adicionado ao Java nas versões iniciais, é um toolkit com forte ligação ao sistema operativo, sendo considerado um toolkit cujos componentes são heavy-weight 5 o seu aspecto é o similar às aplicações do Windows 956, e não é o toolkit que se considerará como primeira escolha nas versões actuais do Java.

SWT7 é um toolkit desenvolvido, inicialmente, pela IBM e que é agora controlado pela Eclipse Foundation. Pretende ser um toolkit com aspecto nativo usando as bibliotecas do sistema operativo8 através de ligações JNI9. Embora uma aplicação feita com SWT seja portável, as bibliotecas SWT são específicas para cada sistema operativo.

SWT foi desenhado com o objectivo de atingir uma maior integração com o sistema operativo onde as aplicações são executadas, um aspecto nativo de modo a ser similar a aplicações do sistema operativo, e uma maior performance10.

SWT sofre também de alguma falta de suporte no que toca a IDEs, não existindo ferramentas de desenvolvimento rápido com a mesma qualidade que existem para AWT ou Swing e por não ser parte do standard da plataforma Java11.

Até à versão 6 updade 10 não era possível misturar Swing com SWT de forma coerente e que permitisse utilizar vantagens das duas tecnologias.

Swing é uma evolução do AWT, pretende ser um toolkit extremamente personalizável, com componentes light-weight12 e que oferece mais que um simples conjunto de elementos gráficos mas uma ferramenta completa para a criação de GUIs. Incluí suporte para drag-and-drop, copy+paste, internacionalização, usabilidade, etc. O seu suporte para look-and-feels13 permite uma personalização do aspecto sem limites, quer através de código quer através de XML.

Swing, no entanto, exige que o programador tenha um bom conhecimento de Java e de POO, isto porque a facilidade e desenvolvimento é acompanhada pela facilidade de se desenvolverem aplicações que fazem mau uso dos recursos, resultando numa aplicação lenta, com maus tempos de resposta ou problemas de consumo excessivo de recursos (CPU e memória). Iremos abordar problemas de desenho em pontos seguintes.

(...)

Descrição de Componentes Swing

A framework Swing possui um conjunto de componentes base, que podem ser usados, estendidos e alterados de acordo com as necessidades, esses componentes são:

Componentes simples
JButton Botão que pode conter imagens e texto.
JCheckBox Caixa de seleccção com dois estados.
JComboBox Caixa de combinação que lista um conjunto de valores. Aceita edição.
JList Lista de valores em texto ou imagens.
JMenu Permite a criação de barras de menu.
JRadioButton
JSlider
JSpinner
JTextField Campo de texto.
JPasswordField Campo de texto para introdução de passwords.
Componentes com interactividade complexa
JColorChooser
JEditorPane
JTextPane
JFileChooser
JTable
JTextArea
JTree
Não editáveis
JLabel
JProgressBar
JSeparator
JToolTip
Componentes contentores (obrigatórios)
JApplet
JDialog
JFrame
Pelo menos um destes componentes tem de estar presente numa aplicação Swing.
Componentes contentores (genéricos)
JPanel
JScrollPane
JSplitPane
JTabbedPane
JToolBar
Componentes contentores (especiais)
JInternalFrame
JLayeredPane
JRootPane

  1. Graphical User Interface 

  2. O uso de Java2D é, mesmo assim, bastante simples, a dificuldade surge no esforço necessário para fazer coisas como campos de texto, drag-and-drop, etc. 

  3. Abstract Window Toolkit 

  4. Não se encontra uma tradução comum/aceite para toolkit neste contexto. Consideremos um toolkit um conjunto de componentes reutilizáveis 

  5. Um componente heavy-weight é um componente que não sabe desenhar o seu aspecto e recorre ao sistema operativo para todas as operações de desenho, por exemplo, um painel com um botão, antes de ser desenhado, pede ao sistema operativo um botão. O sistema operativo é então responsável por desenhar o botão, com todas as características pedidas. Este tipo de componentes é mais exigente a nível de recurso. Em oposição existem os componente light-weight. 

  6. Esta comparação é apenas uma aproximação subjectiva do autor 

  7. Standard Widget Toolkit 

  8. Não confundir com componentes heavy-weight, embora alguns componentes SWT sejam heavy-weight. 

  9. Java Native Interface, permite aceder a bibliotecas implementadas em C/C++, código nativo, através de código Java 

  10. Estas características nunca foram provadas em aplicações reais, sendo a performance bastante dependente do contexto, podendo ser mais rápida ou mais lenta que Swing/AWT, o aspecto nativo dependente das bibliotecas nas quais se apoia e a integração um problema à portabilidade devido à falta de funcionalidades iguais em sistemas operativos diferentes. 

  11. Não ser parte do standard significa que o toolkit não está disponível no pacote de instalação do Java, quer do JRE quer do JDK, tendo de ser instalado posteriormente. Esta não é uma condição exclusiva do SWT e outras tecnologias Java são também disponibilizadas como pacotes extra. 

  12. Componentes light-weight não fazem qualquer pedido ao sistema operativo para serem desenhados. São autónomos nesse sentido. Existem alguns componentes em Swing que são heavy-weight, nomeadamente JFrame. 

  13. Look-and-feel, LnF, é um sistema que permite alterar o aspecto de aplicações gráficas feitas em Java. Todos os componentes que suportem alterações de LnF pedem ao LnF activo informações sobre como devem ser desenhados, isto incluí cores, posições, efeitos, etc.