J2ME/Lições/Canvas: diferenças entre revisões

[edição verificada][revisão pendente]
Conteúdo apagado Conteúdo adicionado
He7d3r.bot (discussão | contribs)
Atualizando a categoria do livro, com AutoCat (detalhes). utilizando AWB
m <source> -> <syntaxhighlight> (phab:T237267)
 
Linha 5:
Primeiramente precisamos criar uma classe exclusiva separada da classe principal para trabalhar com o Canvas, essa também será importada do pacote '''javax.microedition.lcdui''', e irá estender a classe '''Canvas'''.
 
<sourcesyntaxhighlight lang="java">
//arquivo ClasseMeuCanvas.java
import javax.microedition.lcdui.*;
Linha 11:
public class ClasseMeuCanvas extends Canvas {
}
</syntaxhighlight>
</source>
 
Agora devemos colocar o método '''paint()''' que entra como parâmetro um objeto da classe '''Graphics''' que irá controlar o que irá ser exibido no canvas.
 
<sourcesyntaxhighlight lang="java">
//arquivo ClasseMeuCanvas.java
import javax.microedition.lcdui.*;
Linha 23:
}
}
</syntaxhighlight>
</source>
 
Agora na classe principal, a chamada do objeto da '''ClasseMeuCanvas''' é feita do mesmo modo das chamadas dos outros objetos, através de um método do objeto '''Display''', vejamos abaixo o conteúdo dos 2 arquivos, o '''ClasseMeuCanvas.java''' e o '''ClassePrincipal.java'''.
 
<sourcesyntaxhighlight lang="java">
//arquivo ClasseMeuCanvas.java
import javax.microedition.lcdui.*;
Linha 35:
}
}
</syntaxhighlight>
</source>
 
<sourcesyntaxhighlight lang="java">
//arquivo ClassePrincipal.java
import javax.microedition.midlet.*;
Linha 54:
}
}
</syntaxhighlight>
</source>
 
==Desenhando objetos primitivos==
Linha 64:
Vamos desenhar uma linha simples, vamos usar o método '''drawLine()''' da classe '''Graphics''', ele irá receber 4 atributos: o 1ª será o pixel x de onde a linha vai começar, o 2º será o pixel y de onde a linha vai começar, o 3º o pixel x onde a linha vai terminar, o 4º será o pixel y onde a linha vai terminar.
 
<sourcesyntaxhighlight lang="java">
//arquivo ClasseMeuCanvas.java
import javax.microedition.lcdui.*;
Linha 73:
}
}
</syntaxhighlight>
</source>
 
===Desenhando um retângulo===
Linha 79:
Vamos desenhar um retângulo, vamos usar o método '''drawRect()''' da classe '''Graphics''', ele irá receber 4 atributos: o 1ª será o pixel x de onde o retângulo vai começar, o 2º será o pixel y de onde o retângulo vai começar, o 3º será a largura em pixels do retângulo, o 4º será a altura em pixels do retângulo.
 
<sourcesyntaxhighlight lang="java">
//arquivo ClasseMeuCanvas.java
import javax.microedition.lcdui.*;
Linha 88:
}
}
</syntaxhighlight>
</source>
 
===Desenhando um retângulo cheio===
Linha 94:
Você viu anteriormente como desenhar um retângulo na tela, só que no exemplo anterior esse retângulo era oco por dentro, ou seja, você só desenhou as bordas do retângulo, vamos agora fazer um retângulo totalmente pintado por dentro, para isso vamos usar o método '''fillRect()''' da classe '''Graphics''', ele irá receber os mesmos atributos do método '''drawRect()''': o 1ª será o pixel x de onde o retângulo vai começar, o 2º será o pixel y de onde o retângulo vai começar, o 3º será a largura em pixels do retângulo, o 4º será a altura em pixels do retângulo.
 
<sourcesyntaxhighlight lang="java">
//arquivo ClasseMeuCanvas.java
import javax.microedition.lcdui.*;
Linha 103:
}
}
</syntaxhighlight>
</source>
 
===Desenhando uma String===
Linha 109:
Vamos desenhar uma string, note que não vamos simplesmente colocar a string na tela, vamos desenhá-la, apesar disso o J2ME já vem com uma fonte string padrão para o Canvas. Vamos usar o método '''drawString()''' da classe '''Graphics''', ele irá receber 4 atributos: o 1º será o texto da string, o 2º será o pixel x de onde vai ser desenhado, o 3º será o pixel y de onde vai ser desenhado, o 4º será a "raiz" do objeto, ou seja, onde será a referência dos pixels x e y.
 
<sourcesyntaxhighlight lang="java">
//arquivo ClasseMeuCanvas.java
import javax.microedition.lcdui.*;
Linha 118:
}
}
</syntaxhighlight>
</source>
 
Nesse caso a raiz do pixel x está no ponto esquerdo do objeto ('''Graphics.LEFT'''), e a raiz do pixel y está no ponto acima do objeto ('''Graphics.TOP'''). Você também pode colocar a raiz do pixel x na direita ('''Graphics.RIGHT''') ou no centro ('''Graphics.HCENTER'''), e a raiz do pixel y na parte de baixo ('''Graphics.BOTTOM''') ou no centro ('''Graphics.VCENTER''').
Linha 126:
Você pode setar cores para desenhar objetos com cores diferentes, para isso use o método '''setColor()''' da classe '''Graphics''' entrando como parâmetro os valores das cores vermelho, verde e azul respectivamente.
 
<sourcesyntaxhighlight lang="java">
//arquivo ClasseMeuCanvas.java
import javax.microedition.lcdui.*;
Linha 136:
}
}
</syntaxhighlight>
</source>
 
==Pegando uma cor==
Linha 144:
Primeiro vamos criar a variável inteira que irá armazenar a cor.
 
<sourcesyntaxhighlight lang="java">
//arquivo ClasseMeuCanvas.java
import javax.microedition.lcdui.*;
Linha 153:
}
}
</syntaxhighlight>
</source>
 
Agora vamos setar alguma cor através do método '''setColor()'''.
 
<sourcesyntaxhighlight lang="java">
//arquivo ClasseMeuCanvas.java
import javax.microedition.lcdui.*;
Linha 167:
}
}
</syntaxhighlight>
</source>
 
Agora vamos utilizar o método '''getColor()''', e armazenar o resultado na variável '''corPega'''.
 
<sourcesyntaxhighlight lang="java">
//arquivo ClasseMeuCanvas.java
import javax.microedition.lcdui.*;
Linha 182:
}
}
</syntaxhighlight>
</source>
 
O valor obtido na variável '''corPega''' é equivalente ao número hexadecimal agrupado FF, 80, 40 que se traduz em inteiro como 255, 128, 64.
Linha 192:
Agora primeiramente vamos incluir o pacote '''java.io''' que contém o tratamento de exceção.
 
<sourcesyntaxhighlight lang="java">
//arquivo ClasseMeuCanvas.java
import java.io.*;
import javax.microedition.lcdui.*;
</syntaxhighlight>
</source>
 
Agora criar uma variável da classe '''Image'''.
 
<sourcesyntaxhighlight lang="java">
//arquivo ClasseMeuCanvas.java
import java.io.*;
Linha 210:
}
}
</syntaxhighlight>
</source>
 
Agora vamos usar o construtor para inicializar o objeto '''minhaImagem'''. Para isso vamos jogar a exceção.
 
<sourcesyntaxhighlight lang="java">
//arquivo ClasseMeuCanvas.java
import java.io.*;
Linha 227:
}
}
</syntaxhighlight>
</source>
 
Agora dentro do construtor vamos inicializar o objeto '''minhaImagem''' utilizando o método '''createImage()''' da classe '''Image''', ele receberá como parâmetro o endereço da imagem que você criou.
 
<sourcesyntaxhighlight lang="java">
//arquivo ClasseMeuCanvas.java
import java.io.*;
Linha 245:
}
}
</syntaxhighlight>
</source>
 
Agora dentro do método '''paint()''' vamos botar a nossa imagem para ser exibida, utilizando o método '''drawImage()''' da classe '''Graphics''', como parâmetro ele irá receber 4 atributos: o 1ª será o nome da variável da classe '''Image''', o 2º será o pixel x de onde vai ser desenhado, o 3º será o pixel y de onde vai ser desenhado, o 4º será a "raiz" do objeto, ou seja, onde será a referência dos pixels x e y.
 
<sourcesyntaxhighlight lang="java">
//arquivo ClasseMeuCanvas.java
import java.io.*;
Linha 264:
}
}
</syntaxhighlight>
</source>
 
==Criando uma atualização de tela==
Linha 270:
Vimos como colocar objetos na tela através de um comando, agora vamos ver como se cria uma atualização de tela, para isso dentro do método '''paint()''' iremos usar o método '''repaint()''' que irá funcionar como um "retornador" para o método '''paint()''' ser executado novamente. Para isso vamos primeiro criar uma variável inteira i na ClasseMeuCanvas e vamos inicia-la com o valor 0.
 
<sourcesyntaxhighlight lang="java">
//arquivo ClasseMeuCanvas.java
import javax.microedition.lcdui.*;
Linha 279:
}
}
</syntaxhighlight>
</source>
 
Agora vamos desenhar um simples retângulo na tela, vamos usar como os primeiros atributos a variável i que criamos (que no caso vale 0).
 
<sourcesyntaxhighlight lang="java">
//arquivo ClasseMeuCanvas.java
import javax.microedition.lcdui.*;
Linha 293:
}
}
</syntaxhighlight>
</source>
 
Vamos agora dar um incremento no i, para sempre que se retornar ao '''paint()''' seu valor ser acrescido de +1.
 
<sourcesyntaxhighlight lang="java">
//arquivo ClasseMeuCanvas.java
import javax.microedition.lcdui.*;
Linha 308:
}
}
</syntaxhighlight>
</source>
 
Vamos agora finalmente aplicar o método '''repaint()''' dentro do método '''paint()''', e ver a movimentação do nosso retângulo na tela. Vamos mostrar abaixo o código completo.
 
<sourcesyntaxhighlight lang="java">
//arquivo ClasseMeuCanvas.java
import javax.microedition.lcdui.*;
Linha 324:
}
}
</syntaxhighlight>
</source>
 
==Comandos==
Linha 332:
Primeiramente para usá-lo vamos fazer a chamada do método fora do médodo '''paint()''', o método deverá ser do tipo protected.
 
<sourcesyntaxhighlight lang="java">
//arquivo ClasseMeuCanvas.java
import javax.microedition.lcdui.*;
Linha 344:
}
}
</syntaxhighlight>
</source>
 
Agora vamos definir uma ação para o caso de o usuário apertar a tecla que queremos, no caso vamos escolher a tecla 1 do celular, vamos colocar um '''if''' dentro do método '''keyPressed()'''. Você pode comparar com as constantes '''KEY_NUM1''', '''KEY_NUM2''', ..., '''KEY_STAR''', '''KEY_POUND'''.
 
<sourcesyntaxhighlight lang="java">
//arquivo ClasseMeuCanvas.java
import javax.microedition.lcdui.*;
Linha 361:
}
}
</syntaxhighlight>
</source>
 
Agora vamos colocar uma ação para quando pressionarmos a tecla, nesse caso vamos exibir uma mensagem no console.
 
<sourcesyntaxhighlight lang="java">
//arquivo ClasseMeuCanvas.java
import javax.microedition.lcdui.*;
Linha 380:
}
}
</syntaxhighlight>
</source>
 
Você pode usar o mesmo processo apenas trocando método '''keyPressed()''' por '''keyRepeated()''' ou '''keyReleased()'''.
Linha 390:
Primeiramente vamos usar o mesmo método '''keyPressed()''', '''keyRepeated()''' ou '''keyReleased()''' do módulo anterior.
 
<sourcesyntaxhighlight lang="java">
//arquivo ClasseMeuCanvas.java
import javax.microedition.lcdui.*;
Linha 402:
}
}
</syntaxhighlight>
</source>
 
Agora as constantes das teclas auxiliares não podem ser pegas de forma direta, para isso vamos usar o método '''getKeyCode()''' e como parâmetro vamos entrar o código da tecla que queremos, nesse caso usamos a tecla '''FIRE''' que fica no meio das setas do celular.
 
<sourcesyntaxhighlight lang="java">
//arquivo ClasseMeuCanvas.java
import javax.microedition.lcdui.*;
Linha 419:
}
}
</syntaxhighlight>
</source>
 
Agora vamos colocar uma ação para quando pressionarmos a tecla, nesse caso vamos exibir uma mensagem no console.
 
<sourcesyntaxhighlight lang="java">
public class ClasseMeuCanvas extends Canvas {
protected void keyPressed(int getTecla){
Linha 435:
}
}
</syntaxhighlight>
</source>
 
{{AutoCat}}