Documentation technique

Controllers

Avant de rentrer dans le vif du sujet parlons un peu des controllers FXML JavaFX. Qu’est ce qu’un controller FXML ?

Un controller FXML sert à initialiser des composants UI et à les manipuler pour réaliser des actions ou des choses qu’on ne peut pas faire avec un fichier FXML.

Un controller FXML n’est toutefois pas obligatoire.

Avertissement

Les controllers FXML des éléments du système doivent obligatoirement être déclarés et ne necéssistent pas d’être déclarés dans leur fichier FXML respectif car c’est déjà fait par le système.

Passons maintenant en revue les notions de base qu’il faut absolument savoir avant d’atteindre le vif du sujet.

Initialisation

Si vous avez besoin d’initialiser quoi que ce soit, que vous souhaitez manipuler un élément UI déclaré dans un attribut ou que vous voulez réaliser une opération quelconque, vous pouvez le faire depuis cette méthode:

@Override
public void initialize(URL location, ResourceBundle resources) {
    myLabel.setText("Je suis le roi de la jungle !");
}

Annotation @FXML

Pour récupérer dans votre controller FXML un élément UI déclaré dans un fichier FXML, il faut le faire de la manière suivante précédé par l’annotation FXML et le nom de l’attribut doit correspondre à l’identifiant FXML de l’élément à récupérer comme suit :

Dans votre controller vous faites comme ça:

@FXML
private Pane pane;

Et dans votre fichier FXML comme cela:

<Pane fx:id="pane" />

Vous pouvez ensuite utiliser l’attribut pour en faire ce que vous voulez.

Passons désormais au vif du sujet, à savoir ce qu’il faut définir à la fois dans les controllers FXML du système et dans les controllers FXML obligatoires pour que votre thème fonctionne comme sur des roulettes.

ApplicationController

Note

Petit rappel: Si vous vous souvenez bien, Application est l’élément parent du système.

Création du controller

Le contenu de votre ApplicationController doit ressembler à ceci:

public class ApplicationController implements Initializable {
    // Attributs récupérés par le système
    private boolean doGameFilesInstallationBeforeRunGame = false;
    private boolean doGameFilesInstallationFromLauncherUI = true;
    private boolean isWindowMoveable = true;
    private boolean isWindowMoveableOnOutScreen = true;

    // Attributs injectés par le système
    private boolean isStatutServerMCEnabled;
    private boolean isNewsMLEnabled;
    private boolean isSnowFlakeEnabled;
    private boolean isRadioMLEnabled;

    @Override
    public void initialize(URL location, ResourceBundle resources) {

    }
}

Les attributs récupérés

- doGameFilesInstallationBeforeRunGame: Permet de lancer l’installation des fichiers du jeu avant le lancement du jeu. Pour être plus exact, L’installation démarrera dès le lancement du thème. Si à false, l’installation se lancera après l’authentification.
- doGameFilesInstallationFromLauncherUI: L’installation se fera depuis le fichier launcher_ui.fxml plutôt que updater_ui.fxml.
- isWindowMoveable: Permet de déplacer la fenêtre du thème. Si false, la fenêtre est fixe et ne pas être bougée.
- isWindowMoveableOnOutScreen: Permet de déplacer la fenêtre du thème hors de l’écran. Si false, la fenêtre ne pourra sortir de l’écran.

Les attributs injectés

À ce jour, il n’y a que les attributs permettant de vérifier que les plugins sont activés. Ils ont le format suivant:

private boolean boolean isNom_du_pluginEnabled;

Il faut remplacer Nom_du_plugin par le nom du plugin que vous souhaitez vérifier.

Par exemple pour le plugin NewsML ça sera:

private boolean boolean isNewsMLEnabled;

Ces attributs vous seront utiles pour par exemple activer/désactiver des onglets.

LauncherController

Création du controller

Le contenu de votre LauncherController doit ressembler à ceci:

public class LauncherController implements Initializable {
    @Override
    public void initialize(URL location, ResourceBundle resources) {

    }
}

Les attributs récupérés

Aucun attribut n’est pour le moment récupéré.

Les attributs injectés

Aucun attribut n’est pour le moment injecté.

UpdaterController

Création du controller

Le contenu de votre LauncherController doit ressembler à ceci:

public class LauncherController implements Initializable {
    @Override
    public void initialize(URL location, ResourceBundle resources) {

    }
}

Les attributs récupérés

Aucun attribut n’est pour le moment récupéré.

Les attributs injectés

Aucun attribut n’est pour le moment injecté.

LoadingController

Création du controller

Le contenu de votre LauncherController doit ressembler à ceci:

public class LauncherController implements Initializable {
    @Override
    public void initialize(URL location, ResourceBundle resources) {

    }
}

Les attributs récupérés

Aucun attribut n’est pour le moment récupéré.

Les attributs injectés

Aucun attribut n’est pour le moment injecté.

ConnectionLostController

Création du controller

Le contenu de votre LauncherController doit ressembler à ceci:

public class LauncherController implements Initializable {
    @Override
    public void initialize(URL location, ResourceBundle resources) {

    }
}

Les attributs récupérés

Aucun attribut n’est pour le moment récupéré.

Les attributs injectés

Aucun attribut n’est pour le moment injecté.

SettingsController

Création du controller

Ce controller est déclaré par le système et est associé au fichier settings_template.fxml. Il représente les paramètres du launcher.

Le contenu de votre SettingsController doit ressembler à ceci:

public class SettingsController implements Initializable {
    private String settingsTabsBgColor = "#775637";
    private String settingsTabsBgBorderColor = "#775637";
    private String settingsTabsThemeColor = "#d4a15a";
    private String settingsTabsInputsTextColor = "#775637";
    private String settingsTabsTextColor = "#ffffff";

    @Override
    public void initialize(URL location, ResourceBundle resources) {

    }
}

Les attributs récupérés

- settingsTabsBgColor: Couleur (en hexadecimal) de fond des onglets des paramètres.
- settingsTabsBgBorderColor: Couleur (en hexadecimal) de la bordure des onglets des paramètres.
- settingsTabsThemeColor: Couleur (en hexadecimal) des composants dans les paramètres.
- settingsTabsInputsTextColor: Couleur (en hexadecimal) de texte des champs dans les paramètres.
- settingsTabsTextColor: Couleur (en hexadecimal) des textes dans les paramètres.

Les attributs injectés

Aucun attribut n’est pour le moment injecté.

FXML

application_ui.fxml

#app_container

Avertissement

Cet élément est obligatoire et doit-être déclaré dans le fichier launcher-ui.fxml

Cet élément représente le cadre dont on a vu dans la structure du système dans un précédente partie. Il va contenir en son centre tous les éléments du système tels que Launcher, Updater etc… Autrement dit, dans app_container vous retrouverez le contenu des fichiers launcher_ui.fxml, updater_ui.fxml etc… à tour de rôle.

Exemple de code:

<BorderPane fx:id="app_container />

Il doit être du type BorderPane.

#app_close_btn

Avertissement

Cet élément est obligatoire et doit-être déclaré dans le fichier launcher-ui.fxml

Cet élément permet de mettre fin à l’élément du système Application et donc de fermer votre thème.

Exemple de code:

<Button fx:id="app_close_btn />

Il doit être du type Button ou en hériter.

#app_reduce_btn

Avertissement

Cet élément est obligatoire et doit-être déclaré dans le fichier launcher-ui.fxml

Cet élément permet de réduire la fenêtre de votre thème.

Exemple de code:

<Button fx:id="app_reduce_btn />

Il doit être du type Button ou en hériter.

#progressBar

Avertissement

Cet élément est obligatoire à condition qu’il soit déclaré quelque part dans le fichier application_ui.fxml ou dans updater_ui.fxml

Cet élément affiche une barre de progression des fichiers en cours de téléchargement.

Note

S’il est localisé dans le fichier application_ui.fxml alors il ne doit pas être déclaré dans le fichier updater_ui.fxml. Le téléchargement des fichiers sera donc visible de part et d’autres des éléments du système tels que Launcher et Updater.

<ProgressBar fx:id="progressBar" />

Il doit être du type ProgressBar ou en hériter.

#progressBarLabel

Avertissement

Cet élément est obligatoire à condition qu’il soit déclaré quelque part dans le fichier application_ui.fxml ou dans updater_ui.fxml

Cet élément affiche le libellé des fichiers en cours de téléchargement.

Note

S’il est localisé dans le fichier application_ui.fxml alors il ne doit pas être déclaré dans le fichier updater_ui.fxml. Le libellé sera donc visible de part et d’autres des éléments du système tels que Launcher et Updater.

<Label fx:id="progressBarLabel" />

Il doit être du type Label ou en hériter.

.snowflake

Avertissement

Cet élément est obligatoire que si le plugin SnowFlake est compatible et est activé par l’utilisateur

Dans cet élément il y aura une chute de flocons de neige. Pour que les flocons soient en arrière-plan, vous devez placer cet élément dans un StackPane comme premier élément.

<StackPane styleClass="snowflake" />

Il doit être du type StackPane ou en hériter.

#news_container

Avertissement

Cet élément est obligatoire seulement si le plugin est activé et qu’il est compatible avec votre thème. Vous pouvez le déclarez n’importe où dans votre application que ça soit dans application_ui.fxml ou launcher_ui.fxml

Cet élément intègrera le contenu du fichier news_template.fxml.

Exemple de code:

<ScrollPane fx:id="news_container" />
<Pane fx:id="news_container" />

Il doit être du type ScrollPane ou Pane ou alors en hériter d’un des 2 éléments choisis.

#statutservermc_container

Avertissement

Cet élément est obligatoire seulement si le plugin est activé et qu’il est compatible avec votre thème. Vous pouvez le déclarez n’importe où dans votre application que ça soit dans application_ui.fxml ou launcher_ui.fxml

Cet élément intègrera le contenu du fichier statutservermc_template.fxml.

Exemple de code:

<ScrollPane fx:id="statutservermc_container" />
<Pane fx:id="statutservermc_container" />

Il doit être du type Pane ou en hériter.

launcher_ui.fxml

#microsoft_auth_container

Avertissement

Cet élément est obligatoire et doit-être déclaré dans le fichier launcher-ui.fxml

Cet élément s’affiche lorsque l’authentification à microsoft est activée dans le launcher. Il doit contient le bouton #btn_submit_microsoft_auth permettant d’ouvrir la fenêtre d’authentification à microsoft. Il peut également contenir d’autres éléments qui devraient s’afficher pour ce mode d’authentification.

Exemple de code:

<Pane fx:id="microsoft_auth_container" />
<AnchorPane fx:id="microsoft_auth_container" />
<BorderPane fx:id="microsoft_auth_container" />

Il doit être du type Pane ou en hériter.

#btn_submit_microsoft_auth

Avertissement

Cet élément est obligatoire et doit-être déclaré dans le fichier launcher-ui.fxml

Cet élément ouvre la fenêtre d’authentification à microsoft. Il doit aller dans #microsoft_auth_container pour être reconnu par le système.

Exemple de code:

<AnchorPane fx:id="microsoft_auth_container">
    <Button fx:id="btn_submit_microsoft_auth" />
</AnchorPane>

Il doit être du type Button ou en hériter.

#custom_auth_container

Avertissement

Cet élément est obligatoire et doit-être déclaré dans le fichier launcher-ui.fxml

Cet élément s’affiche lorsque l’authentification personnalisée est activée dans le launcher. Il doit contenir le champ avec la classe .login, le champ avec la classe .password et le bouton .submit_login qui est prévu pour ce mode d’authentification. Il peut également contenir d’autres éléments qui devraient s’afficher pour ce mode d’authentification.

Exemple de code:

<AnchorPane fx:id="custom_auth_container">
    <TextField styleClass="login" />
    <PasswordField styleClass="password" />
    <Button styleClass="submit_login" />
</AnchorPane>

Il doit être du type Pane ou en hériter.

#crack_auth_container

Avertissement

Cet élément est obligatoire et doit-être déclaré dans le fichier launcher-ui.fxml

Cet élément s’affiche lorsque l’authentification crackée est activée dans le launcher. Il doit contenir le champ avec la classe .login, et le bouton .submit_login qui est prévu pour ce mode d’authentification. Il peut également contenir d’autres éléments qui devraient s’afficher pour ce mode d’authentification.

Exemple de code:

<AnchorPane fx:id="crack_auth_container">
    <TextField styleClass="login" />
    <Button styleClass="submit_login" />
</AnchorPane>

Il doit être du type Pane ou en hériter.

.login

Avertissement

Cet élément est obligatoire et doit-être déclaré comme sous-élément des éléments cités plus haut dans le fichier launcher-ui.fxml

Cet élément est un champ de texte prévu pour les différents modes d’authentification.

Exemple de code:

<AnchorPane fx:id="crack_auth_container">
    <TextField styleClass="login" />
</AnchorPane>

Il doit être du type TextField ou en hériter.

.password

Avertissement

Cet élément est obligatoire et doit-être déclaré comme sous-élément des éléments cités plus haut dans le fichier launcher-ui.fxml

Cet élément est un champ de texte masqué prévu pour les différents modes d’authentification. Il sert à saisir le mot de passe.

Exemple de code:

<AnchorPane fx:id="custom_auth_container">
    <PasswordField styleClass="password" />
</AnchorPane>

Il doit être du type PasswordField ou en hériter.

.save_account_checkbox

Note

Cet élément est facultatif et doit-être déclaré comme sous-élément des éléments #custom_auth_container et #crack_auth_container cité plus haut dans le fichier launcher-ui.fxml

Note

Si cet élément n’est pas déclaré, par défaut, les identifiants sont mémorisés pour une prochaine connexion.

Cet élément est une case à cocher qui permet d’enregistrer les identifiants de connexion pour une prochaine connexion.

Exemple de code:

<AnchorPane fx:id="custom_auth_container">
    <CheckBox styleClass="save_account_checkbox" />
</AnchorPane>

Il doit être du type CheckBox ou en hériter.

#settings_container

Avertissement

Cet élément est obligatoire et doit-être déclaré dans le fichier launcher_ui.fxml

Cet élément intègrera le contenu du fichier settings_template.fxml.

Exemple de code:

<ScrollPane fx:id="settings_container" />
<Pane fx:id="settings_container" />

Il doit être du type ScrollPane ou Pane ou alors en hériter d’un des 2 éléments choisis.

updater_ui.fxml

#progressBar

Avertissement

Cet élément est obligatoire à condition qu’il soit déclaré quelque part dans le fichier application_ui.fxml ou dans updater_ui.fxml

Cet élément affiche une barre de progression des fichiers en cours de téléchargement.

Note

S’il est localisé dans le fichier updater_ui.fxml alors il ne doit pas être déclaré en parallèle dans le fichier application_ui.fxml. Le téléchargement des fichiers sera donc visible uniquement dans l’élément constituant le fichier updater_ui.fxml.

<ProgressBar fx:id="progressBar" />

Il doit être du type ProgressBar ou en hériter.

#progressBarLabel

Avertissement

Cet élément est obligatoire à condition qu’il soit déclaré quelque part dans le fichier application_ui.fxml ou dans updater_ui.fxml

Cet élément affiche le libellé des fichiers en cours de téléchargement.

Note

S’il est localisé dans le fichier updater_ui.fxml alors il ne doit pas être déclaré dans le fichier application_ui.fxml. Le libellé sera donc visible uniquement dans l’élément constituant le fichier updater_ui.fxml.

<Label fx:id="progressBarLabel" />

Il doit être du type Label ou en hériter.

loading_ui.fxml

Note

Ce fichier est facultatif.

Si ce fichier existe dans le projet, il activera l’élément Loading du système (voir la partie description du système pour en savoir plus).

Ce fichier ne contient pas d’éléments obligatoires pour le moment mais doit bien représenter une fenêtre de chargement (p.ex: Avec un loader)

connection_lost_ui.fxml

Note

Ce fichier est facultatif.

Si ce fichier existe dans le projet, il activera l’élément ConnectionLost du système (voir la partie description du système pour en savoir plus).

#connectionLostLabel

Avertissement

Cet élément est obligatoire dans le fichier connection_lost_ui.fxml

Cet élément affiche le décompteur de reprise de connexion.

<Label fx:id="connectionLostLabel" />

Il doit être du type Label ou en hériter.

settings_template.fxml

Note

Le contenu de ce fichier est rattaché à l’élément #settings_container

Ce fichier fait office de template d’affichage des paramètres du launcher.

Ces éléments sont définis dynamiquement donc difficile de déterminer à l’avance les identifiants des éléments qu’il contient.

Par conséquent, nous vous invitons à suivre les instructions du système qui vous indiquera les éléments à déclarer dans ce fichier.

Vous pouvez également vous inspirer du sample pour déclarer à l’avance les éléments connus (D’autres pourraient éventuellement être ajouter à l’avenir d’où la raison pour laquelle nous les définissons pas ici)

news_template.fxml

Note

Le contenu de ce fichier est rattaché à l’élément #news_container et ne s’affichera que si le plugin NewsML est activé.

Cet élément est un template qui sera duppliqué proportionnellement au nombre de news.

#title_label

Avertissement

Cet élément est obligatoire et doit-être déclaré dans le fichier news_template.fxml

Cet élément représente le titre de la news.

<Label fx:id="title_label" />

Il doit être du type Label ou en hériter.

#day_label

Avertissement

Cet élément est obligatoire et doit-être déclaré dans le fichier news_template.fxml

Cet élément représente le jour de la rédaction de la news.

<Label fx:id="day_label" />

Il doit être du type Label ou en hériter.

#month_label

Avertissement

Cet élément est obligatoire et doit-être déclaré dans le fichier news_template.fxml

Cet élément représente le mois de la rédaction de la news.

<Label fx:id="month_label" />

Il doit être du type Label ou en hériter.

#year_label

Note

Cet élément est optionnel

Cet élément représente l’année de rédaction de la news.

<Label fx:id="year_label" />

Il doit être du type Label ou en hériter.

#author_label

Avertissement

Cet élément est obligatoire et doit-être déclaré dans le fichier news_template.fxml

Cet élément représente le rédacteur de la news.

<Label fx:id="author_label" />

Il doit être du type Label ou en hériter.

#content_text

Avertissement

Cet élément est obligatoire et doit-être déclaré dans le fichier news_template.fxml

Cet élément est le texte descriptif de la news.

<TextArea fx:id="content_text" />

Il doit être du type TextArea ou en hériter.

statusservermc_template.fxml

Note

Le contenu de ce fichier est rattaché à l’élément #statutservermc_container et ne s’affichera que si le plugin StatutServerMC est activé.

#online_players_label

Avertissement

Cet élément est obligatoire et doit-être déclaré dans le fichier statusservermc_template.fxml.

Cet élément affichera le nombre de connectés.

<Label fx:id="online_players_label" />

Il doit être du type Label ou en hériter.

#max_players_label

Note

Cet élément est facultatif mais doit-être déclaré dans le fichier statusservermc_template.fxml

Cet élément affichera la capacité du serveur en terme de connectés.

<Label fx:id="max_players_label" />

Il doit être du type Label ou en hériter.

#server_name_label

Note

Cet élément est facultatif mais doit-être déclaré dans le fichier statusservermc_template.fxml

Cet élément affichera le nom du serveur.

<Label fx:id="server_name_label" />

Il doit être du type Label ou en hériter.

#server_desc_text

Note

Cet élément est facultatif mais doit-être déclaré dans le fichier statusservermc_template.fxml

Cet élément affichera la description du serveur.

<Label fx:id="server_desc_text" />

Il doit être du type Label ou en hériter.

#favicon_image

Note

Cet élément est facultatif mais doit-être déclaré dans le fichier statusservermc_template.fxml

Cet élément affichera le favicon du serveur.

<ImageView fx:id="favicon_image" />

Il doit être du type ImageView ou en hériter.

#server_statut_image

Note

Cet élément est facultatif mais doit-être déclaré dans le fichier statusservermc_template.fxml

Cet élément affichera le statut du serveur (on/off) sous forme d’image. Les images doivent être nommé server_on et server_off et doivent avoir le format suivant: jpg, jpeg, png, gif.

<ImageView fx:id="server_statut_image" />

Il doit être du type ImageView ou en hériter.

Traduction

Introduction

La traduction est une étape importante pour pouvoir publier un thème sur la boutique car il y a des clients dans tous les coins du monde qui utilisent notre plateforme.

Dans cette section, nous allons voir comment mettre en place la traduction dans différente langue avec une sémantique bien spécifique à cela en FXML.

Sémantique

Le préfixe % permet d’indiquer au compilateur qu’il y a une résolution dite de ressource bundle à faire dans votre projet Java.

Voici un exemple de code:

<Label text="%myText" />

Le compilateur va aller chercher la valeur de l’instance de la resource %myText dans le fichier de la langue associée.

Par exemple, pour le français, les traductions iront dans le fichier locale_fr.properties.

Autrement dit, le nom du fichier de la langue correspondante doit contenir le préfixe locale_ suivi du code de langue suivi du format .properties tout attaché. Ce fichier doit être situé dans le package resources bundle pour que la résolution soit réussie (Voir la doc JavaFX concernant l’emplacement de ce package ou le sample)

Résolution de la resource

Pour illustrer nos propos de la section ci-dessus, l’instance de la resource %myText sera remplacée par l’exemple considéré ci-dessous:

myText = Je suis prévu pour l'imprévu

Cela donnera, théoriquement:

<Label text="Je suis prévu pour l'imprévu" />