faculté i&c, claude petitpierre, andré maurer 1 java

32
1 Faculté I&C, Claude Petitpierre, André Maurer Java

Upload: leonce-poirier

Post on 03-Apr-2015

113 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Faculté I&C, Claude Petitpierre, André Maurer 1 Java

1

Faculté I&C, Claude Petitpierre, André Maurer

Java

Page 2: Faculté I&C, Claude Petitpierre, André Maurer 1 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

Page 3: Faculté I&C, Claude Petitpierre, André Maurer 1 Java

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

Page 4: Faculté I&C, Claude Petitpierre, André Maurer 1 Java

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

Page 5: Faculté I&C, Claude Petitpierre, André Maurer 1 Java

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; }}

Page 6: Faculté I&C, Claude Petitpierre, André Maurer 1 Java

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

Page 7: Faculté I&C, Claude Petitpierre, André Maurer 1 Java

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

Page 8: Faculté I&C, Claude Petitpierre, André Maurer 1 Java

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

Page 9: Faculté I&C, Claude Petitpierre, André Maurer 1 Java

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;}

Page 10: Faculté I&C, Claude Petitpierre, André Maurer 1 Java

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);

Page 11: Faculté I&C, Claude Petitpierre, André Maurer 1 Java

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);

Page 12: Faculté I&C, Claude Petitpierre, André Maurer 1 Java

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);

}

Page 13: Faculté I&C, Claude Petitpierre, André Maurer 1 Java

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);            }

Page 14: Faculté I&C, Claude Petitpierre, André Maurer 1 Java

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 

}    }

Page 15: Faculté I&C, Claude Petitpierre, André Maurer 1 Java

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

Page 16: Faculté I&C, Claude Petitpierre, André Maurer 1 Java

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()

Page 17: Faculté I&C, Claude Petitpierre, André Maurer 1 Java

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

Page 18: Faculté I&C, Claude Petitpierre, André Maurer 1 Java

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)

Page 19: Faculté I&C, Claude Petitpierre, André Maurer 1 Java

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é

Page 20: Faculté I&C, Claude Petitpierre, André Maurer 1 Java

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;

}

Page 21: Faculté I&C, Claude Petitpierre, André Maurer 1 Java

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();

Page 22: Faculté I&C, Claude Petitpierre, André Maurer 1 Java

22

Faculté I&C, Claude Petitpierre, André Maurer

JFrame > JPanel > JPanel

Palette > Choose Bean

Page 23: Faculté I&C, Claude Petitpierre, André Maurer 1 Java

23

Faculté I&C, Claude Petitpierre, André Maurer

Layouts

Page 24: Faculté I&C, Claude Petitpierre, André Maurer 1 Java

24

Faculté I&C, Claude Petitpierre, André Maurer

BorderLayout

NORTH

EASTWEST

SOUTHCENTER

Page 25: Faculté I&C, Claude Petitpierre, André Maurer 1 Java

25

Faculté I&C, Claude Petitpierre, André Maurer

FlowLayout

Page 26: Faculté I&C, Claude Petitpierre, André Maurer 1 Java

26

Faculté I&C, Claude Petitpierre, André Maurer

BoxLayout(Y)

Page 27: Faculté I&C, Claude Petitpierre, André Maurer 1 Java

27

Faculté I&C, Claude Petitpierre, André Maurer

GridLayout

private JPanel getJContentPane() {

if (jContentPane == null) {

GridLayout gridLayout = new GridLayout();

gridLayout.setRows(2);

. . .

Page 28: Faculté I&C, Claude Petitpierre, André Maurer 1 Java

28

Faculté I&C, Claude Petitpierre, André Maurer

GridBagLayout

Sur deux colonnes

Pas élastique

Page 29: Faculté I&C, Claude Petitpierre, André Maurer 1 Java

29

Faculté I&C, Claude Petitpierre, André Maurer

Introduction d'un listener

Bouton droitde la souris

Page 30: Faculté I&C, Claude Petitpierre, André Maurer 1 Java

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:

Page 31: Faculté I&C, Claude Petitpierre, André Maurer 1 Java

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

Page 32: Faculté I&C, Claude Petitpierre, André Maurer 1 Java

32

Faculté I&C, Claude Petitpierre, André Maurer

ComplétionCTRL- espace

Sélectionner

Cliquer