Introdução à programação GUI: Swing

Computação II - Ciência da Computação


Prof.: Danilo S. Carvalho

Nessa aula, começaremos nosso aprendizado sobre interfaces gráficas de usuário (Graphical User Interfaces - GUIs), usando a linguagem Java.


Ao final da aula, vamos entender alguns dos elementos básicos das GUIs no Java usando o toolkit Swing, que faz parte da biblioteca padrão da linguagem.

Até aqui, aprendemos a interagir com o usuário do programa apenas através do terminal, que oferece uma interface de linha de comando (Command Line Interface - CLI).


Entretanto, sabemos que o uso de CLIs não é intuitivo para a grande maioria dos usuários, que prefere formas de interação mais visual, instantânea e familiar, preferencialmente inspirada em objetos conhecidos.


Por esse motivo, os programas voltados a usuários não técnicos sempre oferecem uma interface gráfica de usuário (GUI), sendo toda a sua operação tipicamente feita através desta interface.

Em um computador desktop ou laptop, a interface gráfica é tipicamente constituída de um ambiente de "área de trabalho" (desktop environment), onde cada aplicação controla uma ou mais janelas.

As janelas são quadros que ocupam uma certa porção da tela, onde podem ser exibidos os elementos de interação do usuário com a aplicação: ícones, botões, caixas de texto, entre outros.

Uma janela também normalmente contém um conjunto de menus para realizar operações como salvar o trabalho feito no programa ou outras que dependem do tipo de dado utilizado, como buscar texto, desfazer operações, etc.

Por fim, uma janela também possui tipicamente uma forma de encerrar o programa, concluindo o seu uso e fazendo com que a janela desapareça.

Esses elementos foram padronizados ao longo da história da programação de GUIs, de forma a aumentar a familiaridade dos usuários, e com isso sua produtividade e interesse nos aplicativos.

Uma GUI pode ser descrita de várias maneiras, mas as mais comuns são: através de código e através de arquivos de marcação.

Usando código da própria linguagem de programação, o programador pode definir e posicionar os elementos da interface como uma sequência de operações.

Em uma linguagem OO, há abstrações para cada elemento diferente e suas propriedades.

Usando uma linguagem de marcação é possível descrever os elementos em termos de sua hierarquia e propriedades, sem necessariamente estar em uma sequência.

Tipicamente, ambas as formas são utilizadas, com a marcação sendo usada para os elementos estáticos e o código para manipulação dos elementos.

Vamos aprender aqui a fazer tudo usando o código. A marcação será abordada em um assunto posterior.

A biblioteca padrão da linguagem Java fornece ferramentas para construir janelas e os demais elementos de interfaces gráficas para os nossos programas.

Iremos aprender aqui a usar o toolkit Swing, que é parte da biblioteca padrão e é compatível com todos os sistemas que implementam um desktop environment e para os quais há uma JRE disponível (ex: Windows, Linux, Mac OS).

As classes do toolkit Swing são encontradas no pacote javax.swing.

Estão organizadas segundo uma hierarquia que define como podem ser combinados e exibidos.

Vamos começar a trabalhar com o JFrame, que descreve uma janela.

Criamos uma classe com um atributo privado que vai representar a janela do nosso programa.

É recomendável criar um método que vai cuidar de inicializar a janela e definir suas propriedades desejadas.

O método setSize() define o tamanho da janela em pixels.

Precisamos também definir o que vai acontecer quando o usuário fechar a janela através dos meios padrões do sistema. Definimos que o programa será encerrado com o método setDefaultCloseOperation().

Por fim, a janela começa invisível e precisamos mostrá-la com o método setVisible().

                        
                            import javax.swing.JFrame;

                            public class ExemploJanelaSwing {
                                private JFrame janela;
                                
                                private void initWindow() {
                                    janela = new JFrame("Janela Swing");
                                    janela.setSize(600, 400);
                                    janela.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                                    
                                    janela.setVisible(true);
                                }

                                public static void main(String[] args) {
                                    new ExemploJanelaSwing().initWindow();

                                }
                            }
                        
                    

Podemos então colocar um botão na janela.

Criamos mais um atributo para representao o botão, dessa vez da classe JButton.

Instanciamos o botão após a janela e adicionamos ele na janela usando o método add() da classe JFrame.

Agora ao iniciar o programa há um botão que ocupa toda a janela.

Aprenderemos como posicionar os elementos na janela na próxima aula.

                        
                            import javax.swing.*;

                            public class ExemploJanelaComBotaoSwing {
                                private JFrame janela;
                                private JButton botao;
                                
                                private void initWindow() {
                                    janela = new JFrame("Janela Swing");
                                    janela.setSize(600, 400);
                                    janela.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                                    
                                    botao = new JButton("Botão");
                                    janela.add(botao);
                                    
                                    janela.setVisible(true);
                                }

                                public static void main(String[] args) {
                                    new ExemploJanelaComBotaoSwing().initWindow();

                                }
                            }
                        
                    

As interfaces gráficas de usuário (GUIs) são necessárias para uma melhor interação do usuário com os programas.


O toolkit Swing oferece as ferramentas para construir GUIs, na biblioteca padrão da linguagem Java.


Usaremos as classes do pacote java.swing para compor nossas interfaces.

Material de apoio

Pergunta:

  1. Para que servem cada uma das classes do toolkit Swing e em que objeto foram inspirados?

Exercício:

  1. Crie um programa com uma janela contendo uma caixa de texto e escrevam o conteúdo de um arquivo de texto nessa caixa.

Até a próxima aula!