B2 · Episode 9 · 4:45

JavaFX GUIs and the MVC Architecture

This episode explains the Model-View-Controller (MVC) architecture in Java, demonstrating how the same controller and model can support both a JavaFX graphical interface and a console-based interface. It also shows how swapping the model—e.g., from a sum counter to an average calculator—changes behavior without altering views or interfaces.

Source:Nicolas Hurtubise / classe.iro.umontreal.ca · License:CC BY-SA 4.0

Transcript

  1. Donc ça, c'est un peu l'overview de notre programme découpé en modèle- vue-

    So, this is an overview of our program, structured using the model-view-

  2. contrôleur. On a vraiment une classe qui sert à 100% à

    controller pattern. We have a class whose sole purpose is to

  3. définir qu'est- ce qui peut se passer.

    define what actions are possible.

  4. On a notre contrôleur ici qui va faire le pont entre la vue et le modèle,

    Our controller here bridges the view and the model,

  5. qui va être capable de dire au modèle il

    and can tell the model:

  6. faut rajouter un nombre, qui va être capable de dire à la vue il faut afficher telle

    ‘You need to add a number’; and can tell the view:

  7. affaire. Puis notre modèle est indépendant de tout ça,

    ‘You need to display this information.’ Our model is entirely independent of all this,

  8. notre modèle a vraiment pas besoin d'interface graphique pour exister.

    and doesn’t require any graphical interface to function.

  9. Donc ça c'est notre petit programme.

    So, this is our small program.

  10. Mettons qu'on voulait plutôt une interface en ligne de commande.

    Suppose instead we wanted a command-line interface.

  11. Bien, on pourrait le faire assez facilement.

    Well, we could do that quite easily.

  12. Dans le fond, notre contrôleur a juste besoin d'une

    Essentially, our controller just needs a view class

  13. classe vue qui répond à une commande qui update output.

    that implements an ‘updateOutput’ method.

  14. Dans le fond, quand on a une modification à faire au niveau du modèle,

    Essentially, whenever there’s a change in the model,

  15. il faut aller mettre à jour la vue.

    we must update the view accordingly.

  16. Fait que ici ce que j'ai fait,

    So, what I did here was

  17. c'est que je suis allé créer une interface vue. simplement pour définir que quelque

    create a view interface—simply to declare that

  18. chose qui est une vue

    anything considered a ‘view’

  19. doit posséder la fonction update output.

    must implement the ‘updateOutput’ function.

  20. Donc n'importe quelle vue doit posséder la fonction update output

    Thus, any view must have an ‘updateOutput’ function,

  21. à partir d'un texte à afficher.

    which takes a text string to display as its parameter.

  22. ma vue graphique c'est quelque chose qui possède cette fonction là donc c'est

    My graphical view implements this function, so it’s

  23. quelque chose qui est externe à l'application puisque c'est du JavaFX mais qui

    external to the application (built with JavaFX), yet

  24. implémente aussi mon interface pour définir ce que c'est qu'une vue

    also implements my ‘view’ interface.

  25. Quand on appelle cette fonction- là, ça vient modifier ma

    When this function is called,

  26. composante qui sert à afficher mon

    it updates the component used to display the output,

  27. texte qui sert à afficher l'output.

    namely, the component responsible for showing the output text.

  28. mettons qu'on veut une vue en console à la place mettons qu'on veut une vue en

    Suppose we want a console view instead—suppose we want a console view

  29. console à la place on

    to replace it.

  30. pourrait en écrire une dans le fond notre vue en console ça serait une classe

    We could write one ourselves: our console view would be a class,

  31. similaire à notre vue graphique

    similar in structure to our graphical view.

  32. Mais plutôt que de définir des

    But instead of defining graphical components,

  33. composantes graphiques, tout ce que ça va faire,

    its sole function would be to

  34. c'est aller créer une instance du contrôleur,

    create an instance of the controller,

  35. attendre des événements sur la ligne de commande,

    then wait for events from the command line,

  36. donc en lisant ça avec un scanner par exemple.

    for example, by reading input with a scanner.

  37. Update output, ce qu'on pourrait décider de faire,

    Update the output—here's what we could decide to do:

  38. c'est aller simplement vider la console en mettant plein de sauts de ligne,

    simply clear the console by inserting many line breaks,

  39. donc juste pour s'assurer qu'il n'y a rien d'affiché avant,

    so that the screen is completely blank before anything appears.

  40. puis après ça on va aller afficher de façon jolie une petite boîte qui va contenir

    Then, we’ll display a neat box containing

  41. notre nombre. Donc je fais une démonstration.

    our number. Let me demonstrate.

  42. Si j'exécute ça en console.

    If I run this in the console.

  43. Je vais avoir ça ici.

    I’ll get this here.

  44. Donc on attend des événements sur la console.

    So we're waiting for new releases on the console.

  45. Quand je tape quelque

    When I type something,

  46. chose, ça me le rajoute à mon compteur.

    it adds it to my counter.

  47. Puis à chaque fois qu'il se passe quelque chose, il faut, le contrôleur

    Then each time something happens, the controller must

  48. est le même que tout à l'heure, le modèle est le même que tout à l'heure.

    be the same as just now—the model is also the same as just now.

  49. Quand il y a un événement au niveau de la vue, au niveau de ce qui est rentré,

    When an event occurs at the view level—that is, at the level of what is input—

  50. ça avertit le contrôleur.

    it notifies the controller.

  51. De la même façon que tantôt, puis

    Just as just now,

  52. le contrôleur n'a pas bougé, le contrôleur fait la même chose.

    the inspector hasn’t moved, and does the same thing.

  53. Quand on ajoute un texte, il faut

    When adding text, you must

  54. modifier le modèle et demander à la vue de modifier son output.

    modify the model and instruct the view to update its output.

  55. Ok, fait, ça c'est pour faire une vue différente pour le même programme.

    OK, done—that’s for creating a different view for the same program.

  56. On pourrait bien entendu modifier le contrôleur pour ces deux vues-

    We could, of course, modify the controller for these two views—

  57. là. Présentement notre vue va simplement.

    Right now, our view simply

  58. aller afficher dans le fond un

    displays in the background a

  59. compteur qui incrémente du nombre qu'on lui demande.

    counter that increments by the number requested.

  60. Dans le fond, lui demande rajoute moi tel nombre,

    Essentially, it tells it: ‘Add this number,’

  61. rajoute moi tel nombre, rajoute moi tel nombre.

    ‘add this number,’ ‘add this number.’

  62. On pourrait décider de se faire un compteur différent qui va plutôt

    We could decide to create a different counter that will

  63. garder la même interface, donc un autre modèle qui va être similaire au compteur

    keep the same interface—so another model

  64. qu'on avait avant.

    similar to the earlier counter.

  65. Donc on se dit que plutôt que d'avoir un compteur qui rajoute ces nombres,

    So instead of having a counter that keeps adding numbers,

  66. rajoute ces nombres, rajoute ces nombres, on va

    ‘add this number,’ ‘add this number,’ we’ll

  67. faire un compteur qui affiche la moyenne.

    create a counter that displays the average.

  68. Donc encore une fois, c'est un modèle qui est très très simple,

    Again, this is a very, very simple model,

  69. mais c'est simplement pour illustrer.

    but it’s just for illustration.

  70. mettons que je veux que mon programme qui permet de rajouter des nombres affiche la

    Suppose I want my program—which adds numbers—

  71. moyenne des nombres ajoutés plutôt que le total, bien je

    to display the average of the added numbers instead of the total; then I

  72. pourrais aller changer ma classe ici.

    could go change my class here.

  73. Puis dire que maintenant mon modèle, c'est un compteur moyenne,

    Then declare: ‘Now my model is an average counter,’

  74. c'est un compteur de ce type- là.

    a counter of this type.

  75. Si je viens lancer mon programme graphique avec ça, j'ai

    If I run my graphical program with this setup,

  76. pas touché à mes vues, j'ai pas touché à mes définitions d'interface,

    I haven’t touched any views or interface definitions,

  77. puis la logique de l'application a été modifiée.

    yet the application’s logic has been changed.

  78. Maintenant si je dis que je veux ajouter 10, 20 puis 30,

    Now, if I say I want to add 10, 20, and then 30,

  79. ce qui est affiché ici c'est la moyenne de ces trois valeurs- là.

    what appears here is the average of these three values.