diff --git a/README.md b/README.md index de9149a426105e4ff1559956523d82a14f224a4d..c999e0a8bce7a4b538448698b2f42cc6e8b33772 100644 --- a/README.md +++ b/README.md @@ -33,6 +33,7 @@ Ce TimerThread permettra de déclencher la mise à jour des horloges qui affiche ```java public class TimerThread extends Thread { + @Override public void run(){ while (true) { try { @@ -46,18 +47,15 @@ public class TimerThread extends Thread { } ``` -Le thread s’utilise de cette façon : `new TimerThread().start();` et boucle sans fin -en faisant une action (que vous devez définir) chaque seconde. +Le thread s’utilise de cette façon : `new TimerThread().start();` (ce qui provoque l'appel à la méthode `void run()`) et boucle sans fin +en faisant une action (que **vous** devez définir) chaque seconde. -Faites deux chronomètres, qui se mettent à jour toutes les secondes. +On souhaite instancier deux chronomètres, qui se mettent à jour toutes les secondes. Ces deux chronomètres utiliseront le même Timer mais auront des temps écoulés différents (par simplicité, vous pouvez juste les initialiser à des valeurs différentes. -Commencez avec deux chronomètres console qui affiche simplement leur nom et le nombre de secondes écoulé en boucle.  -Note: Des tests sont fournis dans le projet pour que vous vous assuriez que vos classes fonctionnent comme attendu. -Respectez les noms des packages, classes et méthodes **Q1.2** Pour l’implémentation de Timer, on s’aperçoit d’un problème d’héritage. Quelles sont les deux classes dont ce Timer devrait hériter ? @@ -72,9 +70,26 @@ public class Timer public void stopRunning() ... ``` +Note: Des tests sont fournis dans le projet pour que vous vous assuriez que vos classes fonctionnent comme attendu. +Respectez les noms des packages, classes et méthodes + +**Q1.4** +Lors des épreuves de course sportive, il n'est pas rare d'afficher en parallèle le chronomètre de l'étape et celui du temps total. +Dans cette idée, écrivez un main avec deux chronomètres console qui affichent simplement leur nom et le nombre de secondes écoulées en boucle, l'un démarrant à zéro, l'autre à une valeur saisie au départ. +On doit par exemple pouvoir dérouler le scénario suivant : + +``` +Temps chrono total (en secondes) : *3247* +etape : 1 +total : 3248 +etape : 2 +total : 3249 +... +``` **Optionnel** Implémentez un chronomètre en JavaFX qui affiche le nombre de secondes écoulées. -Dans ce cas, notez que l'affichage JavaFX se fait dans un *thread* spécifique. +Une classe MainExample est là au besoin pour vous servir de base et commencer par vérifier la bonne configuration de JavaFX. +Notez que l'affichage JavaFX se fait dans un *thread* spécifique. Pour que votre chronomètre JavaFX fonctionne, toute modification de l'affichage déclencée par un autre *thread* (ici le Timer) doit être fait par l'intermédiaire d'un appel à `javafx.application.Platform.runLater`, Par exemple par une lambda telle que ceci : @@ -93,8 +108,8 @@ La monodirectionnelle propage les changement d’une propriété (« source » Ce sont des mécanismes pratiques mais qui obligent à importer JavaFX ce qui n’est pas toujours souhaitable dans un projet. Vous devez réimplémenter ces mécanismes des propriétés. -**Q2.1** Créez la classe ObservableProperty qui soit observable. -Outre le fait qu'elle soit observable (attache, detach), cette classe doit avoir une propriété à laquelle on peut accéder : +**Q2.1** Rendez la classe ObservableProperty observable. +Outre le fait qu'elle soit observable (attach, detach), cette classe doit avoir une propriété à laquelle on peut accéder : ```java package fr.univlille.iut.r304.tp4.q2; @@ -120,3 +135,5 @@ public class ConnectableProperty extends ObservableProperty public void unconnectFrom(ConnectableProperty other) ... ``` + +**QBonus** : Dans la partie 1 du sujet, ajouter un bouton permettant d'arrêter et redémarrer un chronomètre en particulier à tout moment. diff --git a/src/main/java/fr/univlille/iut/r304/tp4/q1/Timer.java b/src/main/java/fr/univlille/iut/r304/tp4/q1/Timer.java index fa4b709458728325c4d08a467cd9f9ac14b3fc75..8e94ac11444ee251a576f3e7fc909b902a4c271b 100644 --- a/src/main/java/fr/univlille/iut/r304/tp4/q1/Timer.java +++ b/src/main/java/fr/univlille/iut/r304/tp4/q1/Timer.java @@ -11,10 +11,12 @@ public class Timer { public void attach(Observer observer) { // methode cree pour que les tests compilent sans erreur + // n'est pas censée rester une fois que vous avez fini Q1.3 } public void detach(Observer observer) { // methode cree pour que les tests compilent sans erreur + // n'est pas censée rester une fois que vous avez fini Q1.3 } } diff --git a/src/main/java/fr/univlille/iut/r304/tp4/q2/ObservableProperty.java b/src/main/java/fr/univlille/iut/r304/tp4/q2/ObservableProperty.java index cd462a276ce8385845bd14db0db89809dc540cad..5a6cce8dc9b07057f556a603d71a01756f4babe5 100644 --- a/src/main/java/fr/univlille/iut/r304/tp4/q2/ObservableProperty.java +++ b/src/main/java/fr/univlille/iut/r304/tp4/q2/ObservableProperty.java @@ -13,10 +13,12 @@ public class ObservableProperty { public void attach(Observer observer) { // methode cree pour que les tests compilent sans erreur + // n'est pas censée rester une fois que vous avez fini Q2.1 } public void detach(Observer observer) { // methode cree pour que les tests compilent sans erreur + // n'est pas censée rester une fois que vous avez fini Q2.1 } }