Engenharia Informática Programação I & Estruturas de Dados e Algoritmos 2001/2002 1 Capítulo 4...

33
Engenharia Informática Programação I & Estruturas de Dados e Algoritmos 2001/2002 1 Capítulo 4 – Applets e Gráficos Applets e Gráficos Capítulo 4

Transcript of Engenharia Informática Programação I & Estruturas de Dados e Algoritmos 2001/2002 1 Capítulo 4...

Page 1: Engenharia Informática Programação I & Estruturas de Dados e Algoritmos 2001/2002 1 Capítulo 4 – Applets e Gráficos Applets e Gráficos Capítulo 4.

Engenharia InformáticaProgramação I & Estruturas de Dados e Algoritmos2001/2002

1

Capítulo 4 – Applets e Gráficos

Applets e Gráficos

Capítulo 4

Page 2: Engenharia Informática Programação I & Estruturas de Dados e Algoritmos 2001/2002 1 Capítulo 4 – Applets e Gráficos Applets e Gráficos Capítulo 4.

Engenharia InformáticaProgramação I & Estruturas de Dados e Algoritmos2001/2002

2

Capítulo 4 – Applets e Gráficos

• Aplicações em modo texto:– Input do teclado– Programação mais simples

• Aplicações em modo gráfico:– Input do teclado ou rato– Utiliza componentes gráficas como botões,

menus, etc.– Consegue mostrar gráficos

Tipos de Programas em Java

Page 3: Engenharia Informática Programação I & Estruturas de Dados e Algoritmos 2001/2002 1 Capítulo 4 – Applets e Gráficos Applets e Gráficos Capítulo 4.

Engenharia InformáticaProgramação I & Estruturas de Dados e Algoritmos2001/2002

3

Capítulo 4 – Applets e Gráficos

Applets

• Pode-se fazer download de um Servidores Web

• Executam dentro de um browser• Independentes da plataforma (Windows,

Mac, Linux, Solaris• Necessitam do Java VM• Problema de segurança: um applet é

executado na máquina local

Page 4: Engenharia Informática Programação I & Estruturas de Dados e Algoritmos 2001/2002 1 Capítulo 4 – Applets e Gráficos Applets e Gráficos Capítulo 4.

Engenharia InformáticaProgramação I & Estruturas de Dados e Algoritmos2001/2002

4

Capítulo 4 – Applets e Gráficos

Esqueleto de um Applet

• public class MyApplet extends Applet{

public void init() { // initializations go here . . . } public void paint(Graphics g) { Graphics2D g2 = (Graphics2D)g; // painting instructions go here . . . }}

Page 5: Engenharia Informática Programação I & Estruturas de Dados e Algoritmos 2001/2002 1 Capítulo 4 – Applets e Gráficos Applets e Gráficos Capítulo 4.

Engenharia InformáticaProgramação I & Estruturas de Dados e Algoritmos2001/2002

5

Capítulo 4 – Applets e Gráficos

Program RectangleApplet.java

import java.applet.Applet;import java.awt.Graphics;import java.awt.Graphics2D;import java.awt.Rectangle;

public class RectangleApplet extends Applet{ public void paint(Graphics g) { // recover Graphics2D

Graphics2D g2 = (Graphics2D)g;

// construct a rectangle and draw it

Rectangle cerealBox = new Rectangle(5, 10, 20, 30); g2.draw(cerealBox);

Page 6: Engenharia Informática Programação I & Estruturas de Dados e Algoritmos 2001/2002 1 Capítulo 4 – Applets e Gráficos Applets e Gráficos Capítulo 4.

Engenharia InformáticaProgramação I & Estruturas de Dados e Algoritmos2001/2002

6

Capítulo 4 – Applets e Gráficos

// move rectangle 15 units sideways and 25 units down

cerealBox.translate(15, 25);

// draw moved rectangle

g2.draw(cerealBox); }} // End Class

Page 7: Engenharia Informática Programação I & Estruturas de Dados e Algoritmos 2001/2002 1 Capítulo 4 – Applets e Gráficos Applets e Gráficos Capítulo 4.

Engenharia InformáticaProgramação I & Estruturas de Dados e Algoritmos2001/2002

7

Capítulo 4 – Applets e Gráficos

Formas Gráficas

• Rectangle2D.Double• Ellipse2D.Double• Line2D.Double• Point2D.Double• Exemplo:Ellipse2D.Double egg = new

Ellipse2D.Double(5,10,15,20);g2.draw(egg);

Page 8: Engenharia Informática Programação I & Estruturas de Dados e Algoritmos 2001/2002 1 Capítulo 4 – Applets e Gráficos Applets e Gráficos Capítulo 4.

Engenharia InformáticaProgramação I & Estruturas de Dados e Algoritmos2001/2002

8

Capítulo 4 – Applets e Gráficos

Sistema deCoordenadas de uma

Elipse

Page 9: Engenharia Informática Programação I & Estruturas de Dados e Algoritmos 2001/2002 1 Capítulo 4 – Applets e Gráficos Applets e Gráficos Capítulo 4.

Engenharia InformáticaProgramação I & Estruturas de Dados e Algoritmos2001/2002

9

Capítulo 4 – Applets e Gráficos

Cores• Construtor de cores:

Color magenta = new Color(1.0F, 0.0F, 1.0F);

• Cores pré-definidas, ex. Color.red• Definir uma cor no contexto gráfico:

g2.setColor(magenta);• Desenhar ou preencher:

g2.draw(egg);g2.fill(egg);

Page 10: Engenharia Informática Programação I & Estruturas de Dados e Algoritmos 2001/2002 1 Capítulo 4 – Applets e Gráficos Applets e Gráficos Capítulo 4.

Engenharia InformáticaProgramação I & Estruturas de Dados e Algoritmos2001/2002

10

Capítulo 4 – Applets e Gráficos

Fontes (1)• Características das fontes:

– Nome (ex. "Times Roman", "Helvetica")– Estilo (plain, bold, italic, bold + italic)– Tamanho (ex. 12)

• Font f = new Font("Serif", Font.BOLD, 36);

Page 11: Engenharia Informática Programação I & Estruturas de Dados e Algoritmos 2001/2002 1 Capítulo 4 – Applets e Gráficos Applets e Gráficos Capítulo 4.

Engenharia InformáticaProgramação I & Estruturas de Dados e Algoritmos2001/2002

11

Capítulo 4 – Applets e Gráficos

Fontes (2)

• Definir uma fonte no contexto gráfico:g2.setFont(f);

• Desenhar uma String:g2.drawString("Hello",

50, 100);

Page 12: Engenharia Informática Programação I & Estruturas de Dados e Algoritmos 2001/2002 1 Capítulo 4 – Applets e Gráficos Applets e Gráficos Capítulo 4.

Engenharia InformáticaProgramação I & Estruturas de Dados e Algoritmos2001/2002

12

Capítulo 4 – Applets e Gráficos

Medir o Texto

• Ascent = tamanho acima do baseline• Descent = tamanho abaixo do baseline• Exemplo:FontRenderContext context = g2.getFontRenderContext();TextLayout layout = new TextLayout(“Applet, f, context);float height = layout.getAscent() + layout.getDescent();float width = layout.getAdvance();

Page 13: Engenharia Informática Programação I & Estruturas de Dados e Algoritmos 2001/2002 1 Capítulo 4 – Applets e Gráficos Applets e Gráficos Capítulo 4.

Engenharia InformáticaProgramação I & Estruturas de Dados e Algoritmos2001/2002

13

Capítulo 4 – Applets e Gráficos

Medição do texto

Page 14: Engenharia Informática Programação I & Estruturas de Dados e Algoritmos 2001/2002 1 Capítulo 4 – Applets e Gráficos Applets e Gráficos Capítulo 4.

Engenharia InformáticaProgramação I & Estruturas de Dados e Algoritmos2001/2002

14

Capítulo 4 – Applets e Gráficos

Input de Texto

• Exemplo:String input = JOptionPane.showInputDialog

(“Insert your age”);

• Conversão de uma String em número inteiro:int age = Integer.parseInt(input);

• Por agora, coloque estes comandos no método init de um applet

Page 15: Engenharia Informática Programação I & Estruturas de Dados e Algoritmos 2001/2002 1 Capítulo 4 – Applets e Gráficos Applets e Gráficos Capítulo 4.

Engenharia InformáticaProgramação I & Estruturas de Dados e Algoritmos2001/2002

15

Capítulo 4 – Applets e Gráficos

Exemplo de uma caixa dediálogo

Page 16: Engenharia Informática Programação I & Estruturas de Dados e Algoritmos 2001/2002 1 Capítulo 4 – Applets e Gráficos Applets e Gráficos Capítulo 4.

Engenharia InformáticaProgramação I & Estruturas de Dados e Algoritmos2001/2002

16

Capítulo 4 – Applets e Gráficos

Capítulo 4

Programas para as teóricas

Page 17: Engenharia Informática Programação I & Estruturas de Dados e Algoritmos 2001/2002 1 Capítulo 4 – Applets e Gráficos Applets e Gráficos Capítulo 4.

Engenharia InformáticaProgramação I & Estruturas de Dados e Algoritmos2001/2002

17

Capítulo 4 – Applets e GráficosProgram FontApplet.java

import java.applet.Applet;import java.awt.Graphics;import java.awt.Graphics2D;import java.awt.Font;import java.awt.font.FontRenderContext;import java.awt.font.TextLayout;

public class FontApplet extends Applet{ public void paint(Graphics g) { Graphics2D g2 = (Graphics2D)g;

// select the font into the graphics context

final int HUGE_SIZE = 48; Font hugeFont = new Font("Serif", Font.BOLD,

HUGE_SIZE); g2.setFont(hugeFont);

String message ="Applet";

Page 18: Engenharia Informática Programação I & Estruturas de Dados e Algoritmos 2001/2002 1 Capítulo 4 – Applets e Gráficos Applets e Gráficos Capítulo 4.

Engenharia InformáticaProgramação I & Estruturas de Dados e Algoritmos2001/2002

18

Capítulo 4 – Applets e Gráficos

// create a text layout to measure the string

FontRenderContext context = g2.getFontRenderContext(); TextLayout layout = new TextLayout(message, hugeFont, context);

// measure the message width and height

float xMessageWidth = layout.getAdvance(); float yMessageHeight = layout.getAscent() + layout.getDescent();

// center the message in the window float xLeft = 0.5F * (getWidth()- xMessageWidth); float yTop = 0.5F * (getHeight()- yMessageHeight); float yBase = yTop + layout.getAscent();

g2.drawString(message, xLeft, yBase); }} // End Class

Page 19: Engenharia Informática Programação I & Estruturas de Dados e Algoritmos 2001/2002 1 Capítulo 4 – Applets e Gráficos Applets e Gráficos Capítulo 4.

Engenharia InformáticaProgramação I & Estruturas de Dados e Algoritmos2001/2002

19

Capítulo 4 – Applets e Gráficos

Output doPrograma

FontApplet.java

Page 20: Engenharia Informática Programação I & Estruturas de Dados e Algoritmos 2001/2002 1 Capítulo 4 – Applets e Gráficos Applets e Gráficos Capítulo 4.

Engenharia InformáticaProgramação I & Estruturas de Dados e Algoritmos2001/2002

20

Capítulo 4 – Applets e GráficosProgram CarDrawer.java

import java.applet.Applet;import java.awt.Graphics;import java.awt.Graphics2D;import java.awt.Rectangle;import java.awt.geom.Ellipse2D;import java.awt.geom.Line2D;import java.awt.geom.Point2D;

public class CarDrawer extends Applet{ public void paint(Graphics g) { Graphics2D g2 = (Graphics2D)g;

Rectangle body = new Rectangle(100, 110, 60, 10);

Ellipse2D.Double frontTire = new Ellipse2D.Double(110, 120, 10, 10); Ellipse2D.Double rearTire = new Ellipse2D.Double(140, 120, 10, 10);

Page 21: Engenharia Informática Programação I & Estruturas de Dados e Algoritmos 2001/2002 1 Capítulo 4 – Applets e Gráficos Applets e Gráficos Capítulo 4.

Engenharia InformáticaProgramação I & Estruturas de Dados e Algoritmos2001/2002

21

Capítulo 4 – Applets e Gráficos

Point2D.Double r1 = new Point2D.Double(110, 110); // the bottom of the front windshield Point2D.Double r2 = new Point2D.Double(120, 100); // the front of the roof Point2D.Double r3 = new Point2D.Double(140, 100); // the rear of the roof Point2D.Double r4 = new Point2D.Double(150, 110); // the bottom of the rear windshield

Line2D.Double frontWindshield = new Line2D.Double(r1, r2); Line2D.Double roofTop = new Line2D.Double(r2, r3); Line2D.Double rearWindshield = new Line2D.Double(r3, r4);

Page 22: Engenharia Informática Programação I & Estruturas de Dados e Algoritmos 2001/2002 1 Capítulo 4 – Applets e Gráficos Applets e Gráficos Capítulo 4.

Engenharia InformáticaProgramação I & Estruturas de Dados e Algoritmos2001/2002

22

Capítulo 4 – Applets e Gráficos

g2.draw(body); g2.draw(frontTire); g2.draw(rearTire); g2.draw(frontWindshield); g2.draw(roofTop); g2.draw(rearWindshield);

g2.drawString("JavaMobile 1.2ti", 100, 150); }} // End Class

Page 23: Engenharia Informática Programação I & Estruturas de Dados e Algoritmos 2001/2002 1 Capítulo 4 – Applets e Gráficos Applets e Gráficos Capítulo 4.

Engenharia InformáticaProgramação I & Estruturas de Dados e Algoritmos2001/2002

23

Capítulo 4 – Applets e Gráficos

Output doPrograma

CarDrower.java

Page 24: Engenharia Informática Programação I & Estruturas de Dados e Algoritmos 2001/2002 1 Capítulo 4 – Applets e Gráficos Applets e Gráficos Capítulo 4.

Engenharia InformáticaProgramação I & Estruturas de Dados e Algoritmos2001/2002

24

Capítulo 4 – Applets e GráficosProgram ColorSelect.java

import java.applet.Applet;import java.awt.Color;import java.awt.Graphics;import java.awt.Graphics2D;import java.awt.Rectangle;import javax.swing.JOptionPane;

public class ColorSelect extends Applet{ public void init() { String input;

// ask the user for red, green, blue values

input = JOptionPane.showInputDialog("red:"); float red = Float.parseFloat(input);

input = JOptionPane.showInputDialog("green:"); float green = Float.parseFloat(input);

input = JOptionPane.showInputDialog("blue:"); float blue = Float.parseFloat(input); fillColor_ = new Color(red,green,blue); }

Page 25: Engenharia Informática Programação I & Estruturas de Dados e Algoritmos 2001/2002 1 Capítulo 4 – Applets e Gráficos Applets e Gráficos Capítulo 4.

Engenharia InformáticaProgramação I & Estruturas de Dados e Algoritmos2001/2002

25

Capítulo 4 – Applets e Gráficos public void paint(Graphics g) { final int SQUARE_LENGTH = 100;

Graphics2D g2 = (Graphics2D)g;

// select color into graphics context

g2.setColor(fillColor_);

// construct and fill a square whose center is // the center of the window Rectangle square = new Rectangle( (getWidth() - SQUARE_LENGTH) / 2, (getHeight() - SQUARE_LENGTH) / 2, SQUARE_LENGTH, SQUARE_LENGTH);

g2.fill(square); }

private Color fillColor_;} // End Class

Page 26: Engenharia Informática Programação I & Estruturas de Dados e Algoritmos 2001/2002 1 Capítulo 4 – Applets e Gráficos Applets e Gráficos Capítulo 4.

Engenharia InformáticaProgramação I & Estruturas de Dados e Algoritmos2001/2002

26

Capítulo 4 – Applets e Gráficos

Program Phoenix.java//Class UnitConverter

import java.awt.geom.Line2D;import java.awt.geom.Point2D;import java.awt.geom.RectangularShape;

public class UnitConverter { public UnitConverter(double x1, double x2, double y1, double y2, double w, double h) { xleft_ = x1; xright_ = x2; ybottom_ = y1; ytop_ = y2; width_ = w; height_ = h; }

Page 27: Engenharia Informática Programação I & Estruturas de Dados e Algoritmos 2001/2002 1 Capítulo 4 – Applets e Gráficos Applets e Gráficos Capítulo 4.

Engenharia InformáticaProgramação I & Estruturas de Dados e Algoritmos2001/2002

27

Capítulo 4 – Applets e Gráficos

public Point2D convert(Point2D p) {

double x = xToPixel(p.getX()); double y = yToPixel(p.getY()); p.setLocation(x, y); return p; } public Line2D convert(Line2D l) {

double x1 = xToPixel(l.getX1()); double y1 = yToPixel(l.getY1()); double x2 = xToPixel(l.getX2()); double y2 = yToPixel(l.getY2()); l.setLine(x1, y1, x2, y2); return l; }

Page 28: Engenharia Informática Programação I & Estruturas de Dados e Algoritmos 2001/2002 1 Capítulo 4 – Applets e Gráficos Applets e Gráficos Capítulo 4.

Engenharia InformáticaProgramação I & Estruturas de Dados e Algoritmos2001/2002

28

Capítulo 4 – Applets e Gráficos public RectangularShape convert(RectangularShape r) {

double xmin = xToPixel(r.getMinX()); double ymin = yToPixel(r.getMinY()); double xmax = xToPixel(r.getMaxX()); double ymax = yToPixel(r.getMaxY()); r.setFrameFromDiagonal(xmin, ymin, xmax, ymax); return r; }

public double xToPixel(double x) {

return (x – xleft_) * (width_ - 1) / (xright_ - xleft_); } public double yToPixel(double y) {

return (y – ytop_) * (height_ - 1) / (ybottom_ - ytop_); }

Page 29: Engenharia Informática Programação I & Estruturas de Dados e Algoritmos 2001/2002 1 Capítulo 4 – Applets e Gráficos Applets e Gráficos Capítulo 4.

Engenharia InformáticaProgramação I & Estruturas de Dados e Algoritmos2001/2002

29

Capítulo 4 – Applets e Gráficos public double pixelToX(double px) {

return xleft_ + px * (xright_ - xleft_) / (width_ - 1);

} public double pixelToY(double py) {

return ytop_ + py * (ybottom_ - ytop_) / (height_ - 1);

} private double xleft_; private double xright_; private double ytop_; private double ybottom_; private double width_; private double height_;}

Page 30: Engenharia Informática Programação I & Estruturas de Dados e Algoritmos 2001/2002 1 Capítulo 4 – Applets e Gráficos Applets e Gráficos Capítulo 4.

Engenharia InformáticaProgramação I & Estruturas de Dados e Algoritmos2001/2002

30

Capítulo 4 – Applets e GráficosProgram Phoenix.java//Class Phoeniximport java.applet.Applet;import java.awt.Graphics;import java.awt.Graphics2D;import java.awt.Rectangle;

public class Phoenix extends Applet{ public void paint(Graphics g) { Graphics2D g2 = (Graphics2D)g; month_ = 0; units_ = new UnitConverter(0, 12, 0, 40, getWidth(), getHeight()); final int JAN_TEMP = 11; final int FEB_TEMP = 13; final int MAR_TEMP = 16; final int APR_TEMP = 20; final int MAY_TEMP = 25; final int JUN_TEMP = 31; final int JUL_TEMP = 33; final int AUG_TEMP = 32; final int SEP_TEMP = 29;

Page 31: Engenharia Informática Programação I & Estruturas de Dados e Algoritmos 2001/2002 1 Capítulo 4 – Applets e Gráficos Applets e Gráficos Capítulo 4.

Engenharia InformáticaProgramação I & Estruturas de Dados e Algoritmos2001/2002

31

Capítulo 4 – Applets e Gráficos final int OCT_TEMP = 23; final int NOV_TEMP = 16; final int DEC_TEMP = 12;

drawBar(g2, JAN_TEMP); drawBar(g2, FEB_TEMP); drawBar(g2, MAR_TEMP); drawBar(g2, APR_TEMP); drawBar(g2, MAY_TEMP); drawBar(g2, JUN_TEMP); drawBar(g2, JUL_TEMP); drawBar(g2, AUG_TEMP); drawBar(g2, SEP_TEMP); drawBar(g2, OCT_TEMP); drawBar(g2, NOV_TEMP); drawBar(g2, DEC_TEMP);}

Page 32: Engenharia Informática Programação I & Estruturas de Dados e Algoritmos 2001/2002 1 Capítulo 4 – Applets e Gráficos Applets e Gráficos Capítulo 4.

Engenharia InformáticaProgramação I & Estruturas de Dados e Algoritmos2001/2002

32

Capítulo 4 – Applets e Gráficos

public void drawBar(Graphics2D g2, int temperature) { // construct rectangle for this month and temperature

Rectangle rect = new Rectangle(month_, 0, 1, temperature); // convert to pixel coordinates and draw

units_.convert(rect); g2.draw(rect);

month_ ++; }

private int month_; private UnitConverter units_;} // End Class

Page 33: Engenharia Informática Programação I & Estruturas de Dados e Algoritmos 2001/2002 1 Capítulo 4 – Applets e Gráficos Applets e Gráficos Capítulo 4.

Engenharia InformáticaProgramação I & Estruturas de Dados e Algoritmos2001/2002

33

Capítulo 4 – Applets e Gráficos

Output doPrograma

Phoenix.java