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