Bonjour,
J'ai un petit souci sur un JTextArea sur une appli Java.
J'ai défini un JTextArea acceptant les retours à la ligne setLineWrap(true). Si je saisis dedans pas de pb, le comportement est parfaitement normal.
Sauf que ce JTextArea est initialisé avec une donnée en provenance d'un objet métier, la description d'un dossier en l'occurrence qui est assez longue avec beaucoup de retours à la ligne. Ce même objet récupère les données depuis un flux XML (dans lequel d'ailleurs les retours à la ligne sont codés
), lui même construit à partir du résultat d'une requête SQL dans une BDD.
Et c'est ainsi que je constate que :
- le texte (mediumtext) stocké dans la base de données a bien des retours à la ligne
- le texte stocké dans la variable String de l'objet métier qui stocke cette info a bien des retours à la ligne (vérifié notamment dans la console après affichage par un system.out.println ;
- lorsque j'applique mon text au jtext area avec la méthode monJTextArea.setText(montextlong), le texte est bien présent dans le champ multiligne mais sans plus aucun retour à la ligne !
Or si je saisis dans le JTextArea en veillant bien à faire des retours à la ligne, que je synchronise ma saisie avec la variable texte de l'objet métier et que je remets à jiour le texte du JTextArea avec le contenu de ma variable texte de l'objet métier, mes retours à la ligne sont bien affichés.
Je récapitule (ok signifie que les retours à la ligne sont correctements transmis) :
JTextArea --- ok --> Objet métier --- ok --> JTextArea
BDD -- ok --> XML -- ok --> Objet métier -- pas ok --> JTextArea
Voilà le bout de code qui est le pont entre l'objet métier et le JTextArea
public void loadData(){
// Je récupère la valeur à afficher
Object data;
data = attribut.invokeGetter(targetObj); // peu importe la méthode de récupération de la donnée, spécifique à mon appli
// Je teste dans la console, pas de problème les retours à la lignes sont pris en compte
System.out.println(data);
//Je mets à jour le contenu textuel du composant le JTextComponent field (dans notre cas un JTextArea)
//qui, étant de type texte, est mis à jour par l'instruction du dernier bloc else
if(data==null){
//Si le getter ne retourne aucune donnée, on affiche un champ vide
field.setText("");
}
else if(data.getClass().equals(Date.class)){
//Dans le cas d'une date, on procède à son formatage "textuel"
field.setText(DATE_FORMAT.format(data));
}
else if(data.getClass().equals(Float.class)){
//Dans le cas d'un float, on procède à son formatage à 2 décimales
field.setText(FORMAT_MONETAIRE.format(data));
}else{
//Pour tout autre type, on affiche la représentation textuelle de la donnée
field.setText(data.toString());
}
}
Si quelqu'un pouvait m'éclairer. A priori, il ne s'agit pas d'un problème de fond mais d'une connerie, car la gestion des retours à la ligne fonctionne très bien lorsque la saisie enregistrée dans l'objet métier provient justement du JTextArea. C'est lorsque sa source est externe que la situation foire.
Merci.
