Engenharia Informática Programação I & Estruturas de Dados e Algoritmos 2001/2002 1 Capítulo 4...
Transcript of Engenharia Informática Programação I & Estruturas de Dados e Algoritmos 2001/2002 1 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
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
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
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 . . . }}
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);
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
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);
Engenharia InformáticaProgramação I & Estruturas de Dados e Algoritmos2001/2002
8
Capítulo 4 – Applets e Gráficos
Sistema deCoordenadas de uma
Elipse
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);
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);
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);
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();
Engenharia InformáticaProgramação I & Estruturas de Dados e Algoritmos2001/2002
13
Capítulo 4 – Applets e Gráficos
Medição do texto
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
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
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
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";
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
Engenharia InformáticaProgramação I & Estruturas de Dados e Algoritmos2001/2002
19
Capítulo 4 – Applets e Gráficos
Output doPrograma
FontApplet.java
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);
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);
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
Engenharia InformáticaProgramação I & Estruturas de Dados e Algoritmos2001/2002
23
Capítulo 4 – Applets e Gráficos
Output doPrograma
CarDrower.java
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); }
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
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; }
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; }
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_); }
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_;}
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;
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);}
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
Engenharia InformáticaProgramação I & Estruturas de Dados e Algoritmos2001/2002
33
Capítulo 4 – Applets e Gráficos
Output doPrograma
Phoenix.java