Programação de Aplicativos 1

36
20395 - Programação de Aplicativos 1 Professor: Esp. Dhiego Tosatti MSc. Karl Phillip Buhr Créditos: 3 Fase: 4ª

Transcript of Programação de Aplicativos 1

20395 - Programação de Aplicativos 1

Professor: Esp. Dhiego Tosatti MSc. Karl Phillip Buhr

Créditos: 3 Fase: 4ª

Swing

• A API de Java 2D disponibiliza um pacote robusto com ferramentas de desenho para desenvolvimento de gráficos elegantes e profissionais de alta qualidade.

• Estas funcionalidades foram introduzidas como parte do JFC (Java Foundation Classes) no Java 2.

• Nesta seção iremos ter uma visão geral de várias capacidades do Java 2D para desenhar formas bidimensionais, controlar cores e fontes.

• Um dos atrativos iniciais do Java foi seu suporte a imagens gráficas que permitia aos programadores aprimorar visualmente seus aplicativos.

Java 2D http://docs.oracle.com/javase/tutorial/2d/

Swing

• Atualmente, o Java possui muitas capacidades mais sofisticadas de desenho como parte do Java 2D.

• Esta API permite realizar as seguintes tarefas:

• Desenhar linhas, retângulos, elipses, curvas e outras formas geométricas;

• Preencher estas formas com cores sólidas ou gradientes e texturas;

• Desenhar texto com opções de controle sobre a fonte e o processo de renderização;

• Desenhar imagens, com a opção de executar operações com filtros;

Java 2D

Swing

• Um mecanismo para detecção de colisão de formas, texto e imagens;

• Suporte a impressão de documentos complexos;

• Controle sobre a qualidade de renderização.

• Este pacote permite o desenvolvimento de interfaces ricas e complexas, programas sofisticados de desenho e editores de imagens.

Java 2D

Swing

• Utilização de Java 2D para produzir gráficos complexos:

• Utilização de Java 2D para realizar operações de filtragem em imagens:

Java 2D

Swing

• Antes de começar a fazer desenhos com Java 2D é necessário entender o sistema de coordenadas da tela. Este sistema permite posicionar um pixel (um ponto de cor) em uma localização específica na janela.

• Pixel é a menor unidade de resolução do monitor de vídeo.

• O sistema de coordenadas da tela pode ser visto como uma variação do sistema de coordenadas do plano cartesiano, onde a origem (0,0) é localizada no canto superior esquerdo.

Java 2D

Swing

• Para posicionar um pixel na janela, que é uma superfície 2D, utilizamos a notação do plano de coordenadas cartesiano (x, y) para referenciar uma posição específica, onde:

• x especifica o deslocamento horizontal a partir da origem;

• y especifica o deslocamento vertical a partir da origem;

Java 2D

Swing

Java 2D Origem do sistema de coordenadas

Swing

• Através do sistema de coordenadas podemos especificar o local exato de desenho das formas geométricas:

Java 2D

Swing

• A figura a seguir mostra uma parte da hierarquia de classes do Java 2D que inclui várias das classes gráficas básicas e as várias classes e interfaces que investigaremos durante as aulas:

Java 2D

Swing

• A classe Color contém métodos e constantes para manipular cores.

• A classe JComponent contém o método paintComponent(), que é utilizado para pintar um componente na tela.

• A classe Font contém métodos e constantes para manipular fontes.

• A classe FontMetrics contém métodos para obter informações de fonte.

• A classe Graphics contém métodos para desenhar strings, linhas, retângulos e outras formas.

Java 2D

Swing

• A classe Graphics2D, que extende a classe Graphics, é utilizada para desenhar com a API Java 2D.

• A classe Polygon contém métodos para criar polígonos.

• A metade inferior da figura lista várias classes e interfaces da API Java 2D.

• A classe BasicStroke ajuda a especificar as características do desenho de linhas.

• As classes GradientPaint e TexturePaint ajudam a especificar as características para preencher formas com cores ou padrões.

Java 2D

Swing

• As classes GeneralPath, Line2D, Arc2D, Ellipse2D, Rectangle2D e RoundRectangle2D representam várias formas 2D disponibilizadas pelo Java.

Java 2D

Swing

Demo 1

class CustomPanel extends JPanel { public void paintComponent(Graphics g) { // Chama o paintComponent() da superclasse para pintar primeiro

super.paintComponent(g); // Desenha o primeiro retangulo à esquerda

g.drawRect(0, 0, 200, 50); // Desenha o segundo retangulo à direita

g.drawRect(200, 100, 100, 200); } } http://docs.oracle.com/javase/7/docs/api/java/awt/Graphics.html

Swing

Exercício 1

Swing

• Um contexto gráfico é o que nos permite desenhar na tela.

• Entretanto, é somente através de um objeto Graphics que conseguimos realizar esta tarefa. Ele gerencia um contexto gráfico e desenha pixels na tela que representam texto e outros objetos gráficos, como por exemplo: linhas, elipses, retângulos e outros polígonos.

• O objeto Graphics contém métodos para desenhar, manipular fontes, cores e coisas do tipo.

• A classe Graphics é uma classe abstract. Ou seja, não é possível instanciar um objeto deste tipo.

Contextos Gráficos e Objetos Gráficos

Swing

• Quando o Java é implementada em cada plataforma, é criada subclasse de Graphics apropriada para aquela plataforma que implementa as capacidades de desenho.

• Lembre-se das aulas anteriores, onde vimos que a classe Component é a superclasse de muitas classes de java.awt.

• A classe JComponent, oferecida no pacote javax.swing, fornece o método paintComponent() que pode ser utilizado para desenhar imagens gráficas:

public void paintComponent(Graphics g)

Contextos Gráficos e Objetos Gráficos

Swing

public void paintComponent(Graphics g)

• O método acima recebe um objeto Graphicscomo um argumento.

• Este objeto é passado para o método pelo sistema sempre que um componente Swing (lightweight) precisa ser pintado.

• O programador raramente invoca este método no código diretamente, porque toda a parte gráfica do Java é baseada em eventos.

Contextos Gráficos e Objetos Gráficos

Swing

• Ao criar uma GUI, a JVM inicializa uma thread de despacho de evento (Event Dispatch Thread – EDT), que é utilizada para processar todos os eventos GUI.

• A partir de então, todo o desenho e manipulação dos componentes da GUI são realizados por esta thread.

• Quando um aplicativo GUI é executado, o contêiner de aplicativo chama o método paintComponent() (na EDT) para cada componente lightweight a medida que a GUI é exibida na tela.

Contextos Gráficos e Objetos Gráficos

Swing

• Assim, para que paintComponent() seja chamado novamente, deve ocorrer um novo evento, como a janela ser redimensionada, ou quando um componente da GUI é coberto por uma outra janela, forçando assim o redesenho da GUI.

• Se você precisar invocar paintComponent() no código, como por exemplo, para atualizar os elementos gráficos desenhados em um componente Swing, você deve invocar o método repaint(), que por sua vez, se encarrega de efetuar uma chamada a paintComponent():

public void repaint();

Contextos Gráficos e Objetos Gráficos

Swing

Demo 2

class CustomPanel extends JPanel { public void paintComponent(Graphics g) { super.paintComponent(g); // Desenha um retangulo

g.drawRect(0, 0, 200, 50); // Desenha uma linha

g.drawLine(80, 100, 230, 220); // Desenha uma elipse

g.drawOval(250, 250, 75, 90); } }

http://docs.oracle.com/javase/7/docs/api/java/awt/Graphics.html

Swing

Exercício 2

Swing

Exercício 3

Swing

Exercício 4

• Escreva o método drawTriangle() conforme as especificações a seguir:

Modificador e Tipo Método e Descrição

private void drawTriangle(Graphics g, int x1, int y1, int x2, int y2, int x3, int y3)

Desenha um triângulo a partir de 3 pontos 2D.

// corpo drawTriangle(g, 100, 410, 200, 250, 300, 410); // face g.drawOval(100, 50, 190, 200); // mãos g.drawOval(100, 260, 42, 42); g.drawOval(260, 260, 42, 42); // boca g.drawLine(183, 216, 215, 230); // armação do óculos g.drawLine(100, 133, 290, 133); // lentes dos óculos g.drawRect(132, 122, 50, 38); g.drawRect(215, 122, 50, 38);

Swing

Exercício 4 (continuação)

Swing

Demo 3

class CustomPanel extends JPanel { public void paintComponent(Graphics g) { super.paintComponent(g); // fundo (background) Color azulcalcinha = new Color(173, 236, 255); g.setColor(azulcalcinha); g.fillRect(0, 0, 400, 400); // corpo g.setColor(new Color(0, 255, 0)); drawTriangle(g, 100, 410, 200, 250, 300, 410); // face g.setColor(new Color(250, 212, 147)); g.fillOval(100, 50, 190, 200); ...

Swing

Exercício 5

Swing

Exercício 6

Swing

The power of the docs!

java.awt.Graphics

http://docs.oracle.com/javase/7/docs/api/java/awt/Graphics.html

public void paintComponent(Graphics g) { super.paintComponent(g); this.setBackground(Color.WHITE); // set new drawing color using integers g.setColor( new Color( 255, 0, 0 ) ); g.fillRect(15, 25, 100, 20); g.drawString("Current RGB: " + g.getColor(), 130, 40); ...