Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

=?iso-8859-1?q?Probl=E8me_de_logique=2E?=

2 réponses
Avatar
bloiiing
Bonjour à toutes et tous,



Il y a quelques temps, je postais sur ce groupe une demande d'aide pour élaborer une stratégie de programmation pour un logiciel en java qui doit servir à aider les écrivains ou les journalistes à élaborer des textes. Ce n'est pas un traitement de texte mais plutôt un logiciel de EAO (Écriture Assitée par Ordinateur).



J'avais eu quelques réponses très frutueuses et pertinentes. Je les ai mises à profit et j'essaie de respecter les conseils qu'on m'a prodigué sur ce groupe.



Cependant, il y a un problème sur lequel je bloque. Je m'explique.



J'ai des objets Chapter qui contiennent 3 String (body, notes et synopsis). La String body va s'afficher dans un JTextPane lui-même dans une JTabbedPane. À chaque body correspond une notes et une synopsis qui vont s'afficher dans 2 autres JTextPane eux-mêmes dans une autre JTabbedPane.

Les String notes et synopsis sont changés dans le même JTextPane chaque fois qu'un body est ouvert. Par contre, chaque body va s'afficher dans un JTextPane différent.

Mon problème c'est pour synchroniser le tout. Pour qu'à chaque body s'affiche le notes et le synopsis correspondants.

Une solution m'avait été suggérée, c'est celle d'un seul JTextPane pour les body qui s'efface à chaque nouveau Chapter sélectionné. Dans ce cas, c'est très simple et je peux m'en sortir. Mais pour la beauté et surtout pour l'ergonomie de mon logiciel, je souhaiterais conserver l'option de départ, à savoir plusieurs JTextPane dans la même JTabbedPane pour afficher les champs body.

Je ne sais pas si je me suis bien expliqué...

La question c'est: Comment faire pour afficher les bonnes notes et synopsis pour chaque body sélectionné dans n'importe quel ordre? Et si je ferme un onglet body, pour que les notes et synopsis laissent place à ceux du body correspondand nouvellement affiché?

Merci d'avance.

2 réponses

Avatar
Yliur
Le 21 Dec 2017 17:44:22 GMT
bloiiing a écrit :
J'ai des objets Chapter qui contiennent 3 String (body, notes et
synopsis). La String body va s'afficher dans un JTextPane lui-même
dans une JTabbedPane. À chaque body correspond une notes et une
synopsis qui vont s'afficher dans 2 autres JTextPane eux-mêmes dans
une autre JTabbedPane.
Les String notes et synopsis sont changés dans le même JTextPane
chaque fois qu'un body est ouvert. Par contre, chaque body va
s'afficher dans un JTextPane différent.
Mon problème c'est pour synchroniser le tout. Pour qu'à chaque body
s'affiche le notes et le synopsis correspondants.
Une solution m'avait été suggérée, c'est celle d'un seul JTextPane
pour les body qui s'efface à chaque nouveau Chapter sélectionné. Dans
ce cas, c'est très simple et je peux m'en sortir. Mais pour la beauté
et surtout pour l'ergonomie de mon logiciel, je souhaiterais
conserver l'option de départ, à savoir plusieurs JTextPane dans la
même JTabbedPane pour afficher les champs body.
Je ne sais pas si je me suis bien expliqué...
La question c'est: Comment faire pour afficher les bonnes notes et
synopsis pour chaque body sélectionné dans n'importe quel ordre? Et
si je ferme un onglet body, pour que les notes et synopsis laissent
place à ceux du body correspondand nouvellement affiché?

Si je comprends bien, le problème est que tu as d'un côté des onglets
permettant d'afficher le corps des chapitres ouverts et de l'autre des
champs qui affichent les notes et synopsis ?
Il existe bien une notion de chapitres ouverts / en cours d'édition
alors que les autres sont juste listés quelque part ?
Est-ce qu'un chapitre peut être ouvert plusieurs fois au même moment ?
Est-ce que les notes et synopsis seront enregistrés automatiquement
quand on passe d'un chapitre à l'autre ? Auquel cas ça pose des
questions supplémentaires, attention : le moment auquel les données
sont enregistrées est important pour déterminer la manière de gérer
tout ça.
Un petit gribouillis de comment l'interface se présente peut être utile
aussi. Cherches-tu à mimer exactement le logiciel dont tu t'inspires ?
Quelles sont les différences ?
Si le but est de réagir aux changement d'onglet (ajout / retrait /
activation d'un onglet), je pense que tu peux utiliser addChangeListener
sur ton composant JTabbedPane. À chaque changement, en fonction de
l'onglet effectivement affiché tu peux mettre à jour les champs texte
graphiques notes et synopsis.
Pour ça il faudra savoir à quel chapitre correspond l'onglet affiché.
Je suppose que chaque onglet est représenté par un composant
particulier, peut-être de JPanel ? Dans ce cas tu crées une classe
PanneauCorpsChapitre qui hérite de JPanel et contient un attribut
supplémentaire : la référence au chapitre concerné. Et tu utilises ce
panneau particulier à la place de JPanel (quand tu le crées, il faut
lui passer la référence au chapitre qu'il représente) : il fait la même
chose mais il contient une information en plus.
Donc dans l'écouteur de l'événement tu récupères le panneau affiché
avec getSelectedComponent, il s'agit d'un objet de type
PanneauCorpsChapitre dans lequel tu trouves les textes des notes et
synopsis pour mettre à jour ces deux champs qui se trouvent ailleurs.
Attention au cas où plus aucun onglet n'est ouvert.
Est-ce bien ça que tu voulais faire ?
Avatar
bloiiing
Yliur wrote:
Si je comprends bien, le problème est que tu as d'un côté des onglets
permettant d'afficher le corps des chapitres ouverts et de l'autre des
champs qui affichent les notes et synopsis ?

Oui. Mais les deux derniers s'effacent à chaque changement de chapitre.
Chaque corps de chapitre sélectioné s'affichent dans un JTextPane
différent.
Il existe bien une notion de chapitres ouverts / en cours d'édition
alors que les autres sont juste listés quelque part ?

Oui.
Est-ce qu'un chapitre peut être ouvert plusieurs fois au même moment ?

Bonne question à laquelle je n'avais pas encore réfléchi. La réponse
est non. Je verrai comment gérer ça plus tard...
Est-ce que les notes et synopsis seront enregistrés automatiquement
quand on passe d'un chapitre à l'autre ? Auquel cas ça pose des
questions supplémentaires, attention : le moment auquel les données
sont enregistrées est important pour déterminer la manière de gérer
tout ça.

Oui. Les notes et synopsis doivent être sauvés à chaque changement de
chapitre.
Un petit gribouillis de comment l'interface se présente peut être utile
aussi. Cherches-tu à mimer exactement le logiciel dont tu t'inspires ?
Quelles sont les différences ?
Si le but est de réagir aux changement d'onglet (ajout / retrait /
activation d'un onglet), je pense que tu peux utiliser addChangeListener
sur ton composant JTabbedPane. À chaque changement, en fonction de
l'onglet effectivement affiché tu peux mettre à jour les champs texte
graphiques notes et synopsis.

Ok. Je vais me pencher sur ça.
Pour ça il faudra savoir à quel chapitre correspond l'onglet affiché.
Je suppose que chaque onglet est représenté par un composant
particulier, peut-être de JPanel ? Dans ce cas tu crées une classe
PanneauCorpsChapitre qui hérite de JPanel et contient un attribut
supplémentaire : la référence au chapitre concerné. Et tu utilises ce
panneau particulier à la place de JPanel (quand tu le crées, il faut
lui passer la référence au chapitre qu'il représente) : il fait la même
chose mais il contient une information en plus.
Donc dans l'écouteur de l'événement tu récupères le panneau affiché
avec getSelectedComponent, il s'agit d'un objet de type
PanneauCorpsChapitre dans lequel tu trouves les textes des notes et
synopsis pour mettre à jour ces deux champs qui se trouvent ailleurs.
Attention au cas où plus aucun onglet n'est ouvert.
Est-ce bien ça que tu voulais faire ?

Oui, c'est bien ça. En fait ce sont des JTextPane et non des JPanel mais ça ne change rien. En fait je pensais qu'il y avait plus simple. C'est une bonne idée quand-même. Je vais faire comme ça.
Un grand merci.