Você está na página 1de 82

Java

Notas de Aula
Prof. Andr Bernardi

Caracterstica Bsica


http://java.sun.com
Capacidade de execuo em diferentes
plataformas e sistemas operacionais,
sem a necessidade de recompilao do
cdigo fonte.

Subdivises da Tecnologia Java




Java foi oficialmente apresentado em


1995 pelo consorcio Sun.
Em 1999 surge a chamada segunda
edio do java na qual foram criadas as
seguintes denominaes:
 J2ME Java Micro Edition
 J2SE Java Standard Edition
 J2EE Java Enterprise Edition

Ambiente Java

Ambiente Java

Java Application
// Welcome1.java - A first program in Java.
public class Welcome1
{
// main method begins execution of Java application
public static void main( String args[] )
{
System.out.println("Welcome to Java Programming!");
} // end method main
} // end class Welcome1

Compilao


Obter e instalar o compilador java


gratuitamente na pagina da Sun
 http://java.sun.com


http://java.sun.com/j2se/1.5.0/docs/api/

javac Welcome1.java

java Welcome1

Segundo exemplo
// Welcome4.java - Printing multiple lines in a dialog box
// import class JOptionPane
import javax.swing.JOptionPane;
public class Welcome4
{ // main method begins execution of Java application
public static void main( String args[] )
{
JOptionPane.showMessageDialog(null,
"Welcome\nto\nJava\nProgramming!" );
System.exit( 0 ); // terminate application
} // end method main
} // end class Welcome4

Terceiro Exemplo

Terceiro Exemplo

Quarto Exemplo
// Addition program that displays the sum of two numbers.
import java.util.Scanner; // program uses class Scanner
public class Addition
{
// main method begins execution of Java application
public static void main( String args[] )
{ // create Scanner to obtain input from command window
Scanner input = new Scanner( System.in );
int number1;
// first number to add
int number2;
// second number to add
int sum;
// sum of number1 and number2
System.out.print( "Enter first integer: " ); // prompt
number1 = input.nextInt(); // read first number from user
System.out.print( "Enter second integer: " ); // prompt
number2 = input.nextInt(); // read second number from user
sum = number1 + number2; // add numbers
System.out.printf( "Sum is %d\n", sum ); // display sum
} // end method main
} // end class Addition

Operadores

Operadores Aritmticos

Operadores Relacionais

Operadores

Operadores Lgicos

Regras de precedncia

Palavras reservadas

Estruturas de Controle

Estrutura Condicional
if ( studentGrade >= 60 )
System.out.println( "Passed" );

if ( studentGrade >= 60 )
System.out.println( "Passed" );
else
System.out.println( "Failed" );

Estrutura while
int product = 2;
while ( product <= 1000 )
product = 2 * product;

Estrutura for
for ( int counter = 1; counter <= 10; counter++ )
g.drawLine( 10, 10, 250, counter * 10 );

Estrutura switch

Estrutura do/while
int counter = 1;
do {
g.drawOval( 110 - counter * 10, 110 counter * 10, counter * 20,
counter * 20 );
++counter;
} while ( counter <= 10 ); // end do/while

Resumo das estruturas

Resumo das estruturas

Exerccios
1. Escreva um programa em Java que desenhe um Retngulo Na Tela,
com as seguintes personalizaes possveis:





Possua largura e altura lidas pelo teclado;


Leia o caractere que vai ser usado para desenhar a borda;
Leia o caractere de preenchimento;
Pergunte ao usurio se o retngulo vai ser preenchido ou no.

Como exemplo, se o programa executasse com largura = 12, altura = 5,


com o caractere x para borda, o caractere . para preenchimento e o
retngulo fosse preenchido, o resultado seria o mostrado abaixo:
xxxxxxxxxxxx
x..........x
x..........x
x..........x
xxxxxxxxxxxx

Exerccios
2. Crie um programa em Java calcular e
imprimir os 20 primeiros nmeros primos.
Lembrar que um nmero primo aquele que
s divisvel por ele mesmo e por um.
3. Faa um aplicativo Java para calcular o
fatorial de um nmero, digitado pelo usurio.
Lembrar que :
n! = 1 * 2 * ... * (n-2) * (n-1) * n;

Mtodos
Outra denominao para funo
membro

Mtodos da Classe Math

Mtodos da Classe Math

Gerao de nmeros aleatrios




Mtodo random() da classe Math




Gera sempre valores em double na faixa


0.0 x < 1.0

Classe Random da biblioteca java.util




Pode gerar varias formas de nmeros


aleatrios, atravs do uso das funes.
nextInt, nextDouble, nextFloat,
nextGaussian, nextLong, nextBoolean...

Gerao de nmeros aleatrios


int a = (int) ( deslocamento +
Math.random()*escala);
 Gerar valores entre 100 e 899
int a = (int) ( 100 + Math.random()*800);
Random randomNumbers = new Random();
int a = randomNumbers.nextInt();
int a = 100 + randomNumbers.nextInt(800);


Exerccio 1
1. Crie um mtodo em Java que calcule a
distncia D (em metros) alcanada por um
mssil lanado com uma velocidade inicial V
(em m/s) e um ngulo de tiro A (em graus).
Sabe-se da fsica bsica que a expresso para
esse clculo (desconsiderando o atrito do ar)
a seguinte:

V 2 .sin( 2 A)
D=
g

onde g = 9,8 m/s2

Exerccio 2
2. O comprimento do arco ABC de uma parbola
dada por ,
onde a a altura da parbola e b a distncia
entre A e C (veja figura acima). Implemente um
programa em Java que leia os valores a e b e
calcule o comprimento do arco da parbola
correspondente atravs do uso de uma funo

Programao orientada a objetos




Baseada na criao de classes contendo mtodos e atributos


public class GradeBook
{
private String atributo;
public void setAtributo(String a)
{
atributo = a;
}
public String getAtributo()
{
return atributo;
}
public void displayMessage()
{
System.out.println( Hello World!! + getAtributo() );
} // end method displayMessage
} // end class GradeBook

Strings e Caracteres

Strings e Caracteres
Os objetivos deste tpico so:
 Criar e manipular conjuntos de caracteres
no modificveis, objetos da classe String
 Criar e manipular conjuntos de caracteres
modificveis, objetos da classe StringBuffer
 Criar e manipular Objetos da classe
Character
 Compreender a utilizao da classe
StringTokenizer

Classe String - Construtores


String();
String( String );
String( charArray );
String( charArray, inicio, numero);
String( byteArray, inicio, numero);
String ( StringBuffer );

Classe String

Mtodos length, charAt, getChars


long length()
char charAt(posicao)
void getChars(inicio, fim,
charArray, inicio)

Classe String

Mtodos de Comparao
boolean equals(String); // true se iguais
boolean equalsIgnoreCase(String);
int compareTo(String);( <0, ==0, >0 )
boolean regionMatches(inicio, string,
inicio, cont); // true se iguais
boolean String.regionMatches(caseIgnore,
inicio, string, inicio, cont);
boolean String.startWith(String, offset);
boolean String.endWith(String);

Classe String
Localizando caracteres e substrings
int
int
int
int

indexOf(String);
indexOf(String, inicio);
indexOf(char);
indexOf(char, inicio);

int
int
int
int

lastIndexOf(String);
lastIndexOf(String, inicio);
lastIndexOf(char );
lastIndexOf(char, inicio);

Classe String


Extraindo substrings
String substring(indice);
String substring(inicio,
final);
Concatenando strings
String String.concat( String );

Classe String

Mtodos Variados
String replace(charFrom, charTo)
String toLowerCase()
String toUpperCase()
String trim()
String toString()
char[ ] toCharArray()

Classe StringBuffer


Construtores
StringBuffer();
StringBuffer(int);
StringBuffer(String);
StringBuffer(StringBuffer);

Mtodos length, capacity


StringBuffer.length();
StringBuffer.capacity();

Classe StringBuffer
StringBuffer.charAt(int);
StringBuffer.setCharAt(posicao, char);
StringBuffer.getChars(inicio, fim,
destino, inicio);
StringBuffer.reverse();

Classe StringBuffer
StringBuffer.append(Object);
StringBuffer.append(String);
StringBuffer.append(char);
StringBuffer.append(char[]);
StringBuffer.append(char[], start, end );
StringBuffer.append(int);
StringBuffer.append(long);
StringBuffer.append(float);
StringBuffer.append(double);

Classe StringBuffer
StringBuffer.insert(pos,Object);
StringBuffer.insert(pos,String);
StringBuffer.insert(pos,char);
StringBuffer.insert(pos,charArray);
StringBuffer.insert(pos,int);
StringBuffer.insert(pos,long);
StringBuffer.insert(pos,float);
StringBuffer.insert(pos,double);
StringBuffer.insert(pos,String);
StringBuffer.deleteCharAt(pos);
StringBuffer.delete(inicio,fim);

Classe Character
boolean
boolean
boolean
boolean
boolean
boolean
boolean
boolean
boolean

Character.isDefined(char)
Character.isJavaIdentifierStart(char)
Character.isJavaIdentifierPart(char)
Character.isDigit(char)
Character.isLetter(char)
Character.isLetterOrDigit(char)
Character.isLowerCase(char)
Character.isUpperCase(char)
Character.isWhitespace(char)

Faixa de valores do char


int Character.MIN_VALUE
int Character.MAX_VALUE


Classe StringTokenizer




long StringTokenizer.countTokens()
boolean StringTokenizer.hasMoreTokens()
String StringTokenizer.nextToken()

// Exemplo
StringTokenizer strT;
strT = new StringTokenizer
(Uma frase com cinco palavras);
while(strT.hasMoreTokens())
System.out.println(strT.nextToken());

Exerccios

Graphics e Java 2D
Notas de Aula
Prof. Andr Bernardi

Introduo

Contexto e Objeto Graphics




O Contexto Graphics habilita o desenho


em uma tela em Java
O objeto Graphics gerencia um contexto
grfico.Possui controles de fonts e cores




public void paint(Graphics g)


public void repaint( )
public void update( Graphics g );

Controle Color

Mtodos da classe Color











public Color( int r, int g, int b )


public Color( float r, float g, float b )
public int getRed()
public int getGreen()
public int getBlue()
public Color getColor()
public void setColor( Color c )

JColorChooser


JColorChooser.showDialog(
Component, Titulo do dilogo", corInicial )

Controle Fonts


public final static int


PLAIN
public final static int
BOLD
public final static int
ITALIC
public Font( String
name, int style, int
size )
public int getStyle()











public int getSize()


public String getName()
public String getFamily()
public boolean isPlain()
public boolean isBold()
public boolean isItalic()
public Font getFont()
public void setFont( Font f )

// Fig. 12.11: FontJPanel.java


// exibe strings em diferentes fontes e cores.
import java.awt.Font;
import java.awt.Color;
import java.awt.Graphics;
import javax.swing.JPanel;
public class FontJPanel extends JPanel
{
// exibe Strings em diferentes fontes e cores
public void paintComponent( Graphics g )
{
// chama o paintConponent da superclasse
super.paintComponent( g );
// fonte configurada como Serif (Times), negrito, 12 pt
g.setFont( new Font( "Serif", Font.BOLD, 12 ) );
g.drawString( "Serif 12 point bold.", 20, 50 );

// fonte monoespaada (Courier), 24 pt itlico


g.setFont(
setFont new Font( "Monospaced", Font.ITALIC, 24 ) );
g.drawString(
drawString "Monospaced 24 point italic.", 20, 70 );
// fonte SansSerif (Helvetica), simples, 14 pt
g.setFont(
setFont new Font( "SansSerif", Font.PLAIN, 14 ) );
g.drawString(
drawString "SansSerif 14 point plain.", 20, 90 );
// fonte Serif (Times), 18 pt negrito/itlico
g.setColor(
setColor Color.RED );
g.setFont(
setFont new Font( "Serif", Font.BOLD + Font.ITALIC, 18 ) );
g.drawString(
drawString g.getFont().getName() + " " +
g.getFont().getSize() + " point bold italic.", 20, 110 );
} // fim do mtodo paintComponent
} // fim da classe FontJPanel

Controle Fonts








public int getAscent()


public int getDescent()
public int getLeading()
public int getHeight()

public FontMetrics getFontMetrics()


public FontMetrics getFontMetrics( Font f )

Desenhando Linhas,
Retngulos e ovais









public void drawLine( int x1, int y1, int x2, int y2 )
public void drawRect( int x, int y, int width, int height )
public void clearRect( int x, int y, int width, int height )
public void fillRect( int x, int y, int width, int height )
public void drawRoundRect( int x, int y, int width, int height,
int arcWidth, int arcHeight )
public void fillRoundRect( int x, int y, int width, int height,
int arcWidth, int arcHeight )
public void draw3DRect( int x, int y, int width, int height,
boolean b )
public void fill3DRect( int x, int y, int width, int height,
boolean b )
public void drawOval( int x, int y, int width, int height )
public void fillOval( int x, int y, int width, int height )

Desenhando Arcos


public void drawArc( int x, int y, int width, int


height, int startAngle, int arcAngle )
public void fillArc( int x, int y, int width, int height,
int startAngle, int arcAngle )

Desenhando Polgonos e Polilinhas







public void drawPolygon( int xPoints[],


int yPoints[], int points )
public void drawPolyline( int xPoints[],
int yPoints[], int points )
public void drawPolygon( Polygon p )
public void fillPolygon( int xPoints[], int
yPoints[], int points )
public void fillPolygon( Polygon p )

// Fig. 7.22: DrawRainbow.java


// Demonstra a utilizao de cores em um array.
import java.awt.Color;
import java.awt.Graphics;
import javax.swing.JPanel;
public class DrawRainbow extends JPanel
{
// Define as cores ndigo e violeta
final Color VIOLET = new Color( 128, 0, 128 );
final Color INDIGO = new Color( 75, 0, 130 );
// a utilizar no arco-ris, iniciando da parte mais interna
// As duas entradas em branco resultam em um arco vazio no centro
private Color colors[] =
{ Color.WHITE, Color.WHITE, VIOLET, INDIGO, Color.BLUE,
Color.GREEN, Color.YELLOW, Color.ORANGE, Color.RED };
// construtor
public DrawRainbow()
{
setBackground( Color.WHITE ); // configura o fundo como branco
} // fim do construtor DrawRainbow

// desenha um arco-ris utilizando crculos concntricos


public void paintComponent( Graphics g )
{
super.paintComponent( g );
int radius = 20; // raio de um arco
// desenha o arco-ris perto da parte central inferior
int centerX = getWidth() / 2;
int centerY = getHeight() - 10;
// desenha arcos preenchidos com o mais externo
for ( int counter = colors.length; counter > 0; counter-- )
{
// configura a cor para o arco atual
g.setColor( colors[ counter - 1 ] );
// preenche o arco de 0 a 180 graus
g.fillArc( centerX - counter * radius,
centerY - counter * radius,
counter * radius * 2, counter * radius * 2, 0, 180 );
} // for final
} // fim do mtodo paintComponent
} // fim da classe DrawRainbow

Exemplo - DrawSmiley
// Fig. 6.16: DrawSmiley.java
// Demonstrates filled shapes.
import java.awt.Color;
import java.awt.Graphics;
import javax.swing.JPanel;
public class DrawSmiley extends JPanel
{
public void paintComponent( Graphics g )
{
super.paintComponent( g );
// draw the face
g.setColor( Color.YELLOW );
g.fillOval( 10, 10, 200, 200 );

// draw the eyes


g.setColor( Color.BLACK );
g.fillOval( 55, 65, 30, 30 );
g.fillOval( 135, 65, 30, 30 );
// draw the mouth
g.fillOval( 50, 110, 120, 60 );
// "touch up" the mouth into a smile
g.setColor( Color.YELLOW );
g.fillRect( 50, 110, 120, 30 );
g.fillOval( 50, 120, 120, 40 );
} // end method paintComponent
} // end class DrawSmiley

API Java2D





Para acessar as funcionalidades da


biblioteca Graphics2D devemos
obter sua referencia a partir de um
contexto grfico.
Graphics2D g2d = ( Graphics2D ) g
g2d.translate(x, y)
g2d.rotate(radianos)

Java2D Shapes


java.awt.geom


Ellipse2D.Double

Rectangle2D.Double

RoundRectangle2D.Double

Arc2D.Double

Line2D.Double

API Java2D
g2d.setPaint( new GradientPaint( 5, 30,
Color.blue, 35, 100, Color.yellow, true ) );
g2d.fill( new Ellipse2D.Double( 5, 30, 65, 100 ) );
g2d.setPaint( Color.red );
g2d.setStroke( new BasicStroke( 10.0f ) );
g2d.draw( new Rectangle2D.Double( 80, 30, 65,
100 ) );

API Java2D
BufferedImage buffImage = new BufferedImage( 10, 10,
BufferedImage.TYPE_INT_RGB );
Graphics2D gg = buffImage.createGraphics();
gg.setColor( Color.yellow );
// draw in yellow
gg.fillRect( 0, 0, 10, 10 );
// draw a filled rectangle
gg.setColor( Color.black ); // draw in black
gg.drawRect( 1, 1, 6, 6 );
// draw a rectangle
gg.setColor( Color.blue ); // draw in blue
gg.fillRect( 1, 1, 3, 3 );
// draw a filled rectangle
gg.setColor( Color.red ); // draw in red
gg.fillRect( 4, 4, 3, 3 );
// draw a filled rectangle

API Java2D
g2d.setPaint( new TexturePaint( buffImage, new
Rectangle( 10, 10 ) ) );
g2d.fill( new RoundRectangle2D.Double(155, 30, 75, 100,
50, 50 ) );
g2d.setPaint( Color.white );
g2d.setStroke( new BasicStroke( 6.0f ) );
g2d.draw( new Arc2D.Double(240, 30, 75, 100, 0, 270,
Arc2D.PIE ) ); //Arc2D.CHORD Arc2D.OPEN

API Java2D
g2d.setPaint( Color.green );
g2d.draw( new Line2D.Double( 395, 30, 320, 150 ) );
g2d.setPaint( Color.yellow );
g2d.setStroke( new BasicStroke( 4,
BasicStroke.CAP_ROUND,
BasicStroke.JOIN_ROUND, 10, dashes, 0 ) );
g2d.draw( new Line2D.Double( 320, 30, 395, 150 ) );

API Java2D


GradientPaint( xi, yi, CorI, xf, yf, CorF, cicl )

BufferedImage(lagura, altura,
BufferedImage.TYPE_INT_RGB )
buffImage.createGraphics();

TexturePaint(buffImage, new Rectangle( lagura,


altura ) )

BasicStroke( 4, BasicStroke.CAP_ROUND,
BasicStroke.JOIN_ROUND, 10, dashes, 0 ) );

Classe GeneralPath


Podemos construir uma Shape


personalizada com a classe GeneralPath
Utilizamos os mtodos:






moveTo( x , y )
lineTo (x , y )
curveTo(x1, y1, x2, y2, x3, y3)
quadTo(x1, y1, x2, y2)
closePath()

// Fig. 12.31: Shapes2JPanel.java


// Demonstrando um caminho geral.
import java.awt.Color;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.geom.GeneralPath;
import java.util.Random;
import javax.swing.JPanel;
public class Shapes2JPanel extends JPanel
{
// desenha caminhos gerais
public void paintComponent( Graphics g )
{
super.paintComponent( g ); // chama o paintComponent da superclasse
Random random = new Random(); // obtm o gerador de nmeros aleatrios
int xPoints[] = { 55, 67, 109, 73, 83, 55, 27, 37, 1, 43 };
int yPoints[] = { 0, 36, 36, 54, 96, 72, 96, 54, 36, 36 };
Graphics2D g2d = ( Graphics2D ) g;
GeneralPath star = new GeneralPath(); // cria o objeto GeneralPath

// configura a coordenada inicial do General Path


star.moveTo( xPoints[ 0 ], yPoints[ 0 ] );
// cria a estrela -- isso no desenha a estrela
for ( int count = 1; count < xPoints.length; count++ )
star.lineTo( xPoints[ count ], yPoints[ count ] );
star.closePath(); // fecha a forma
g2d.translate( 200, 200 ); // translada a origem para (200, 200)
// gira em torno da origem e desenha estrelas em cores aleatrias
for ( int count = 1; count <= 20; count++ )
{
g2d.rotate( Math.PI / 10.0 ); // rotaciona o sistema de coordenadas
// configura cores aleatrias
g2d.setColor( new Color( random.nextInt( 256 ),
random.nextInt( 256 ), random.nextInt( 256 ) ) );
g2d.fill( star ); // desenha estrela preenchida
} // for final
} // fim do mtodo paintComponent
} // fim da classe Shapes2JPanel

Exerccio


Criar um programa em Java para


desenhar crculos concntricos usando
duas cores alternadas como o desenho
da figura abaixo:

Exerccios

Referencias
Java How to program 3, 4, 5 e 6 ed.
Deitel e Deitel


Sun
http://java.sun.com