Dans le cadre d'un de mes cours, on nous fait passer un programme qui a une IHM en JavaFX en une IHM utilisant le FXML pour décrire les éléments. Seulement, je n'y comprends rien du tout à ce truc, j'arrive à rien faire.
L'interface est découpé en plusieurs parties (un titre, un conteneur central contenant deux grilles qui affichent des images et en bas un scrollpane avec une zone de texte). J'essaie de modifier la zone du bas qui est une classe contenant deux attributs : un ScrollPane et un TextArea qui est construit avec un message départ et ensuite le textArea est ajouté au ScrollPane. Ensuite cette classe a une fonction append pour ajouter du texte à la zone de texte. J'ai essayé plein de trucs pour le faire fonctionner, lu le peu de cours que j'ai réussit à trouver là dessus. Je dois être à plus de 6h passé là dessus avec aucune avancée autre que de la frustration. Si quelqu'un pourrait m'expliquer comment on peut faire ça en fxml, ça m'aiderait beaucoup car là j'en suis rendu à abandonner.
J'ai même dernièrement essayé de modifier la classe fourni au départ en me disant que c'était peut-être l'architecture de départ du code fourni qui est pas fait pour le fxml mais ça n'a rien changé.
Voilà mon code à l'heure actuel.
package battleship2D.ui.controller;
import java.io.IOException;
import javafx.fxml.FXML;
import javafx.fxml.FXMLLoader;
import javafx.scene.control.ScrollPane;
import javafx.scene.control.TextArea;
/**
* Classe dedicated to games text notifications
* @author xaviator
*/
public class Messages extends ScrollPane {
/*=========================================================================*/
/* Members */
/*=========================================================================*/
/** ScrollPane container */
// @FXML
// private ScrollPane scrollPane;
/** Notification area */
@FXML
private TextArea textArea;
/*=========================================================================*/
/* Public methods */
/*=========================================================================*/
/**
* Constructor
* @param firstMessage - default message
*/
public Messages(String firstMessage) {
try {
FXMLLoader fxmlLoader = new FXMLLoader(Messages.class.getResource("../fxml/Messages.fxml"));
fxmlLoader.setRoot(this);
fxmlLoader.load();
}
catch(IOException ioe) {
System.err.println("GameBoard constructor error");
ioe.printStackTrace();
}
// this.scrollPane = new ScrollPane();
this.textArea = new TextArea(firstMessage);
/* this.textArea.setEditable(false);
this.setContent(this.textArea);
this.setPrefHeight(80);
this.setFitToHeight(true);
this.setFitToWidth(true);*/
//s init();
}
/*
* Getters / setters
*/
public void append(String string) {
this.textArea.appendText(string);
}
public TextArea getTextArea() {
return this.textArea;
}
public void setTextArea(TextArea newTextArea) {
this.textArea = newTextArea;
}
/* public ScrollPane getScrollPane() {
return this.scrollPane;
}
public void setScrollPane(ScrollPane newScrollPane) {
this.scrollPane = newScrollPane;
}*/
/*=========================================================================*/
/* Private methods */
/*=========================================================================*/
/**
* Initialize private members
*/
/* private void init() {
this.textArea.setEditable(false);
this.scrollPane.setContent(this.textArea);
this.scrollPane.setPrefHeight(80);
this.scrollPane.setFitToHeight(true);
this.scrollPane.setFitToWidth(true);
} */
}
<?xml version="1.0" encoding="UTF-8"?>
<?import javafx.scene.control.ScrollPane ?>
<?import javafx.scene.control.TextArea ?>
<fx:root type="battleship2D.ui.controller.Messages"
xmlns="http://javafx.com/javafx/8"
xmlns:fx="http://javafx.com/fxml/1">
<Content>
<TextArea fx:id="textArea" editable="false">
</TextArea>
</Content>
<PrefHeight 80 />
<FitToHeight true />
<FitToWidth true />
</fx:root>