restricted:mco-2:correction:tp3

Correction TP3

package com.mco;
 
import javafx.application.Application;
import javafx.scene.Group;
import javafx.scene.Scene;
import javafx.scene.paint.Color;
import javafx.scene.text.*;
import javafx.stage.Stage;
 
public class Main extends Application {
    public static void main(String[] args) {
        System.out.println("Polices disponibles :");
        for (String fontName: Font.getFamilies()) {
            System.out.println(fontName);
        }
 
        launch(args);
    }
 
 
    public void start(Stage theStage) {
        theStage.setTitle("Hello, World!");
 
        //mise en place du Stage : création du scene graph et du noeud racine.
        Group root = new Group(); //ce ne sera pas une feuille, donc de classe Group.
        Scene theScene = new Scene(root); //création du scene graph
        theStage.setScene(theScene); //on le place dans le stage
 
        //Création d'un text
        Text text = new Text();
 
        Font comic = new Font("Comic sans MS", 50); //une nouvelle police de taille 50
        text.setFont(comic);
        text.setFill(Color.color(.5,0,1.0,1.0));
 
        text.setText("Hello World aussi !");
        text.setX(0);
        text.setY(200);
 
        //on l'ajoute à notre scene graph via son père, ici le noeud root
        root.getChildren().add(text);
 
        theStage.show();
 
    }
}
gc.setFill(Color.rgb(200, 0, 0, .5));
gc.fillOval(100, 200, 150, 150);
 
gc.setFill(Color.rgb(0, 200, 0, .5));
gc.fillOval(100, 100, 150, 150);
 
gc.setFill(Color.rgb(0, 0, 200, .5));
gc.fillOval(200, 100, 150, 150);
 
gc.setFill(Color.rgb(200, 0, 200, .5));
gc.fillOval(200, 200, 150, 150);
Main.java
package com.mco;
 
import javafx.application.Application;
import javafx.scene.Group;
import javafx.scene.Scene;
import javafx.scene.text.Text;
import javafx.stage.Stage;
 
public class Main extends Application {
 
    public static void main(String[] args) {
        launch(args);
    }
 
    @Override
    public void start(Stage primaryStage) {
        primaryStage.setTitle("Le temps");
 
        Group root = new Group();
        Scene theScene = new Scene(root, 100, 200); //taille initiale.
        primaryStage.setScene(theScene);
 
        Text text = new Text();
        root.getChildren().add(text);
        text.setX(0);
        text.setY(100);
 
        Loop loop = new Loop(text);
 
        loop.start();
        primaryStage.show();
    }
}
Loop.java
package com.mco;
 
import javafx.animation.AnimationTimer;
import javafx.scene.text.Text;
 
public class Loop extends AnimationTimer {
 
    private Text text;
 
    private long previousTime;
 
    public Loop(Text text) {
        this.text = text;
        this.previousTime = System.nanoTime(); //évite les effet de bord à l'initialisation de l'application
    }
 
    @Override
    public void handle(long now) {
        long delta = now - previousTime;
        previousTime = now;
 
        text.setText(String.valueOf(delta));
    }
 
}
package com.mco;
 
import javafx.animation.AnimationTimer;
import javafx.scene.canvas.Canvas;
import javafx.scene.canvas.GraphicsContext;
import javafx.scene.paint.Color;
 
 
public class Loop extends AnimationTimer {
    private Canvas canvas;
 
    final double ROTATION  = (2 * Math.PI) * 1E-9; // une rotation par seconde
    final Color BACKGROUND_COLOR = Color.ALICEBLUE;
 
    final Color WATCH_HAND_COLOR  = Color.BISQUE;
    final int WATCH_HAND_LINE_WIDTH = 10;
    final double WATCH_HAND_LENGTH = 200;
 
    private double angleBig;
    private double angleSmall;
    private long currentTime;
 
    public Loop(Canvas canvas) {
        currentTime = System.nanoTime();
        this.canvas = canvas;
    }
 
    @Override
    public void handle(long now) {
        handleTime(now);
        drawStuff();
    }
 
    private void handleTime(long now) {
        changeAngle(now - currentTime);
        currentTime = now;
    }
 
    private void changeAngle(long delta) {
        angleBig += ROTATION * delta;
        angleBig %= 2 * Math.PI;
 
        angleSmall += (ROTATION / 12) * delta;
        angleSmall %= 2 * Math.PI;
    }
 
    private void drawStuff() {
        clearCanvas();
        drawWatchHand();
    }
 
    private void clearCanvas() {
        GraphicsContext gc = canvas.getGraphicsContext2D();
 
        gc.setFill(BACKGROUND_COLOR);
        gc.fillRect(0, 0, canvas.getWidth(), canvas.getHeight());
    }
 
    private void drawWatchHand() {
        GraphicsContext gc = canvas.getGraphicsContext2D();
 
        double middleX = canvas.getWidth() / 2;
        double middleY = canvas.getHeight() / 2;
 
        gc.beginPath();
        gc.setLineWidth(WATCH_HAND_LINE_WIDTH);
        gc.setStroke(WATCH_HAND_COLOR);
 
        gc.moveTo(middleX, middleY);
        gc.lineTo(middleX + WATCH_HAND_LENGTH * Math.cos(angleBig),
                  middleY + WATCH_HAND_LENGTH * Math.sin(angleBig));
 
        gc.moveTo(middleX, middleY);
        gc.lineTo(middleX + (WATCH_HAND_LENGTH / 4) * Math.cos(angleSmall),
                middleY + (WATCH_HAND_LENGTH / 4) * Math.sin(angleSmall));
 
        gc.stroke();
    }
}
  • restricted/mco-2/correction/tp3.txt
  • Dernière modification : 2016/03/05 17:46
  • de fbrucker