Transcript
Java Notas de Aula Prof. André Bernardi
Característica Básica
http://java.sun.com Capacidade de execução em diferentes plataformas e sistemas operacionais, sem a necessidade de recompilação do código fonte.
Subdivisões da Tecnologia Java
Java foi oficialmente apresentado em 1995 pelo consorcio Sun. Em 1999 surge a chamada segunda edição do java na qual foram criadas as seguintes denominações: 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
Compilação
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 Aritméticos
Operadores Relacionais
Operadores
Operadores Lógicos
Regras de precedência
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
Exercícios 1. Escreva um programa em Java que desenhe um Retângulo Na Tela, com as seguintes personalizações possíveis:
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 usuário se o retângulo vai ser preenchido ou não.
Como exemplo, se o programa executasse com largura = 12, altura = 5, com o caractere x para borda, o caractere . para preenchimento e o retângulo fosse preenchido, o resultado seria o mostrado abaixo: xxxxxxxxxxxx x..........x x..........x x..........x xxxxxxxxxxxx
Exercícios 2. Crie um programa em Java calcular e imprimir os 20 primeiros números primos. Lembrar que um número primo é aquele que só é divisível por ele mesmo e por um. 3. Faça um aplicativo Java para calcular o fatorial de um número, digitado pelo usuário. Lembrar que : n! = 1 * 2 * ... * (n-2) * (n-1) * n;
Métodos Outra denominação para “função membro”
Métodos da Classe Math
Métodos da Classe Math
Geração de números aleatórios
Método 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 números aleatórios, através do uso das funções. nextInt, nextDouble, nextFloat, nextGaussian, nextLong, nextBoolean...
Geração de números aleatórios 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);
Exercício 1 1. Crie um método em Java que calcule a distância D (em metros) alcançada por um míssil lançado com uma velocidade inicial V (em m/s) e um ângulo de tiro A (em graus). Sabe-se da física básica que a expressão para esse cálculo (desconsiderando o atrito do ar) é a seguinte:
V 2 .sin( 2 A) D= g
onde g = 9,8 m/s2
Exercício 2 2. O comprimento do arco ABC de uma parábola é dada por , onde a é a altura da parábola e b é a distância 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 parábola correspondente através do uso de uma função
Programação orientada a objetos
Baseada na criação de classes contendo métodos 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 tópico são: Criar e manipular conjuntos de caracteres não modificáveis, objetos da classe String Criar e manipular conjuntos de caracteres modificáveis, objetos da classe StringBuffer Criar e manipular Objetos da classe Character Compreender a utilização da classe StringTokenizer
Classe String - Construtores String(); String( String ); String( charArray ); String( charArray, inicio, numero); String( byteArray, inicio, numero); String ( StringBuffer );
Classe String
Métodos length, charAt, getChars long length() char charAt(posicao) void getChars(inicio, fim, charArray, inicio)
Classe String
Métodos de Comparação 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
Métodos 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);
Métodos 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());
Exercícios
Graphics e Java 2D Notas de Aula Prof. André Bernardi
Introdução
Contexto e Objeto Graphics
O Contexto Graphics habilita o desenho em uma tela em Java O objeto Graphics gerencia um contexto gráfico.Possui controles de fonts e cores
public void paint(Graphics g) public void repaint( ) public void update( Graphics g );
Controle Color
Métodos 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 diálogo", 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 monoespaçada (Courier), 24 pt itálico 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/itálico 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 método 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, Retângulos 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 Polígonos 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 utilização 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 círculos concêntricos 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 método 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 gráfico. 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 métodos:
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(); // obtém o gerador de números aleatórios 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 não 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 aleatórias for ( int count = 1; count <= 20; count++ ) { g2d.rotate( Math.PI / 10.0 ); // rotaciona o sistema de coordenadas // configura cores aleatórias g2d.setColor( new Color( random.nextInt( 256 ), random.nextInt( 256 ), random.nextInt( 256 ) ) ); g2d.fill( star ); // desenha estrela preenchida } // for final } // fim do método paintComponent } // fim da classe Shapes2JPanel
Exercício
Criar um programa em Java para desenhar círculos concêntricos usando duas cores alternadas como o desenho da figura abaixo:
Exercícios
Referencias Java How to program 3, 4, 5 e 6 ed. Deitel e Deitel
Sun http://java.sun.com