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¶
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¶
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.
#minelaunched_copyright_label¶
Avertissement
Cet élément est obligatoire et doit-être déclaré dans le fichier launcher-ui.fxml
Cet élément affiche les droits d’auteurs. Il est strictement interdit de le contourner ou de le masquer sous risque de vous faire définitivement bloqué le compte.
<Label fx:id="minelaunched_copyright_label />
Il doit être du type Label 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" />