Computação II - Java Prof. Adriano Joaquim de Oliveira Cruz Aula Prática - Programando GUIs Exercício 1: A Figura 1 foi gerada pelo programa mostrado na Listagem 1. Rode o programa para confirmar esta afirmação. Figura 1: Figura exemplo do exercicio 1 Listagem 1: Listagem que gera a Figura 1 import java. awt. BorderLayout ; import java. awt. Color ; import javax. swing.*; public c l a s s ExerciseA { public s t a t i c void main ( String [] args ) { JFrame frame = new JFrame (); JPanel panel = new JPanel (); panel. setbackground ( Color. DARK_GRAY ); JButton button = new JButton (" tesuji "); JButton buttontwo = new JButton (" watari "); panel. add ( button ); frame. getcontentpane ().add ( BorderLayout. NORTH, buttontwo ); frame. getcontentpane ().add ( BorderLayout.EAST, panel ); frame. setdefaultcloseoperation ( JFrame. EXIT_ON_CLOSE ); frame. setsize (300, 300) ; frame. setvisible ( true ); 1
Exercício 2: Modifique o programa mostrado no Exercício 1 para que ele gere as interfaces mostradas na Figura 2. (a) Figura A (b) Figura B (c) Figura C (d) Figura D Figura 2: Figuras do exercício 2 2
Exercício 3: Escreva um programa que crie a interface mostrada na Figura 3. Figura 3: Interface do exercício 3 Neste exercício duas classes podem ser úteis. A primeira é a classe Label que pode ser usada para criar objetos que só contém um texto e que podem ser colocados, por exemplo, em um panel. O trecho panel1.add(new Label(Integer.toString(i))); mostra um exemplo de uso desta classe. A segunda classe é a classe GridLayout que permite criar uma matriz de objetos em uma interface. Um exemplo de uso desta classe pode ser visto no trecho de programa mostrado na Listagem 2. grid = new GridLayout (1, 16) ; panel = new JPanel ( grid ); panel1 = new JPanel ( grid ); Listagem 2: Exemplo de uso da class GridLayout Exercício 4: Modifique o programa do exercício anterior para que ao ser apertado o botão Start seja impresso os números dos checkboxes como mostrado abaixo. Observe que o checkbox pode ser marcado e desmarcado e o seu programa deve sempre indicar os checkboxes marcados no instante em que o botão start foi apertado. Check box 2 is selected Check box 7 is selected Check box 10 is selected Check box 11 is selected Exercício 5: Escreva um programa usando Java Swing que desenhe o padrão H-tree conforme mostrado na Figura 4. Considere que a janela será quadrada e o centro do H está no meio desta janela. 3
Figura 4: Figuras do exercício 5 Exercício 6: Somente passe para este exercício se você gostar de desafios e tiver coragem. Agora vamos escrever um programa que gera padrões recursivos do seu desenho H original. A Figura 5 ilustra como devem ficar os seus desenhos para o nível de recursividade 1, 2, 3 e 4. A tela do seu programa deve ser como mostrado na Figura 6. Ou seja você deve usar um campo de texto para entrar com o grau de recursão do desenho. Embora desenhar este padrão pareça complexo, ele pode ser gerado com um programa recursivo curto. O seu programa deve gerar um H e então chamar a si mesmo 4 vezes, alterando as posições do H. As listagens 3 e 4 mostram partes de métodos que podem ajudá-lo. 4
Listagem 3: Parte do método que gera o H // desenhe um H- tree de ordem n centrada em ( x, y) de tamanho size public void draw ( int n, double x, double y, double size ) { i f (n == 0) return ; drawh (x, y, size ); // calcule as coordenadas x e y das H- trees com metade do tamanho da atual. double x0 = double x1 = double y0 = double y1 = // recursivamente desenhe 4 h- trees de ordem n -1 e metade do tamanho draw (n -1,,, ); // lower left H- tree draw (n -1,,, ); // upper left H- tree draw (n -1,,, ); // lower right H- tree draw (n -1,,, ); // upper right H- tree Listagem 4: Parte do método que gera o H // desenhe um H, centrado em ( x, y) e com tamanho size public void drawh (double x, double y, double size ) { // calcule as coordenadas das 4 pontas do H double x0 = ; double x1 = ; double y0 = ; double y1 = ; // draw the 3 line segments of the H // g2d é o objeto gráfico do Java que fica dentro do método paintcomponent g2d. drawline (( int ) x0, ( int ) y0, ( int ) x0, ( int ) y1); // left vertical segment of the H g2d. drawline (( int ) x1, ( int ) y0, ( int ) x1, ( int ) y1); // right vertical segment of the H g2d. drawline (( int ) x0, ( int ) y,( int ) x1, ( int ) y); // connect the two vertical segments of the H 5
(a) Figura N=1 (b) Figura N=2 (c) Figura N=3 (d) Figura N=4 Figura 5: Figuras do exercício 6 Figura 6: Tela do exercício 6 6