Post on 03-Apr-2015
1
Faculté I&C, Claude Petitpierre, André Maurer
Java
2
Faculté I&C, Claude Petitpierre, André Maurer
Classe Java
public class Depart {
public static int x = 0;
public static void main(String[] args) {
System.out.println(args.length);
System.out.println(x);
}
}
Fichier: Depart.java
La classe Depart doit être déposée dans un fichier Depart.javaQuand tous les champs et les méthodes sont statiques, il n'y a pas besoin d'instanciationLe système recherche et appelle une méthode main définie comme ci-dessus
3
Faculté I&C, Claude Petitpierre, André Maurer
Classes Java(package)
package modules;
public class Depart {
public static int x = 0;
public static void main(String[] args) {
System.out.println(args.length);
}
}
Fichier Depart.java dans répertoire modules
La classe ci-dessus contient package, elle doit être déposée dans un répertoire src/modules
4
Faculté I&C, Claude Petitpierre, André Maurer
Répertoires Java
package modules;import actions.Mouvement;import actions.*;public class Depart {
public static int x = 0, y = 0;public static void main(String[] args) {
Mouvement.descend();System.out.println(args.length);
}}
package actions;public class Mouvement {
public static void descend() {System.out.println("descendre");
}}
// répertoiressrc actions Mouvement.java modules Depart.java
indique où se trouve les autres classes
5
Faculté I&C, Claude Petitpierre, André Maurer
Objets et classes
package actions;
import modules.Cercle;
public class Main {
public static void main(String[] args) {
Cercle cercle = new Cercle();
cercle.setX(100);
}
}
// Pas de statique dans la classe instanciée (les statiques sont globales)
// cercle est local à main
package modules;public class Cercle { private int x = 0; public int getX() { return x; } public void setX(int x) { this.x = x; }}
6
Faculté I&C, Claude Petitpierre, André Maurer
Entrer dans le monde d'objets(plus de statiques)
package actions;
public class Programme {
int x = 12;
void run() {
// code du programme
System.out.println(x);
. . .
}
}
package actions;
import modules.Cercle;
public class Main {
public static void main(String[] args) {
new Programme().run();
}
}Plus de statiques
Statique Objets
7
Faculté I&C, Claude Petitpierre, André Maurer
Héritage (extends, implements)
public class GraphicPanel extends JPanel {
public int color = 255 * 256 * 256;
public int x = 0;
public int y = 0;
public void paint(Graphics g) {
g2.clearRect(0, 0, getWidth(), getHeight());
g2.setColor(new Color(color));
g2.fillArc(x, y, 40, 40, 45, 315);
}
}
GraphicPanel obtient toutes les propriétés ou attributs et méthodes de JPanel
GraphicPanel est un JPanel
paint remplace la méthode paint définie dans JPanel
8
Faculté I&C, Claude Petitpierre, André Maurer
Interfacepackage actions;
public interface Face {
int get(); // doit être implémentée dans la classe qui hérite
}
package actions;
import java.util.ArrayList;
public class MyFace implements Face{
public int get() {
// TODO Auto-generated method stub
return 0;
}
} // une interface donne une vue homogène des objets qui l'implémentent
9
Faculté I&C, Claude Petitpierre, André Maurer
Instructions (Java – Javascript)String [ ] a = new String[10];
for (int i=0; i<a.length; i++) { }
if (a[0].equals("xxx")) { a[0] = "yyy";} else { a[0] = "zzz";}
int i = 0;while(true) { i += 1; if (i<10) { continue; } break;}
switch (i) {case 1: i = 10; break;}
var a = new Array(10);
for (var i=0; i<a.length; i++) { }
if (a[0] == ("xxx")) { a[0] = "yyy";} else { a[0] = "zzz";}
var i = 0;while(true) { i += 1; if (i<10) { continue; } break;}
switch (i) { case 1: // peut contenir des strings i = 10; break;}
10
Faculté I&C, Claude Petitpierre, André Maurer
String (Java – Javascript)
var s = "abcd"
s.charAt(1)
s.indexOf("bc")
s.substring(2, s.length)
s.lastIndexOf("b")
var s1 = s.replace("b", "X")
alert(s1)
String s = "abcd";
s.charAt(1);
s.indexOf("bc");
s.substring(2, s.length());
s.lastIndexOf("b");
String s1 = s.replace("b", "X");
System.out.println(s1);
11
Faculté I&C, Claude Petitpierre, André Maurer
Tableaux (Java – Javascript)var a = new Array(10);
var arr = []
arr[0] = "Hans"
var x = arr[0]
var n = arr.length
arr.push("Max")
x = arr.pop();
arr.unshift("Moritz")
var s2 = arr.shift()
alert(arr.join())
String a[] = new String[10]; // longueur fixe
ArrayList<String> arr = new ArrayList<String>();
arr.set(0,"Hans");
String x = arr.get(0);
int n = arr.size();
arr.add("Max");
x = arr.remove(arr.size()-1);
arr.add(0,"Moritz");
String s2 = arr.remove(0);
System.out.println(arr);
12
Faculté I&C, Claude Petitpierre, André Maurer
Tableaux associatifs (J – JS)var hm = [ ]
hm["manager"] = "Hans"
hm["manager"]
var hs = { } // sans méthodes
hs["manager"] = true
hs["manager"] = true
hs["employe"] = true
for (var i in hs) {
alert(i)
}
HashMap<String,String> hm =
new HashMap<String,String>();
hm.put("manager", "Hans");
hm.get("manager");
HashSet<String> hs =
new HashSet<String>(); // ensemble: sans doublons
hs.add("manager");
hs.add("manager");
hs.add("employe");
for (String i: hs) {
System.out.println(i);
}
13
Faculté I&C, Claude Petitpierre, André Maurer
Tris
public class Tri {
public static void main(String[] args) {
ArrayList<String> liste = new ArrayList<String>();
liste.add("Moritz");
liste.add("Graetel");
Collections.sort(liste);
System.out.println(liste);
}
}
function execute() { var liste = [ ] liste.push("Moritz") liste.push("Graetel") liste.sort() alert(liste); }
14
Faculté I&C, Claude Petitpierre, André Maurer
Objets et classes (J – JS)
public class Main {
public static void main (String[] args) {
}
}
public class Cercle {
public Cercle() { . . . } // constructeur
public int getX() {
return x;
}
}
// fonction globale
function main (args) {
}
function Cercle () {
this.getX = function () {
return x
} }
15
Faculté I&C, Claude Petitpierre, André Maurer
Architecture des fenêtres graphiques
JFrame
JPanel + layout
Les éléments graphiques sont
inscrits directement dans le panel
JPanel + layout
JButton
JButton
JButton
Généré au moyen de Visual Editor
16
Faculté I&C, Claude Petitpierre, André Maurer
Affichage d'éléments graphiques
JPanel
paint() { sait appeler les enfants des éléments graphiques (boutons, fields …) qui contiennent à leur tour des paint()
les feuilles dessinent les composants}
paint est appelée automatiquement quand la fenêtre doit être rafraîchie, c'est-à-dire: lorsqu'elle est crée lorsqu'elle revient au-dessus des autres fenêtres lorsqu'elle a été modifiée lorsqu'on le demande en appelant jPanel.repaint()
17
Faculté I&C, Claude Petitpierre, André Maurer
Création d'un champ de texte avec listener(généré par Visual Editor)
private JTextField getJTextField() {
if (jTextField == null) {
jTextField = new JTextField();
jTextField.addActionListener(
new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent e) {
System.out.println( jTextField.getText() );
}
}
); lecture du champ
}
return jTextField;
} // actionPerformed est appelée quand on tape CR dans le champ de texte
18
Faculté I&C, Claude Petitpierre, André Maurer
Création de graphiquespublic class GraphicPanel extends JPanel {
public int color = 255 * 256 * 256;
public int x = 0;
public int y = 0;
public void setXY(int x, int y) { // méthodes de travail this.x = x; this.y = y; repaint(); }
public void paint(Graphics g) { // remplace la méthode originale
g2.clearRect(0, 0, getWidth(), getHeight()); // == this.getHeight
g2.setColor(new Color(color));
g2.fillArc(x, y, 40, 40, 45, 315);
}
} // peut être introduit à la place d'un JPanel (c'est aussi un JPanel)
19
Faculté I&C, Claude Petitpierre, André Maurer
Introduction du JPanel graphique et d'un listenerprivate GraphicPanel getGraphicPanel() {
if (graphicPanel == null) {
graphicPanel = new GraphicPanel();
graphicPanel.setLayout(new GridBagLayout());
graphicPanel.addMouseMotionListener(
new java.awt.event.MouseMotionAdapter() {
public void mouseMoved(java.awt.event.MouseEvent e) {
graphicObjet.getGraphicPanel().setXY(e.getX(), e.getY());
}
}
);
}
return (GraphicPanel) graphicPanel;
} // généré automatiquement par Visual Editor (plugin Eclipse)
modifié après génération
Ajouté
20
Faculté I&C, Claude Petitpierre, André Maurer
Listenerdu bouton
private JButton vert = null;
private JButton getVert() {
if (vert == null) {
vert = new JButton();
vert.setText("Vert");
vert.addActionListener(
new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent e) {
GraphicPanel gp = ((GraphicPanel)thisClass.getGraphicPanel());
gp.color = 255<<8;
gp.repaint();
}
} // code exécuté dans le listener
);
} // appelle le paint de GraphicPanel (l'arbre s'il y en a un)
return vert;
}
21
Faculté I&C, Claude Petitpierre, André Maurer
Interval timer (listener)
new Timer( // créé dans le programme principal
100,
new AbstractAction() {
public void actionPerformed(ActionEvent e) {
thisClass.getGraphicPanel().computePosition();
}
}
).start();
22
Faculté I&C, Claude Petitpierre, André Maurer
JFrame > JPanel > JPanel
Palette > Choose Bean
23
Faculté I&C, Claude Petitpierre, André Maurer
Layouts
24
Faculté I&C, Claude Petitpierre, André Maurer
BorderLayout
NORTH
EASTWEST
SOUTHCENTER
25
Faculté I&C, Claude Petitpierre, André Maurer
FlowLayout
26
Faculté I&C, Claude Petitpierre, André Maurer
BoxLayout(Y)
27
Faculté I&C, Claude Petitpierre, André Maurer
GridLayout
private JPanel getJContentPane() {
if (jContentPane == null) {
GridLayout gridLayout = new GridLayout();
gridLayout.setRows(2);
. . .
28
Faculté I&C, Claude Petitpierre, André Maurer
GridBagLayout
Sur deux colonnes
Pas élastique
29
Faculté I&C, Claude Petitpierre, André Maurer
Introduction d'un listener
Bouton droitde la souris
30
Faculté I&C, Claude Petitpierre, André Maurer
Timer et mouvement
public MultiPanel() {
super(); // généré automatiquement dans la JFrame
initialize();
new Timer(100, new ActionListener(){ // copier-coller ce timer
public void actionPerformed(ActionEvent e) {
getGraphic().x1 += 5; // mise à jour des coordonnées
getGraphic().y1 += 5;
getGraphic().repaint(); // demander de repeindre le panel
}
}).start(); // démarrage du timer
}
Dans la classe de la JFrame:
31
Faculté I&C, Claude Petitpierre, André Maurer
Graphic panel
public int x=50,y=50,x1=10,y1=10;
public int color = 100*256*256 + 100*256 + 100; // rgb: red green blue
public void paint(Graphics g) {
Graphics2D g2 = (Graphics2D) g; // transformation normal 2D
g2.clearRect(0, 0, getWidth(), getHeight());
g2.setColor(new Color(color));
g2.fillArc(x, y, 40, 40, 45, 315);
g2.setColor(new Color(0));
g2.fillArc(x1, y1, 40, 40, 0, 360);
}
Création d'un JPanel + adjonction de ces instructionsAjouter ce JPanel au JFrame au moyen de Palette > Choose Bean
Graphics
Graphics2D
32
Faculté I&C, Claude Petitpierre, André Maurer
ComplétionCTRL- espace
Sélectionner
Cliquer