Cours Java - La page de Michel GRIMALDI

Transcription

Cours Java - La page de Michel GRIMALDI
LANGAGE JAVATM
Michel GRIMALDI
Licence
Paternité - Pas d'Utilisation Commerciale
Vous êtes libres :
* de reproduire, distribuer et communiquer cette création au public
* de modifier cette création, selon les conditions suivantes :
Paternité. Vous devez citer le nom de l'auteur original.
Pas d'Utilisation Commerciale.
Vous n'avez pas le droit d'utiliser cette création à des fins commerciales.
Partage des Conditions Initiales à l'Identique.
Si vous modifiez, transformez ou adaptez cette création, vous n'avez le droit de distribuer la création
qui en résulte qu'à condition de citer l'auteur.
Qu’est-ce que Java?
Java™
est avant tout un langage de programmation
inventé en 1991 par James Gosling chez Sun
Microsystems
 Disponible au public depuis 1995
Son
succès original vient de l’inclusion d’une machine
virtuelle (VM) dans le navigateur Internet de Netscape®
 Pour inclure des “applets” sur des pages HTML
 Java a largement dépassé son concept
d’origine
Caractéristiques Principales de Java
Le
terme “Java” se réfère au langage
La “technologie Java” inclut le langage, l’environnement
d’exécution (JRE), les kits de développement (JDK or
J2SDK), les APIs, etc.
Ses caractéristiques principales sont:
 Totalement orienté objet
 Totalement indépendant de la plate-forme
“Write Once, Run Anywhere : écrire une fois, exécuter
partout”
Quelques chiffres*










97 % des bureaux d'entreprise exécutent Java
89 % des bureaux (ou ordinateurs) des Etats-Unis exécutent
Java
9 millions de développeurs Java dans le monde
Choix n° 1 des développeurs
Plate-forme de développement n° 1
3 milliards de téléphones mobiles exécutent Java
100 % des lecteurs Blu-ray livrés avec Java
5 milliards de cartes Java utilisées
125 millions de périphériques TV exécutent Java
Les 5 fabricants d'équipement d'origine principaux
fournissent Java ME
* https://www.java.com/fr/about/
Les éditions Java 2
Java SE anciennement J2SE : Java Standard Edition
Développement d’applications (d’applets) côté terminal
Java EE anciennement J2EE et JavaONE
J2SE + Développement d’applications côté serveur (servlets/JSP,
portlets, applets, EJB, JMS, XA, SOAP…)
Java ME : Java Micro Edition
2 configurations de machine
CDC : JVM
CLDC : KVM
EmbeddedJava
JVM + tout package est optionnel
PersonalJava (pJava)
JVM + nombre réduit de packages (devenu un profile de CDC)
SavaJe XE
J2SE + OS pour des PDA Haut de Gamme http://www.savaje.com/
JavaCard
JCVM + packages propre à JavaCard
Java Standard Edition
Java SE (Java Standard Edition) est le framework Java destiné
aux applications pour poste de travail.
Ce framework contient toutes les API de base, mais également
toutes les API spécialisées dans le poste client : JFC (Java
Foundation Classes), et donc Swing, AWT et Java2D (Java 2D
Graphics API ), ainsi que des API d'usage général comme JAXP
(pour le parsing XML) et JDBC (pour la gestion des bases de
données).
XML
<!-- Edited by XMLSpy® -->
−
<note>
<to>Tove</to>
<from>Jani</from>
<heading>Reminder</heading>
<body>Don't forget me this weekend!
</body>
</note>
Java Micro Edition
Java ME (Java Micro Edition) est le framework Java spécialisé dans les
applications mobiles. Des plates-formes Java compatibles avec Java
ME sont embarquées dans de nombreux téléphones portables et PDA.
Une plate-forme Java ME est composée :
• d'une KVM (Kilobyte Virtual Machine), une machine virtuelle capable d'exécuter une
application Java
• d'une « configuration », une API donnant accès aux fonctions de base du système
• d'un « profil », une API donnant accès aux fonctions spécifiques de la plate-forme.
Les configurations les plus courantes sont :
• CLDC (Connected Limited Device Configuration), que l'on retrouve par exemple dans les
téléphones mobiles
• CDC (Connected Device Configuration), qui est plutôt utilisé dans des décodeurs de
télévision numérique
Les profils les plus courants sont :
• MIDP (Mobile Information Device Profile), dont sont équipés les téléphones WAP J2ME
• DoJa, développé par NTT DoCoMo pour les téléphones i-mode J2ME
JAVA embarqué
Carte
à puce (SmartCard )
 Téléphone mobile (Cellular Phone)
 PalmPC, PocketPC, Assistant Personnel
Cartable Electronique (eBook)
 Appareil photo, …
 Decodeur TV Numérique (Set Top Box)
Console de jeu (Game Console)
 Electronique consomable (Electronic
Consuming)
 Terminal de paiement, Guichet, Parcmètre
 Portail maison, domotique
 Autmobile
 Wearable computer (Augmented Reality)
 Prothèse active
 Satellite ...
Java et Android
Android est un système d'exploitation
pour téléphone portable de nouvelle
génération développé par Google.
Android n'est pas totalement conforme à
JAVA car Google n’utilise pas la
machine virtuelle Java (JVM)
Google a créé pour Android sa propre
machine virtuelle, la Dalvik Virtual
Machine (DVM).
Celui-ci met à disposition un kit de
développement (SDK) basé sur le
langage Java.
Plateforme android
Smartphones :
Android
atteint 82 %
de parts du
marché
mondial
« Gartner Inc. Octobre 2013»
Vers plus d’un
milliard de
terminaux Android
en 2014
Eléments du langage
JavaTM Platform
Java – langage orienté objet
 La
programmation orientée objet consiste à modéliser
informatiquement un ensemble d'éléments d'une partie du
monde réel (que l'on appelle domaine) en un ensemble
d'entités informatiques. Ces entités informatiques sont appelées
objets. Ces derniers regroupent es principales caractéristiques
des éléments du monde réel (taille, couleur, …) et leur
comportement.
 L'approche
objet est basée sur trois notions :
– L'encapsulation
– L'héritage
– Le polymorphisme
Les types de données primitifs
Types primitifs de JAVA (primitives)
Primitive
Signification
Taille (en octets)
Plage de valeurs acceptée
char
Caractère
2
valeur du jeu de caractères Unicode (65000 caractères possibles)
byte
Entier très court
1
-128 à 127
short
Entier court
2
-32768 à 32767
int
Entier
4
-2 147 483 648 à 2 147 483 647
long
Entier long
8
-9223372036854775808 à 9223372036854775807
float
flottant (réel)
4
-1.4*10-45 à 3.4*1038
double
flottant double
8
4.9*10-324 à 1.7*10308
boolean
booléen
1
0 ou 1 (en réalité, toute autre valeur
que 0 est considérée égale à 1)
Attributs, variables, constantes,
tableaux…
// déclaration de variable
int x;
float u, v ;
char c = ‘A’;
float toto = 125.36f; final float pi = 3.14159 ;
// tableau
int monTableau[ ] = new int[10];
// ou : int [ ] monTableau = new int[10];
//initialisation tableau
int [] autreTableau = {2,3,5,7,11,0,17};
int nb;
autreTableau[5] = 23; // 2 3 5 7 11 23 17
nb = monTableau[4]; // nb=11 tableaux
// tableau à 2 dimensions // ex : (matrice 5 lignes x 6 colonnes)
int[][] matrice=new int[5][];
for (int i=0 ; i<matrice.length­1; i++)
matrice[i]=new int[6];
// autre dimension
int[][] matrice2 =
{
{ 0, 1, 4, 3 } , { 5, 7, 9, 11, 13, 15, 17 }
};
int i, j;
for(i=0; i<matrice2.length­1; i++) {
for(j=0; j<matrice2[i].length­1; j++) {
//Action sur matrice2[i][j]
}
}
Length donne le
nombre d'éléments
du tableau
Opérateurs
Opérateurs
de calcul
Opérateur
Dénomination
Effet
Exemple
Résultat (avec x valant 7)
+
opérateur d'addition
Ajoute deux valeurs
x+3
10
-
opérateur de soustraction
Soustrait deux valeurs
x-3
4
*
opérateur de multiplication
Multiplie deux valeurs
x*3
21
/
plus: opérateur de division
Divise deux valeurs
x/3
2.3333333
=
opérateur d'affectation
Affecte une valeur à une variable
x=3
Met la valeur 3 dans la variable x
Opérateur
Opérateurs
d’assignation
Effet
+=
addition deux valeurs et stocke le résultat dans la variable (à gauche)
-=
soustrait deux valeurs et stocke le résultat dans la variable
*=
multiplie deux valeurs et stocke le résultat dans la variable
/=
divise deux valeurs et stocke le résultat dans la variable
Opérateurs
d’incrémentation
Opérateur
Dénomination
Effet
Syntaxe
Résultat (avec x valant 7)
++
Incrémentation
Augmente d'une unité la variable
x++
8
--
Décrémentation
Diminue d'une unité la variable
x--
6
Opérateurs …
Opérateur
Opérateurs de
Comparaison
Opérateurs
logiques
Dénomination
Effet
Exemple
==
A ne pas confondre avec le signe
d'affectation (=)!!
opérateur
d'égalité
Compare deux valeurs et vérifie leur
égalité
x==3
<
opérateur
d'infériorité stricte
Vérifie qu'une variable est strictement
inférieure à une valeur
x<3
<=
opérateur
d'infériorité
Vérifie qu'une variable est inférieure ou
égale à une valeur
x<=3
>
opérateur de
supériorité stricte
Vérifie qu'une variable est strictement
supérieure à une valeur
x>3
>=
opérateur de
supériorité
Vérifie qu'une variable est supérieure ou
égale à une valeur
x>=3
!=
opérateur de
différence
Vérifie qu'une variable est différente
d'une valeur
x!=3
Opérateur
Dénomination
Effet
||
OU logique
Vérifie qu'une des conditions est réalisée
&&
ET logique
Vérifie que toutes les conditions sont réalisées
!
NON logique
Inverse l'état d'une variable booléenne (retourne la valeur True si la variable vaut False, False si elle
vaut True)
Opérateurs
bits à bits
Opérateurs de
rotation de bits
Opérateu
r
&
Dénominatio
n
ET bit-à-bit
9 & 12 (1001 & 1100)
|
OU inclusif
9 | 12 (1001 | 1100)
^
OU exclusif
9 ^ 12 (1001 ^ 1100)
Dénomination
Syntaxe
Syntaxe
Opérateu
r
<<
Rotation à gauche
6 << 1 (110 << 1)
>>
Rotation à droite avec conservation du signe
6 >> 1 (0110 >> 1)
>>>
Rotation à droite avec remplissage de zéros
3 >>> 1 (0011 >>> 1)
Les enveloppeurs (wrappers)
Enveloppeur
Primitive associée
BigDecimal
aucune primitive associée, car cette classe peut contenir des valeurs décimales de précision quelconque
BigInteger
aucune primitive associée, car cette classe peut contenir des valeurs entières de précision quelconque
Character
char
Byte
byte
Short
short
Integer
int
Long
long
Float
float
Double
double
Boolean
boolean
Void
void
Exemple :
la class Double
java.lang.Object
Héritée en java.lang.Number
Hérité en java.lang.Double
La classe Double encapsule une valeur du type primitif double sous la forme d'un objet. La
classe offre plusieurs méthodes pour les conversions double/String, String/double, et d'autres
facilités
Constructeurs :
Double(double value)
Double(String s)
Les instructions …
•
Lorsque l'on veut regrouper plusieurs instructions, on peut créer
un bloc, c'est-à-dire un ensemble d'instructions comprises
entre les accolades { et }.
•
•
•
•
•
•
•
L'instruction if et if ... else …
Opérateur ternaire (condition) ? instruction si vrai : instruction si faux
L'instruction switch … case…
L'instruction for
L'instruction while
Saut inconditionnel: continue
Arrêt inconditionnel: break
Exceptions
La gestion des exceptions avec Java consiste à définir au sein d'une méthode une
clause "try{}" contenant les instructions qui risquent de provoquer une exception et
de la faire suivre immédiatement par une clause "catch(){}" contenant comme
paramètre l'exception attendue précédée de son type et dont le contenu sera une
liste d'instructions à exécuter lorsque l'exception se produira.
classNom_de_la_classe
Nom_de_la_classe{ {
class
publicstatic
staticvoid
voidmain(String[]
main(String[]args)
args){ {
public
Instructionsinoffensives
inoffensives(affectations,
(affectations,...);
...);
////Instructions
}}
try { {
try
Instructionssusceptibles
susceptiblesde
deprovoquer
provoquerdes
deserreurs;
erreurs;
////Instructions
} }**
catch(TypeException
(TypeExceptione)e){ {
catch
Instructionsde
detraitement
traitementde
del'erreur;
l'erreur;
////Instructions
}}
Instructionssisiaucune
aucuneerreur
erreurest
estapparue;
apparue;
////Instructions
}}
* Aucune instruction ne doit se trouver entre le bloc try{} et le bloc catch{} . Les blocs try{} et catch{} peuvent
chacun contenir plusieurs instructions
Exceptions - exemple
Double.valueOf
converti une chaine
en double
try {
try {
String str = “156.78”;
String str = “156.78”;
String str2;
String str2;
double valeur = Double.valueOf(str);
double valeur = Double.valueOf(str);
valeur = valeur/tauxChangeEuroDollar;
valeur = valeur/tauxChangeEuroDollar;
str2 = String.valueOf(valeur);
str2 = String.valueOf(valeur);
} catch (NumberFormatException nx) {
} catch (NumberFormatException nx) {
System.out.println("Erreur de conversion");
System.out.println("Erreur de conversion");
}
}
java.lang
Class NumberFormatException
java.lang.Object
extended by java.lang.Throwable
extended by java.lang.Exception
extended by java.lang.RuntimeException
extended by java.lang.IllegalArgumentException
extended by java.lang.NumberFormatException
http://docs.oracle.com/javase/1.5.0/docs/api/java/lang/NumberFormatException.html
Comment obtenir JAVA
http://www.oracle.com/technetwork/java/javase/downloads/
index.html
C'est ce site que vous devrez
toujours avoir ouvert
quand vous développerez
en JAVA
Documentation:
http://docs.oracle.com/javase/8/docs/api/index.html
Java Development Kit de Sun
Le compilateur
compilateur javac
javac
Le
Lasyntaxe
syntaxeest
estlalasuivante
suivante: :javac
javac[options]
[options][fichiers]
[fichiers][@fichiers]
[@fichiers]
La
L'interpréteur java/javaw
java/javaw
L'interpréteur
Cesdeux
deuxoutils
outilssont
sontles
lesinterpréteurs
interpréteursde
debyte
bytecode
code: :ils
ilslancent
lancentleleJRE,
JRE,chargent
chargentles
lesclasses
classesnécessaires
nécessaires
Ces
executentlalaméthode
méthodemain
mainde
delalaclasse.
classe.
etetexecutent
javaouvre
ouvreune
uneconsole
consolepour
pourrecevoir
recevoirles
lesmessages
messagesde
del'application
l'applicationalors
alorsque
quejavaw
javawn'en
n'enouvre
ouvrepas.
pas.
java
L'outil JAR
JAR
L'outil
JAR est
est lelediminutif
diminutifde
deJava
JavaARchive.
ARchive.C'est
C'estun
unformat
format de
defichier
fichierqui
quipermet
permetde
deregrouper
regrouperdes
desfichiers
fichiers
JAR
contenantdu
dubyte-code
byte-codeJava
Java(fichier
(fichier.class)
.class)ou
oudes
desdonnées
donnéesutilisées
utiliséesen
entemps
tempsque
queressources
ressources(images,
(images,
contenant
son,...).
...).Ce
Ceformat
formatest
estcompatible
compatibleavec
avecleleformat
formatZIP
ZIP: :les
lesfichiers
fichierscontenus
contenusdans
dansun
unjar
jarsont
sontcompressés
compressés
son,
defaçon
façonindépendante
indépendantedu
dusystème
systèmed'exploitation.
d'exploitation.
de
Pour tester
tester les
les applets
applets :: l'outil
l'outil appletviewer
appletviewer
Pour
Cetoutil
outilpermet
permetde
detester
testerune
uneapplet.
applet.L'intérêt
L'intérêtde
decet
cetoutil
outilest
estqu'il
qu'ilpermet
permetde
detester
testerune
uneapplet
appletavec
aveclala
Cet
version courante
courante du
du JDK.
JDK. Un
Un navigateur
navigateur classique
classique nécessite
nécessite un
un plug-in
plug-in pour
pour utiliser
utiliser une
une version
version
version
particulièredu
duJRE.
JRE.
particulière
Pour générer
générer lala documentation
documentation :: l'outil
l'outil javadoc
javadoc
Pour
Cetoutil
outilpermet
permetde
degénérer
générerune
unedocumentation
documentationààpartir
partirdes
desdonnées
donnéesinsérées
inséréesdans
danslelecode
codesource.
source.
Cet
Code JAVA.
Dans le cadre de ce cours nous n'aborderons que
des programmes représentant:
 Des
applications consoles
 Des applications graphiques
 Des applets
 Applications Android
http://www.javacoffeebreak.com/
Application console JAVA
grimaldi@grimaldi­desktop­GEII: cat MainClass.java public class MainClass {
public static void main (String[] args){
int i;
for (i = 0 ; i<10 ; i++)
System.out.println("Hello World");
}
}
grimaldi@grimaldi­desktop­GEII: javac MainClass.java
// une application HelloWorld en console
grimaldi@grimaldi­desktop­GEII: java MainClass public class MainClass {
Hello World
Hello Worldpublic static void main (String[] args){
Hello World
int i;
Hello World
for (i = 0 ; i<10 ; i++)
Hello World
System.out.println("Hello World");
Hello World }
Hello World
Hello World
}
Hello World
Hello World
Exécution du code JAVA
Erreurs…
public class MainClass {
public static void main (String[] args){
int i;
for (i = 0 ; i<10 ; i++)
System.out.println("Hello World");
}
Pas d’erreurs…
Compilateur
JAVA
1001 1101
1110 1101
0011 0110
0000 0001
…
Byte code
}
Code source
Toto.class
Toto.java
Machine
virtuelle
(JVM)
Hello World
Hello World
Hello World
…
Paramètres de la ligne de commande
public class Exo1 {
public static void main(String[] args) {
if (args.length<1){
System.out.println("vous devez spécifier au moins un paramètre.");
return;
}
System.out.print("Bonjour ");
for (int i=0 ; i<args.length ; i++){
System.out.print(args[i]);
System.out.print(' ');
}
System.out.println();
}
}
>javac Exo1.java
>java Exo1 aa bbb hhh ttt Bonjour aa bbb hhh ttt
>java Exo1
vous devez spécifier au moins un paramètre.
exercice
Calcul du factoriel d'un nombre entré sur la ligne de commande
int Integer.parseInt(String);
public class Factoriel {
public static void main(String[] arg) {
int n, factorielle = 1 ;
if (arg.length!=1) {
System.out.println("usage: java Factoriel nbre.");
return;
}
n = Integer.parseInt(arg[0]);
for (int i = 2; i <= n; i++) factorielle *= i;
System.out.println("la factorielle de " + n + " = " + factorielle);
}
}
>javac Factoriel.java
>java Factoriel usage: java Factoriel nbre.
>java Factoriel 5 la factorielle de 5 = 120
>java Factoriel k
Exception in thread "main" java.lang.NumberFormatException: For input string: "k"
at java.lang.NumberFormatException.forInputString(NumberFormatException.java:65)
at java.lang.Integer.parseInt(Integer.java:492)
at java.lang.Integer.parseInt(Integer.java:527)
at Factoriel.main(Factoriel.java:9)
exercice
Calcul du factoriel d'un nombre entré sur la ligne de commande avec vérification
paramètre.
try … catch()
public class Factoriel {
public static void main(String[] arg) {
int n, factorielle = 1 ;
if (arg.length!=1) {
System.out.println("usage: java Factoriel nbre.");
return;
}
try{
n = Integer.parseInt(arg[0]);
}
catch(NumberFormatException ex){
System.out.println("le paramètre doit être un nombre entier!");
return;
}
for (int i = 2; i <= n; i++) factorielle *= i;
System.out.println("la factorielle de " + n + " = " + factorielle);
}
}
Déclaration de classes JAVA
import java...... ;
import java...... ;
public class MaClasse extends ClasseMere {
int x ;
AutreClasse obj ;
héritage
attributs
public MaClasse(){
obj = new AutreClasse() ;
}
constructeur
public MaClasse(argument){
super(argument) ;
}
public static void main (String[] args){
}
}
class AutreClasse {
… attributs … public AutreClasse(){
}
… méthodes … }
Classe privée
Exercice : un point du plan
class Point{
private int x;
private int y;
public Point(){ x = y = 0; }
public Point(int x, int y){ this.x = x; this.y = y; }
public int getX(){ return x; }
public int getY(){ return y; }
public void setX(int x){ this.x = x; }
public void setY(int y){ this.y = y; }
public void affiche(){
System.out.println("("+x+","+y+")");
}
public double dist(Point p){
return Math.sqrt(Math.pow(x­p.getX(), 2)+Math.pow(y­p.getY(), 2) );
}
}
Exercice : un cercle du plan
class Cercle{
private Point centre;
private int r;
public Cercle(){
centre = new Point();
r=1;
}
public Cercle(int x, int y, int r){
centre = new Point(x, y);
this.r = r;
}
public void affiche(){
centre.affiche();
System.out.println(r);
}
public boolean contient(Point p){
return centre.dist(p)<=r;
}
}
Exercice : application Point&Cercle
import java.math.*;
public class PointCercle {
public static void main(String[] arg) {
Point p1 = new Point(10, 10);
Point p2 = new Point(10, 5);
Cercle c = new Cercle(10, 10, 10);
p2.affiche();
c.affiche();
System.out.print("p2 est à ");
if (c.contient(p2))System.out.print("l'intérieur "); else System.out.print("l'extérieur ");
System.out.println("du cercle!");
}
};
class Point{
Comme précédemment . . .
}
class Cercle{
Comme précédemment . . .
}
>java PointCercle (10,5)
(10,10)
10
p2 est à l'intérieur du cercle!
>
La classe String
public class Toto{
public static void main(String[] args){
String str1="bonjour";
String str2="bonjour";
String str3 = new String("bonjour");
System.out.println(str1+" "+str2+" "+str3);
if (str1==str2)System.out.println("1 == 2"); else System.out.println("1 != 2");
if (str1==str3)System.out.println("1 == 3"); else System.out.println("1 != 3");
if (str2==str3)System.out.println("3 == 2"); else System.out.println("3 != 2");
}
}
bonjour bonjour bonjour
1 == 2
1 != 3
3 != 2
La classe String
public class Toto{
public static void main(String[] args){
String str1="bonjour";
String str2="bonjour";
String str3 = new String("bonjour");
if (str1==str2)System.out.println("1 == 2"); else System.out.println("1 != 2");
if (str1==str3)System.out.println("1 == 3"); else System.out.println("1 != 3");
if (str2==str3)System.out.println("3 == 2"); else System.out.println("3 != 2");
str1 = "hello";
System.out.println(str1+" "+str2+" "+str3);
if (str1==str2)System.out.println("1 == 2"); else System.out.println("1 != 2");
if (str1==str3)System.out.println("1 == 3"); else System.out.println("1 != 3");
if (str2==str3)System.out.println("3 == 2"); else System.out.println("3 != 2");
}
}
1 == 2
1 != 3
3 != 2
hello bonjour bonjour
1 != 2
1 != 3
3 != 2
La classe String
public class Toto{
public static void main(String[] args){
String str1="bonjour";
String str2="bonjour";
String str3 = new String("bonjour");
if (str1==str2)System.out.println("1 == 2"); else System.out.println("1 != 2");
if (str1==str3)System.out.println("1 == 3"); else System.out.println("1 != 3");
if (str2==str3)System.out.println("3 == 2"); else System.out.println("3 != 2");
if (str1.equals(str2))System.out.println("1 == 2"); else System.out.println("1 != 2");
if (str1.equals(str3))System.out.println("1 == 3"); else System.out.println("1 != 3");
if (str2.equals(str3))System.out.println("3 == 2"); else System.out.println("3 != 2");
}
}
1 == 2
1 != 3
3 != 2
1 == 2
1 == 3
3 == 2
La classe String
concaténation
String s1 = "Bonjour" ; String s2 = "le monde !" ; String s3 = s1 + " " + s2 ;
Bonjour le monde !
extraction d'une sous-chaîne
String s1 = "Bonjour le monde !" ; String s2 = s1.substring(8) ; // à partir du 8ème caractère String s3 = s1.substring(8, 10) ; // du 8ème au 10ème caractère
le monde !
le
Comparaison de chaînes
public class Toto{
public static void main(String[] args){
String str1 = "[email protected]";
String str2 = "[email protected]";
System.out.println(str1.compareTo(str2));
System.out.println(str1.compareToIgnoreCase(str2));
}
}
­4
­4
La classe String
comparaisons lexicographiques
public class Toto{
public static void main(String[] args){
String str1 = "[email protected]";
String str2 = "[email protected]";
String str3 = "grimaldiafree.fr";
String emailregularexp =
"^[_A­Za­z0­9­\\+]+(\\.[_A­Za­z0­9­]+)*@[A­Za­z0­9­]+(\\.[A­Za­z0­9]+)*(\\.[A­Za­z]{2,})$";
System.out.println(str1.startsWith("gr"));
boolean isemailaddress = str1.matches(emailregularexp);
boolean isemailaddress2 = str3.matches(emailregularexp);
System.out.println(isemailaddress);
System.out.println(isemailaddress2);
}
}
true
true
false
remplacement
public class Toto{
public static void main(String[] args){
String str1 = "au clair de la lune mon ami Pierrot";
String str2, str3;
str2 = str1.replace("e", "x");
str3 = str1.replaceFirst("e","x");
System.out.println(str2);
System.out.println(str3);
}
}
au clair dx la lunx mon ami Pixrrot
au clair dx la lune mon ami Pierrot
La classe String
Sous chaînes
public class Toto{
public static void main(String[] args){
String s = " Grimaldi;Michel;Java " ; s = s.trim() ;
System.out.println(s);
String[] a = s.split("\\;");
for (int i=0 ; i<a.length ; i++){
System.out.println(a[i]);
}
}
Grimaldi;Michel;Java
Grimaldi
Michel
Java
}
http://blog.paumard.org/cours/java/chap03­object­string­string.html
Entrée au clavier
package javaapplication7;
import java.util.Scanner; import java.util.*;
public class JavaApplication7 {
Veuillez saisir une phrase :
au clair de la lune
Vous avez saisi : au clair de la lune
mot 0 = au
mot 1 = clair
mot 2 = de
mot 3 = la
mot 4 = lune
/**
* @param args the command line arguments
*/
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("Veuillez saisir une phrase :");
String str = sc.nextLine();
System.out.println("Vous avez saisi : " + str);
String[] arguments = str.split(" ");
for (int i=0 ; i<arguments.length ; i++){
System.out.println("mot "+i+" = "+arguments[i]);
}
}
}
Application graphique
import javax.swing.*;
public class GraphApp {
public static void main (String[] args){
JFrame fenetre = new JFrame();
fenetre.setTitle("Une application Graphique Swing");
fenetre.setSize(300,200);
JLabel label = new JLabel("Hello World !");
fenetre.getContentPane().add(label);
fenetre.setVisible(true);
}
}
>ls
GraphApp.java
>javac GraphApp.java
>ls
GraphApp.class GraphApp.java
>java GraphApp
// une fenêtre
// son titre
// sa taille
// un label
// insertion // affichage
La classe JFrame
javax.swing
Class JFrame
java.lang.Object
java.awt.Component
java.awt.Container
java.awt.Window
java.awt.Frame
javax.swing.JFrame
http:
acle.c
r
o
.
s
//doc
/docs
8
/
e
s
ava
om/j
wing
s
/
x
a
av
/api/j
tml
h
.
e
m
/JFra
All Implemented Interfaces:
ImageObserver, MenuContainer, Serializable, Accessible, RootPaneContainer, WindowConstants
public class Frame
extends Window
implements MenuContainer
A Frame is a top-level window with a title and a border.
http:
//d
/java
m
o
c
.
racle
o
.
s
c
o
l
.htm
e
m
a
r
wt/F
a
/
a
v
a
api/j
/
s
c
o
se/8/d
The size of the frame includes any area designated for the border. The dimensions of the border area may be obtained using
the getInsets method, however, since these dimensions are platform-dependent, a valid insets value cannot be obtained
until the frame is made displayable by either calling pack or show. Since the border area is included in the overall size of
the frame, the border effectively obscures a portion of the frame, constraining the area available for rendering and/or
displaying subcomponents to the rectangle which has an upper-left corner location of (insets.left, insets.top), and has a size
of width - (insets.left + insets.right) by height - (insets.top + insets.bottom).
The default layout for a frame is BorderLayout.
Bibliothèques /
Packages
JavaTM Platform
Java Platform, Standard Edition
Documentation en ligne
http://docs.oracle.com/javase/8/docs/
(doc officielle)
Utilisation
directe d’une
classe
particulière
d’un package
Organisation
class Exemple {
static void main(String args[]){
java.shape2D.Circle c1 = new java.shape2D.Circle();
...
}
}
• Un package est un regroupement de classes, travaillant
conjointement sur le même domaine.
• Partant de cette idée les concepteurs du langage ont développé
une série de packages permettant d'utiliser l'ensemble des
ressources de la machine (c'est l'API de Java).
• Nous pouvons utiliser des classes d'un package et créer nos
propres packages
Importation
d’une
classe ou
import java.awt.Button; // On importe la classe
Button
de toutes
les
import java.shape2D.*; // On importe toutes les
classes
classes d’un
package
class Exemple {
static void main(String args[]){
Circle c1 = new Circle();
...
}
}
Les packages …
java.applet
java.applet
java.awt
java.awt
java.beans
java.beans
java.io
java.io
java.lang
java.lang
java.math
java.math
Provides
Providesthe
theclasses
classesnecessary
necessarytotocreate
createananapplet
appletand
andthe
theclasses
classesananapplet
appletuses
usestotocommunicate
communicatewith
withitsitsapplet
appletcontext.
context.
Contains
Containsall
allofofthe
theclasses
classesfor
forcreating
creatinguser
userinterfaces
interfacesand
andfor
forpainting
paintinggraphics
graphicsand
andimages.
images.
Contains
Containsclasses
classesrelated
relatedtotodeveloping
developingbeans
beans----components
componentsbased
basedon
onthe
theJavaBeansTM
JavaBeansTMarchitecture.
architecture.
Provides
for
system
input
and
output
through
data
streams,
serialization
and
the
file
system.
Provides for system input and output through data streams, serialization and the file system.
Provides classes that are fundamental to the design of the Java programming language.
Provides classes that are fundamental to the design of the Java programming language.
Provides
Provides classes
classes for
for performing
performing arbitrary-precision
arbitrary-precision integer
integer arithmetic
arithmetic (BigInteger)
(BigInteger) and
and arbitrary-precision
arbitrary-precision decimal
decimal
arithmetic
arithmetic(BigDecimal).
(BigDecimal).
java.net
Provides
java.net
Providesthe
theclasses
classesfor
forimplementing
implementingnetworking
networkingapplications.
applications.
java.nio
Defines
buffers,
which
are
containers
for
data,
and
provides
java.nio
Defines buffers, which are containers for data, and providesananoverview
overviewofofthe
theother
otherNIO
NIOpackages.
packages.
java.rmi
Provides
java.rmi
Providesthe
theRMI
RMIpackage.
package.
java.security
Provides
java.security
Providesthe
theclasses
classesand
andinterfaces
interfacesfor
forthe
thesecurity
securityframework.
framework.
java.sql
Provides the API for accessing and processing data stored in a data source (usually a relational database) using the
java.sql
Provides the API for accessing and processing data stored in a data source (usually a relational database) using the
JavaTM
JavaTMprogramming
programminglanguage.
language.
java.text
Provides
classes
and
interfaces
java.text
Provides classes and interfacesfor
forhandling
handlingtext,
text,dates,
dates,numbers,
numbers,and
andmessages
messagesinina amanner
mannerindependent
independentofofnatural
natural
languages.
languages.
java.util
Contains
java.util
Containsthe
thecollections
collectionsframework,
framework,legacy
legacycollection
collectionclasses,
classes,event
eventmodel,
model,date
dateand
andtime
timefacilities,
facilities,internationalization,
internationalization,
and
andmiscellaneous
miscellaneousutility
utilityclasses
classes(a(astring
stringtokenizer,
tokenizer,a arandom-number
random-numbergenerator,
generator,and
anda abit
bitarray).
array).
javax.accessibility
javax.accessibility Defines
Defines a a contract
contract between
between user-interface
user-interface components
components and
and anan assistive
assistive technology
technology that
that provides
provides access
access toto those
those
components.
components.
javax.crypto
Provides
javax.crypto
Providesthe
theclasses
classesand
andinterfaces
interfacesfor
forcryptographic
cryptographicoperations.
operations.
javax.imageio
The
main
package
of
the
Java
Image
I/O
API.
javax.imageio
The main package of the Java Image I/O API.
javax.management
javax.managementProvides
Providesthe
thecore
coreclasses
classesfor
forthe
theJava
JavaManagement
ManagementExtensions.
Extensions.
javax.naming
Provides
the
classes
and
interfaces
for
accessing
naming
javax.naming
Provides the classes and interfaces for accessing namingservices.
services.
javax.net
Provides
javax.net
Providesclasses
classesfor
fornetworking
networkingapplications.
applications.
javax.print
Provides
javax.print
Providesthe
theprincipal
principalclasses
classesand
andinterfaces
interfacesfor
forthe
theJavaTM
JavaTMPrint
PrintService
ServiceAPI.
API.
javax.rmi
Contains user APIs for RMI-IIOP.
javax.rmi
Contains user APIs for RMI-IIOP.
javax.security.auth
javax.security.authThis
Thispackage
packageprovides
providesa aframework
frameworkfor
forauthentication
authenticationand
andauthorization.
authorization.
javax.sound.midi
Provides
interfaces
and
classes
for
I/O,
sequencing,
and
synthesis
javax.sound.midi Provides interfaces and classes for I/O, sequencing, and synthesisofofMIDI
MIDI(Musical
(MusicalInstrument
InstrumentDigital
DigitalInterface)
Interface)data.
data.
javax.sql
Provides
javax.sql
Providesthe
theAPI
APIfor
forserver
serverside
sidedata
datasource
sourceaccess
accessand
andprocessing
processingfrom
fromthe
theJavaTM
JavaTMprogramming
programminglanguage.
language.
javax.swing
Provides
javax.swing
Providesa aset
setofof"lightweight"
"lightweight"(all-Java
(all-Javalanguage)
language)components
componentsthat,
that,totothe
themaximum
maximumdegree
degreepossible,
possible,work
workthe
thesame
sameonon
all
platforms.
all platforms.
javax.transaction
javax.transaction Contains
Containsthree
threeexceptions
exceptionsthrown
thrownby
bythe
theORB
ORBmachinery
machineryduring
duringunmarshalling.
unmarshalling.
javax.xml
Defines core XML constants and functionality from the XML specifications.
javax.xml
Defines core XML constants and functionality from the XML specifications.
Environnements de développement
Editeur de texte + lignes de commande
Les éditeurs simples
o JCreator
o Emacs
o JEdit
Les éditeurs avancés
o Eclipse
o NetBeans
o IntelliJ IDEA
o RAD
o JDeveloper
o JBuilder
o BlueJ
http://java.developpez.com/outils/edi/
Applets & dessin
Comment créer des applets
graphiques
Web et Applet
 Lorsque
l’on utilise un navigateur Web, on se connecte à un serveur
Web qui renvoie des pages Web et images au navigateur.
Serveur Web
FichiersHTML,
HTML,
Fichiers
images,etc.
etc.
images,
Internet
Web et Applet
Serveur Web
HTML,
code applet Java
Internet
Le code d’une applet
est stocké sur le serveur Web
Le code de l’applet est chargée
lorsque l’on accède à la page HTML
qui contient (référence) l’applet
Applets
Avantage
des applets :
 Les applets sont exécutées coté client.
 Un même programme peut être exécuté par un
grand nombre d’utilisateurs, sans charger le
serveur.
 La mise à jour du programme est facilité
Inconvénients :
 On doit attendre que le code de l’applet soit
chargé dans le navigateur avant son exécution.
 Le démarrage de la JVM prend du temps, la
première fois
3
Applet: Hello World
/**
/**
@(#)Essai.java
** @(#)Essai.java
**
Sample Applet
Applet application
application
** Sample
**
@author
** @author
@version 1.00
1.00 07/10/17
07/10/17
** @version
*/
*/
<HTML>
<HTML>
<HEAD>
<HEAD>
</HEAD>
</HEAD>
<BODY BGCOLOR="000000">
BGCOLOR="000000">
<BODY
<CENTER>
<CENTER>
<APPLET
<APPLET
import java.awt.*;
java.awt.*;
import
import
java.applet.*;
import java.applet.*;
code == "Essai.class"
"Essai.class"
code
width
"500"
width
== "500"
public class
class Essai
Essai extends
extends Applet
Applet {{
public
height
height
>>
public void
void init()
init() {{
public
}
}
</APPLET>
</APPLET>
</CENTER>
</CENTER>
public void
void paint(Graphics
paint(Graphics g)
g) {{
public
g.drawString("Hello world!",
world!", 50,
50, 60
60 );
);
g.drawString("Hello
}}
}
}
Classes mises en œuvre ?
</BODY>
</BODY>
</HTML>
</HTML>
•
Essai
•
Applet
•
Graphics
"300"
== "300"
classes mises en œuvre
java.lang.Object
java.lang.Object
java.awt.Component
java.awt.Component
java.awt.Container
java.awt.Container
java.awt.Panel
java.awt.Panel
java.applet.Applet
java.lang.Object
java.awt.Graphics
java.applet.Applet
Essai
Anapplet
appletisisaasmall
smallprogram
programthat
thatisisintended
intendednot
notto
to
An
berun
runon
onits
itsown,
own,but
butrather
ratherto
tobe
beembedded
embeddedinside
inside
be
anotherapplication.
application.
another
TheApplet
Appletclass
classmust
mustbe
bethe
thesuperclass
superclassof
ofany
any
The
applet
applet
TheGraphics
Graphicsclass
classisisthe
the
The
abstractbase
baseclass
classfor
forall
all
abstract
graphicscontexts
contextsthat
that
graphics
allowan
anapplication
applicationto
to
allow
drawonto
ontocomponents
components
draw
Les méthodes de Essai héritées de Applet
…
…
voidinit()
init()
void
voidstart()
start()
void
voidstop()
stop()
void
Calledby
bythe
thebrowser
browseror
orapplet
appletviewer
viewerto
toinform
inform
Called
thisapplet
appletthat
thatitithas
hasbeen
beenloaded
loadedinto
intothe
the
this
system.
system.
Calledby
bythe
thebrowser
browseror
orapplet
appletviewer
viewerto
toinform
inform
Called
thisapplet
appletthat
thatititshould
shouldstart
startits
itsexecution.
execution.
this
Calledby
bythe
thebrowser
browseror
orapplet
appletviewer
viewerto
toinform
inform
Called
thisapplet
appletthat
thatititshould
shouldstop
stopits
itsexecution.
execution.
this
…
…
voidpaint(Graphics
paint(Graphicsg)
g)
void
…
…
Paintsthe
thecontainer.
container.
Paints
voidsetFont(Font
setFont(Fontf)f) Sets
Setsthe
thefont
fontof
ofthis
thiscontainer.
container.
void
ColorgetBackground()
getBackground()
Getsthe
thebackground
backgroundcolor
colorof
ofthis
thiscomponent.
component.
Color
Gets
DimensiongetSize()
getSize() Returns
Returnsthe
thesize
sizeof
ofthis
thiscomponent
componentininthe
theform
formof
ofaa
Dimension
Dimensionobject.
object.
Dimension
…
…
Toutesles
lesfonctionnalités
fonctionnalitésde
deApplet
Applet (attributs
(attributset
etvariables)
variables)
Toutes
+
+
Toutescelles
cellesque
queje
jedéfinirai
définiraiou
ouredéfinirai
redéfinirai moi
moimême
même
Toutes
Dessin sur l'interface utilisateur
/**
/**
@(#)Essai.java
** @(#)Essai.java
**
Sample Applet
Applet application
application
** Sample
*
*
@author
** @author
*
@version 1.00
1.00 07/10/17
07/10/17
* @version
*/
*/
import java.awt.*;
java.awt.*;
import
import java.applet.*;
java.applet.*;
import
public class
class Essai
Essai extends
extends Applet
Applet {{
public
public void
void init()
init() {{
public
}}
public void
void paint(Graphics
paint(Graphics g)
g) {{
public
g.drawString("Hello world!", 50, 60 );
g.drawString("Hello world!", 50, 60 );
}}
}}
La classe Graphics
 La
classe Graphics dispose de différentes fonctions de dessin :
 drawRect(x, y, width, height) ou drawRect(Rectangle r), permet de
dessiner un rectangle
Rectangle r = new Rectangle(10, 20, 50 ,70)
g.drawRect(r);

fillRect(x, y, width, height) pour dessiner un rectangle plein

drawOval(x, y, width, height) et fillOval : dessin d’un ovale
(rempli ou non)

drawLine(x1, y1, x2, y2) : dessin d’un segment

drawString(“Salut !”, x, y) : affichage d’une chaîne de caractère
(String)

setColor(couleur): modifie la couleur de tracé
Gestion des couleurs
 La
classe Color permet de choisir la couleur des formes
géométriques affichées par la méthode paint :
 Soit
g un objet de type Graphics :
 g.setColor(Color.red) : dessin en rouge
 g.setBackground(Color.black) : remplissage du fond en noir
 Différentes
couleurs prédéfinies :
 Color.blue, Color.gray, Color.pink, Color.yellow, etc.
 On
peut définir de nouvelles couleurs :
 Color grisClair = new Color(200, 200, 200)
R
 Les
V
B
3 paramètres sont entre 0 (absence de la couleur) et 255. Le
blanc est donc donné par (255, 255, 255) et le noir par (0, 0, 0)
Exécution de l'applet
>ls
Essai.java
>javac Essai.java >ls
Essai.class Essai.java
>java Essai
Exception in thread "main" java.lang.NoSuchMethodError: main
>appletviewer Essai
Exception d'E/S pendant la lecture de /home/grimaldi/workspace/appletProg/src/Essai (No such file or directory)
>gedit page.html
>appletviewer page.html
Autre manière :
>firefox page.html
Classe Essai
hérite de la classe
Applet
La maison dans l’Applet
import java.awt.*;
import java.applet.Applet;
public class Essai extends Applet {
public void paint( Graphics g ) {
int largeurFenetre = getSize().width;
int hauteurFenetre = getSize().height;
int largeur = largeurFenetre/2;
// 100;
int hauteur = hauteurFenetre/2;
// 75;
int xHautGauche = (largeurFenetre - largeur)/2; // 50
int yHautGauche = (hauteurFenetre - hauteur)/2; // 50
int xSommet = xHautGauche+largeur/2;
int ySommet = yHautGauche-hauteur/3;
int plancher = yHautGauche+hauteur;
g.drawRect(xHautGauche,yHautGauche,largeur,hauteur); // mur
g.setColor(Color.red);
g.drawLine(xHautGauche,yHautGauche,xSommet,ySommet); // toit rouge
g.drawLine(xSommet,ySommet,xHautGauche+largeur,yHautGauche);
g.setColor(Color.blue);
Classe String
g.fillRect(xHautGauche+largeur/4,yHautGauche+hauteur/3,
largeur/4,2*hauteur/3);
// porte bleue
g.setColor(Color.green);
g.drawOval(xSommet,yHautGauche+hauteur/3,
largeur/4,largeur/4); // fenetre verte
g.setColor(Color.black);
String mess = "Ma petite maison dans l'Applet";
g.drawString(mess,(largeurFenetre-g.getFontMetrics().stringWidth(mess))/2
,plancher+25);
}
}
Applet ?
 Hiérarchie
de classes couvrant les composants de awt
Classe abstraite
décrit les
caractéristiques
communes à tous les
composants
Object
Classe abstraite
composants pouvant
contenir d’autres
composants
Component
Canvas
Button
List
CheckBox
TextComponent
TextField
Choice
ScrollBar
TextArea
Container
Label
Window
Frame
Panel
Dialog
FileDialog
ScrollPane
Applet
Interface graphiques
Abstract Window Toolkit (AWT)
Classe de base des awt : la classe abstraite Component.
Swing
Classe de base des composants swing : JComponent.
AWT
swing
MenuBar
Label
TextField
Choice
List
Checkbox
Button
SWING
Positionnement des composants
Les instances dérivées de la classe Applet héritent (de la classe Container)
de deux fonctions: setLayout et getLayout
public void setLayout(LayoutManager mgr)
public LayoutManager getLayout()
LayoutManager (gestionnaires de géométrie )
Les composants sont insérés dans l’Applet au moyen de sa méthode add
Component add(Component comp)
Exemple:
Button b = new Button("Test1");
add(b);
LayoutManager
java.awt.BorderLayout
North
java.awt.FlowLayout
West
one
Center
South
four
three
two
East
java.awt.GridLayout
one
five
four
two
three
BoxLayout
five
six
GridBagLayout
CardLayout
Un seul composant par zone !
LayoutManager
Panel pour regrouper
MenuBar
Label
TextField
Choice
List
tfPanel
chPanel
lstPanel
cbPanel
Checkbox
rbPanel
btPanel
Button
Dans une Applet
import java.awt.*;
import java.applet.Applet;
public class Essai extends Applet {
public void init(){
setLayout(new BorderLayout());
Panel p=new Panel();
p.setLayout(new FlowLayout ());
p.add(new Button("Test1"));
p.add(new Button("Test2"));
p.add(new Button("Test3"));
p.add(new Button("Test4"));
add("North",p);
Panel p2=new Panel();
p2.setLayout(new FlowLayout ());
p2.add(new Label("Etiq1"));
p2.add(new Label("Etiq2"));
add("Center",p2);
Panel p3=new Panel();
p3.setLayout(new FlowLayout ());
p3.add(new TextField("Zone1"));
p3.add(new TextField("Zone2"));
p3.add(new TextField("Zone3"));
add("South",p3);
}
}
AWT GUI Form
Dans une application JAVA graphique
import java.awt.*;
class Fpanel {
static public void main (String arg [ ]) {
Frame w = new Frame("Exemple de fenetre ") ;
w.setLayout(new BorderLayout());
Panel p=new Panel();
p.setLayout(new FlowLayout ());
p.add(new Button("Test1"));
p.add(new Button("Test2"));
p.add(new Button("Test3"));
p.add(new Button("Test4"));
w.add("North",p);
Panel p2=new Panel();
p2.setLayout(new FlowLayout ());
p2.add(new Label("Etiq1"));
p2.add(new Label("Etiq2"));
w.add("Center",p2);
Panel p3=new Panel();
p3.setLayout(new FlowLayout ());
p3.add(new TextField("Zone1"));
p3.add(new TextField("Zone2"));
p3.add(new TextField("Zone3"));
w.add("South",p3);
w.show();
w.pack();
}
}
Swing : JApplet
Interface
o
Une interface représente une fonctionnalité particulière
décrite par un ensemble de déclarations de variables et/ou de
méthodes.
o
Lorsqu'une classe implémente une interface (possède cette
fonctionnalité) elle donne une existence réelle à ces variables et
méthodes.
o
Pour déclarer cette interface, on utilise le mot-clé
implements.
Ceci donne :
public class ma_classe implements une_interface {
....
}
o
Le compilateur java n'effectuera correctement son travail que
si les variables et/ou méthodes annoncées dans l'interface
sont bien présentes dans la classe.
Interface MouseListener
L'interface MouseListener permet à une classe de répondre aux
événements souris de base.
Elle est définie dans le package
java.awt.event qu'il faut donc importer. Elle contient les méthodes
suivantes :
public void
void mouseClicked(MouseEvent
mouseClicked(MouseEvent e)
e)
public
public void
void mousePressed(MouseEvent
mousePressed(MouseEvent e)
e)
public
public void
void mouseReleased(MouseEvent
mouseReleased(MouseEvent e)
e)
public
public void
void mouseEntered(MouseEvent
mouseEntered(MouseEvent e)
e)
public
public void
void mouseExited(MouseEvent
mouseExited(MouseEvent e)
e)
public
import java.awt.*;
java.awt.*;
import
import java.awt.event.*;
java.awt.event.*;
import
public class
class drag
drag extends
extends java.applet.Applet
java.applet.Applet
public
implements MouseListener
MouseListener {{
implements
....
....
public void
void init()
init() {{
public
addMouseListener(this);
addMouseListener(this);
}}
....
....
}}
Exemple : MouseListener
import java.applet.*;
java.applet.*;
import
import java.awt.Graphics;
java.awt.Graphics;
import
import java.awt.event.MouseEvent;
java.awt.event.MouseEvent;
import
import java.awt.event.MouseListener;
java.awt.event.MouseListener;
import
public class
class Application
Application extends
extends Applet
Applet implements
implements MouseListener{
MouseListener{
public
int xd[],
xd[], yd[];
yd[];
int
int xf[],
xf[], yf[];
yf[];
int
static final
final int
int nsegments
nsegments == 10;
10;
static
int n,
n, ns;
ns;
int
// debuts
debuts des
des segments
segments
//
// fin
fin des
des segments
segments
//
// nbre
nbre de
de segments
segments max
max
//
// pour
pour compter
compter les
les segments
segments
//
public void
void init()
init() {{
public
// création
création des
des tableaux
tableaux
//
xd == new
new int[nsegments];
int[nsegments];
xd
yd == new
new int[nsegments];
int[nsegments];
yd
xf == new
new int[nsegments];
int[nsegments];
xf
yf == new
new int[nsegments];
int[nsegments];
yf
// premier
premier segment
segment
//
ns == nn == 0;
0;
ns
addMouseListener(this);
addMouseListener(this);
}}
démo
Exemple : MouseListener
public void
void mouseEntered(MouseEvent
mouseEntered(MouseEvent arg0)
arg0) {{ }}
public
public void
void mouseExited(MouseEvent
mouseExited(MouseEvent arg0)
arg0) {{ }}
public
public void
void mousePressed(MouseEvent
mousePressed(MouseEvent arg0)
arg0) {{
public
xd[n] == arg0.getX();
arg0.getX();
xd[n]
yd[n] == arg0.getY();
arg0.getY();
yd[n]
}}
public void
void mouseReleased(MouseEvent
mouseReleased(MouseEvent arg0)
arg0) {{
public
xf[n] == arg0.getX();
arg0.getX();
xf[n]
yf[n] == arg0.getY();
arg0.getY();
yf[n]
(n+1)%nsegments;
// prochain
prochain point
point
nn == (n+1)%nsegments;
//
ns++;
ns++;
if (ns>=nsegments)ns
(ns>=nsegments)ns == nsegments-1;
nsegments-1;
if
repaint();
// forçage
forçage du
du dessin
dessin de
de l'applet
l'applet
repaint();
//
}}
public void
void mouseClicked(MouseEvent
mouseClicked(MouseEvent arg0)
arg0) {{
public
// récupération
récupération du
du click
click droit
droit
//
if (arg0.getButton()==3){
(arg0.getButton()==3){ //
// click
click droit
droit
if
ns == 0;
0;
nn == ns
}}
}}
Exemple : MouseListener
public void
void paint(Graphics
paint(Graphics g){
g){
public
// affichage
affichage de
de tous
tous les
les segments
segments
//
for (int
(int i=0
i=0 ;; i<ns
i<ns ;; i++)
i++)
for
g.drawLine(xd[i], yd[i],
yd[i], xf[i],
xf[i], yf[i]);
yf[i]);
g.drawLine(xd[i],
}}
démo
Interface MouseMotionListener
L'interface MouseMotionListener permet à une classe de répondre
aux événements liés au déplacement de la souris. Elle est définie dans
le package java.awt.event qu'il faut donc importer.
Elle contient les méthodes suivantes :
public void
void mouseDragged(MouseEvent
mouseDragged(MouseEvent e)
e)
public
public void
void mouseMoved(MouseEvent
mouseMoved(MouseEvent e)
e)
public
import java.awt.*;
java.awt.*;
import
import java.awt.event.*;
java.awt.event.*;
import
public class
class drag
drag extends
extends java.applet.Applet
java.applet.Applet
public
implements MouseListener,
MouseListener, MouseMotionListener
MouseMotionListener {{
implements
....
....
public void
void init()
init() {{
public
addMouseListener(this);
addMouseListener(this);
addMouseMotionListener(this);
addMouseMotionListener(this);
}}
....
....
}}
Exemple : MouseMotionListener
import java.applet.Applet;
java.applet.Applet;
import
import java.awt.Graphics;
java.awt.Graphics;
import
import java.awt.event.MouseEvent;
java.awt.event.MouseEvent;
import
import java.awt.event.MouseMotionListener;
java.awt.event.MouseMotionListener;
import
public class
class Application
Application extends
extends Applet
Applet implements
implements MouseMotionListener
MouseMotionListener {{
public
int x,
x, y;
y;
int
int state;
state;
int
public void
void init(){
init(){
public
state == 0;
0;
state
addMouseMotionListener(this);
addMouseMotionListener(this);
}}
public void
void mouseDragged(MouseEvent
mouseDragged(MouseEvent arg0)
arg0) {{
public
state == 2;
2;
state
arg0.getX();
xx == arg0.getX();
arg0.getY();
yy == arg0.getY();
repaint();
repaint();
}}
Exemple : MouseMotionListener
public void
void mouseMoved(MouseEvent
mouseMoved(MouseEvent arg0)
arg0) {{
public
state == 1;
1;
state
arg0.getX();
xx == arg0.getX();
arg0.getY();
yy == arg0.getY();
repaint();
repaint();
}}
public void
void paint
paint (Graphics
(Graphics g){
g){
public
switch (state){
(state){
switch
case 11 :: g.drawOval(x-20,
g.drawOval(x-20, y-20,
y-20, 20,
20, 20);
20); break;
break;
case
case 22 :: g.drawRect(x-20,
g.drawRect(x-20, y-20,
y-20, 40,
40, 40);
40); break;
break;
case
}}
}}
}}
Interface KeyListener
L'interface KeyListener permet à une classe de répondre aux
événements liés au clavier (appui sur une touche, relâchement, ...).
Elle est définie dans le package java.awt.event qu'il faut donc importer.
Elle contient les méthodes suivantes :
public void
void keyTyped(KeyEvent
keyTyped(KeyEvent e)
e)
public
public void
void keyPressed(KeyEvent
keyPressed(KeyEvent e)
e)
public
public void
void keyReleased(KeyEvent
keyReleased(KeyEvent e)
e)
public
import java.awt.*;
import java.awt.event.*;
public class drag extends java.applet.Applet
implements KeyListener {
....
public void init() {
addKeyListener(this);
}
....
}
Interface ActionListener
L'interface ActionListener permet à une classe de répondre à des
actions faites sur des composants qu’elle contient (bouton, menus,
.etc.). Elle est définie dans le package java.awt.event qu'il faut donc
importer.
Elle contient les méthodes suivantes :
public void
void actionPerformed(ActionEvent
actionPerformed(ActionEvent evt)
evt)
public
import java.awt.*;
import java.awt.event.*;
public class drag extends java.applet.Applet
implements ActionListener {
....
public void init() {
addActionListener(this);
}
....
}
un convertisseur dollar/euro
import java.applet.Applet;
import java.awt.event.*;
import java.awt.*;
public class Converter extends Applet implements ActionListener {
static double tauxChangeEuroDollar=1.2782;
TextField dollars;
TextField euros;
public void init(){
dollars = new TextField(10);
euros = new TextField(10);
this.setLayout(new BorderLayout()); // placement nord/sud/est/west
Label l = new Label("Convertisseur dollar US / Euro");
l.setFont(new Font("SansSerif",Font.BOLD,16));
add("North", l);
Panel p = new Panel();
p.setLayout(new FlowLayout());
p.add(new Label("dollars"));
p.add(dollars);
p.add(new Label("euros"));
p.add(euros);
add("Center", p);
Button b = new Button("Convertir");
b.setFont(new Font("SansSerif",Font.BOLD,16));
add("South", b);
b.addActionListener(this);
}
…/
un convertisseur dollar/euro
public void actionPerformed(ActionEvent arg0) {
if (arg0.getActionCommand().equals("Convertir")){// le bon bouton
double valeur = Double.valueOf(dollars.getText());
valeur = valeur/tauxChangeEuroDollar;
euros.setText(String.valueOf(valeur));
}
}
}
un convertisseur dollar/euro
public void actionPerformed(ActionEvent arg0) {
if (arg0.getActionCommand()=="Convertir"){ // le bon bouton
try {
double valeur = Double.valueOf(dollars.getText());
valeur = valeur/tauxChangeEuroDollar;
euros.setText(String.valueOf(valeur));
} catch (NumberFormatException nx) {
euros.setText("impossible");
}
}
}
}
Lire dans un fichier
package javaapplication11;
import java.util.Scanner; import java.util.*;
import java.awt.FileDialog;
import java.awt.Frame;
import java.io.File;
import java.io.FileNotFoundException;
public class JavaApplication11 {
private static Frame fenetre;
public static void main(String[] args) throws FileNotFoundException {
fenetre = new Frame();
fenetre.setTitle("Une application Graphique Swing");
// son titre
fenetre.setSize(300,200);
// sa taille
fenetre.setVisible(true);
// affichage
// récupération du nom du fichier
FileDialog dialog = new FileDialog(fenetre);
dialog.show();
String fileName = dialog.getDirectory()+dialog.getFile();
File fichier = new File(fileName);
if (!fichier.exists())return; Scanner sc = new Scanner(fichier);
do{
String str = sc.nextLine();
System.out.println(str);
}while (sc.hasNextLine());
}
}
Lire un tableau dynamique ArrayList
package exercice2ds;
import java.awt.FileDialog;
import java.io.File;
import java.io.FileNotFoundException;
import java.util.ArrayList;
import java.util.Scanner;
import javax.swing.JFrame;
// la classe boule
class Boule{
private int x;
private int y;
private int r;
public Boule(){
x = y = r = 0;
}
public Boule(int x, int y, int r){
this.x = x;
this.y = y;
private static JFrame fenetre;
this.r = r;
private static ArrayList <Boule> btab;
}
public static void main(String[] args) throws FileNotFoundException {
public String toString(){
fenetre = new JFrame();
fenetre.setTitle("Une application Graphique"); String br = "("+x+","+y+","+r+")";
// son titre
return br;
fenetre.setSize(800, 700);
// sa taille
}
fenetre.setVisible(true);
// affichage
public class Exercice2DS{
// instanciation du tableau
btab = new ArrayList <Boule>(); // récupération du nom du fichier
FileDialog dialog = new FileDialog(fenetre);
dialog.show();
String fileName = dialog.getDirectory()+dialog.getFile();
File fichier = new File(fileName);
if (!fichier.exists())return; Scanner sc = new Scanner(fichier); // lecture du fichier
Lire un tableau dynamique ArrayList
// lecture du fichier
do{
String str = sc.nextLine();
String fargs[] = str.split(";");
Boule b;
try{
b = new Boule(Integer.parseInt(fargs[0]), Integer.parseInt(fargs[1]),
Integer.parseInt(fargs[2])); btab.add(b);
} catch (NumberFormatException nx){
continue;
}
}while (sc.hasNextLine());
sc.close();
// affichage des données
for (int i=0 ; i<btab.size() ; i++)
System.out.println(btab.get(i));
}
}
}
// fin de la classe
Écrire dans un fichier
import javax.swing.*;
import java.awt.Rectangle;
import java.io.*;
public class MonApp {
public static void main (String[] args) throws InterruptedException, SecurityException, IOException{
JFrame fenetre = new JFrame();
fenetre.setTitle("Une application Graphique Swing");
fenetre.setSize(300,200);
JLabel label = new JLabel("Hello World !");
fenetre.getContentPane().add(label);
fenetre.setVisible(true);
Rectangle r = label.getBounds();
File f = new File ("toto.txt");
// un fichier
FileWriter fw = new FileWriter(f); // le writer
String br = new String();
// une chaine
cat toto.txt
// affichage et écriture dans un fichier
8.069956674109191
for (int i=0 ; i<10 ; i++){
42.5408715787659
br = Double.toString(Math.random()*100); // nombre aléatoire
58.641771058538176
fw.write(br+"\n");
// ecriture
40.43774863023394
r.setLocation(r.x, i*20);
75.43518020135525
label.setBounds(r);
82.83453685331713
Thread.sleep(1000);
11.02509797578909
}
29.599967582785467
fw.close();
96.37629301380967
System.exit(0);
27.381178971570343
}
}
Thread : fil d'exécution
import java.applet.Applet;
import java.awt.Color;
import java.awt.Graphics;
public class Application extends Applet implements Runnable {
int x, y;
int dx, dy;
int r;
int width, height;
Thread thread;
boolean stopflag;
public void init(){
width = this.getBounds().width;
height = this.getBounds().height;
x = y = height/2;
r = 20;
dx = dy =1;
thread = new Thread(this);
thread.start();
stopflag = false;
}
public void paint(Graphics g){
g.drawOval(x­r, y­r, 2*r, 2*r);
}
Thread : fil d'exécution
public void run() {
while (!stopflag) {
width = this.getBounds().width;
height = this.getBounds().height;
x+=dx;
y+=dy;
if (x<r || x>width­r )dx = ­dx;
if (y<r || y>height­r)dy = ­dy;
repaint();
try {Thread.sleep(20);}
catch(InterruptedException signal) {}
}
}
}
Sérialisation des objets
La sérialisation est un procédé introduit dans le JDK qui
permet de rendre un objet persistant.
public class Personne implements java.io.Serializable {
private String nom = "";
private String prenom = "";
private int taille = 0;
public Personne(String nom, String prenom, int taille) {
this.nom = nom;
this.prenom = prenom;
this.taille = taille ;
}
public void affiche(){
System.out.println(nom);
System.out.println(prenom);
System.out.println(taille);
}
}
La classe ObjectOuputStream
La classe ObjectOutputStream permet de sérialiser et de
sauver des objets sérialisables ou des types élémentaires:
writeInt(), writeDouble(), writeFloat(), ...
import java.io.*;
public class SerializerPersonne{
public static void main(String argv[]) {
Personne personne = new Personne("Dupond","Jean",175);
try {
FileOutputStream fichier = new FileOutputStream("personne.bin");
ObjectOutputStream oos = new ObjectOutputStream(fichier);
oos.writeObject(personne);
oos.flush();
oos.close();
}
catch (java.io.IOException e) {
e.printStackTrace();
}
}
}
On peut peut stocker plusieurs objets sérialisés dans un même fichier
La classe ObjectInputStream
La classe ObjectOutputStream permet de sérialiser et de
sauver des objets sérialisables ou des types élémentaires:
writeInt(), writeDouble(), writeFloat(), ...
import java.io.*;
public class DeSerializerPersonne {
public static void main(String argv[]) {
try {
FileInputStream fichier = new FileInputStream("personne.ser");
ObjectInputStream ois = new ObjectInputStream(fichier);
Personne personne = (Personne) ois.readObject();
Personne.affiche() ;
}
catch (java.io.IOException e) {
e.printStackTrace();
}
catch (ClassNotFoundException e) {
e.printStackTrace();
}
}
}
On peut peut stocker plusieurs objets sérialisés dans un même fichier
Applications embarquées
sous Android
Documentation officielle
http://developer.android.com/reference/packages.html
Plate-forme de développement
Tegra Android Development Pack - TADP
Environnement de développement complet:
•
Android SDK r18
•
Android APIs
•
Google USB Driver
•
Android NDK r8
•
JDK 6u24
•
Cygwin 1.7
•
Eclipse 3.7.1
•
CDT 8.0.0
•
ADT 18.0.0
•
Apache Ant 1.8.2
•
Python 2.7
https://developer.nvidia.com/tegra-android-development-pack
Java sur plate-forme Android
Java sur plate-forme Android
Structure d'un projet
src : répertoire contenant l’ensemble des sources du projet. Il
contient les classes de type activité (voir ci-dessous) qui gèrent
entre autre le cycle de vie d’une page, mais aussi les classes
permettant de piloter les différentes fonctions de l’application.
gen : répertoire contenant l’ensemble des fichiers générés par
le plugin correspondant à l’environnement de développement.
Aucune modification ne doit être faite dans ces fichiers.
androidManifest.xml : fichier XML décrivant l’application et
ses composants, tels que les activités, les services etc. Lors de
la création d’une activité, une erreur courante pour un premier
projet Android est d’oublier de la déclarer dans le fichier
manifeste. C’est une étape indispensable pour le
fonctionnement de l’application. Le manifeste est en quelque
sorte la carte d’identité de l’application, et permet d’autoriser
l’exécution des activités et autres actions de l’application
(fonctionnement que l’on retrouve dans différents formats
d’application J2EE).
Structure d'un projet
res : répertoire contenant toutes les ressources telles que
les images, les vues de l’interface graphique, etc.
nécessaires à l’application. Ce répertoire est structuré par
défaut de la manière suivante :
res/drawable : contient les ressources de type image
res/layout : contient les descriptions des interfaces
graphiques au format XML (les vues)
res/xml : contient les fichiers XML supplémentaires
(non présents par défaut)
res/menu : contient la description des menus,
composants très courants d’une vue
res/values : contient diverses ressources, tels que les
textes, qui sont empaquetées sans aucun traitement.
Au moment de la compilation du projet, l’application finale est générée au
format APK, dans le répertoire « bin » de l’arborescence. C’est ce fichier
qu’il faut ensuite déployer sur les équipements afin de pouvoir exécuter
l’application.
Composante d'une application
Activities
Une activité est la composante principale pour une application Android. Elle
représente l’implémentation et les interactions de vos interfaces.
Services
Un service, à la différence d’une activité, ne possède pas de vue mais permet
l’exécution d’un algorithme sur un temps indéfini. Il ne s’arrêtera que lorsque
la tâche est finie ou que son exécution est arrêtée.
Il peut être lancé à différents moments :
Au démarrage du téléphone.
Au moment d’un événement (arrivée d’un appel, SMS, mail, etc…).
Lancement de votre application.
Action particulière dans votre application.
Composante d'une application
Broadcast and Intent Receivers
Un Broadcast Receiver comme son nom l’indique permet d’écouter ce qui se passe sur
le système ou sur votre application et déclencher une action que vous aurez prédéfinie.
C’est souvent par ce mécanisme que les services sont lancés.
Content providers
Les « content providers »servent à accéder à des données depuis votre
application. Vous pouvez accéder :
Aux contacts stockés dans le téléphone.
A l’agenda.
Aux photos.
Ainsi que d’autres données depuis votre application grâce aux content
providers.
Cycle de vie d'une application
onCreate :
appelée à la création de votre
activité (Activity). Elle sert à
initialiser votre activité ainsi que
toutes les données nécessaires à
cette dernière.
Quand la méthode onCreate est
appelée, on lui passe un Bundle
en argument.
Ce Bundle contient l’état de
sauvegarde enregistré lors de la
dernière exécution de votre
activité.
Cycle de vie d'une application
onStart :
signifie le début d’exécution de
votre activité (début du passage
au premier plan).
Si votre activité ne peut pas aller
en avant plan quelque soit la
raison, l’activité sera transférée à
OnStop.
Cycle de vie d'une application
onResume :
Cette méthode est appelée après
onStart (au moment où votre
application
repasse
en
foreground).
A la fin de l’appel à la méthode
onResume votre application se
trouve au premier plan et reçoit
les interactions utilisateurs.
Cycle de vie d'une application
onPause :
Si une autre activité passe au
premier plan, la méthode onPause
est appelée, afin que vous
sauvegardiez l’état de l’activité et
les différents traitements effectués
par l’utilisateur.
A ce stade, votre activité n’a plus
accès à l’écran, vous devez arrêter
de faire toute action en rapport
avec
l’interaction
utilisateur
(désabonner les listeners).
Vous pouvez par contre continuer
à exécuter des algorithmes
nécessaires
mais
qui
ne
consomment pas trop de CPU.
Cycle de vie d'une application
onStop :
Appelée quand votre activité n’est
plus du tout visible quelque soit la
raison.
Dans cette méthode vous devez
arrêter tous les traitements et
services exécutés par votre
application..
Cycle de vie d'une application
onDestroy :
Appelée quand votre application
est totalement fermée (Processus
terminé). Toutes les données non
sauvegardées sont perdues
Exemple
Convertisseur kilomètre / mile nautique
Code de l'activitée
public class EssaiActivity extends Activity implements View.OnTouchListener, View.OnClickListener, Runnable {
/** Called when the activity is first created. */
Button b = null;
EditText src = null;
EditText dst = null;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main); b = (Button) findViewById(R.id.button1);
b.setOnTouchListener(this);
b.setOnClickListener(this);
src = (EditText) this.findViewById(R.id.editText1);
dst = (EditText) this.findViewById(R.id.editText2);
}
Code de l'activitée
package essai.grimaldi;
import android.view.View.OnTouchListener;
import android.view.View.OnClickListener;
import android.app.Activity;
import android.os.Bundle;
import android.view.MotionEvent;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
Code de l'activitée
// méthode onTouch public boolean onTouch(View v, MotionEvent event) {
/* Réagir au toucher */
Double nm= new Double(src.getText().toString());
double km=nm.doubleValue()*1.852;
dst.setText(String.valueOf(km));
src.setText(src.getText().toString());
return true;
}
// méthode onClick public void onClick(View v) {
}
// méthode run du Thread public void run(){
} }
Layout : main.xml
<?xml version="1.0" encoding="utf­8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical" >
<TextView
android:id="@+id/textView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="distance parcourue en mille nautique" />
<EditText
android:id="@+id/editText1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:ems="10"
android:inputType="numberDecimal" >
<requestFocus />
</EditText>
Layout : main.xml
<TextView
android:id="@+id/textView2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="équivalent en kilomètres" />
<EditText
android:id="@+id/editText2"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:ems="10"
android:inputType="numberDecimal" />
</LinearLayout>
<Button
android:id="@+id/button1"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="Convertir" />
</LinearLayout>
Layout : main.xml
exécution
Application utilisant
l'accéléromètre
Accéléromètre
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >
<TextView
android:id="@+id/textView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="starting" />
<TextView
android:id="@+id/TextView_azimut"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="0" />
<TextView
android:id="@+id/TextView_pitch"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="0" />
<TextView
android:id="@+id/TextView_roll"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="0" />
<Button
android:id="@+id/button1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Go!" />
</LinearLayout>
Accéléromètre
package grimaldi.univtln.fr;
import
import
import
import
import
import
import
import
import
import
import
import
android.hardware.Sensor;
android.hardware.SensorEvent;
android.hardware.SensorEventListener;
android.hardware.SensorManager;
android.os.Bundle;
android.app.Activity;
android.util.Log;
android.view.Menu;
android.view.MotionEvent;
android.view.View;
android.widget.Button;
android.widget.*;
public class MainActivity extends Activity
implements
View.OnTouchListener, SensorEventListener{
Button but;
SensorManager sensorMgr;
TextView textviewmsg;
boolean accelSupported;
TextView ta;
TextView tp;
TextView tr;
Accéléromètre
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
but = (Button)findViewById(R.id.button1);
but.setOnTouchListener(this);
textviewmsg = ((TextView)findViewById(R.id.textView1));
ta = ((TextView)findViewById(R.id.TextView_azimut));
tp = ((TextView)findViewById(R.id.TextView_pitch));
tr = ((TextView)findViewById(R.id.TextView_roll));
}
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is
// present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
Accéléromètre
public boolean onTouch(View v, MotionEvent event) {
sensorMgr = (SensorManager)getSystemService(SENSOR_SERVICE);
accelSupported =
sensorMgr.registerListener(this,
sensorMgr.getDefaultSensor(Sensor.TYPE_ACCELEROMETER),
SensorManager.SENSOR_DELAY_UI);
if (!accelSupported) {
sensorMgr.unregisterListener(this,
sensorMgr.getDefaultSensor(Sensor.TYPE_ACCELEROMETER));
textviewmsg.setText("Pas d’accelerometre");
}
else textviewmsg.setText("accelerometre trouvé");
return false;
}
Accéléromètre
public void onAccuracyChanged(Sensor sensor, int accuracy) {
switch(accuracy){
case SensorManager.SENSOR_STATUS_ACCURACY_HIGH:
case SensorManager.SENSOR_STATUS_ACCURACY_MEDIUM:
case SensorManager.SENSOR_STATUS_ACCURACY_LOW:
case SensorManager.SENSOR_STATUS_UNRELIABLE:
}
Log.d("Sensor",sensor.getType()+":"+accuracy);
}
public void onSensorChanged(SensorEvent event) {
if (event.sensor.getType()==Sensor.TYPE_ACCELEROMETER){
ta.setText(""+event.values[0]+"°");
tp.setText(""+event.values[1]+"°");
tr.setText(""+event.values[2]+"°");
}
}