Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > fr.comp.lang.java > #1606

Re: Aide pour une stratégie de programmation.

Path csiph.com!feeder.erje.net!1.eu.feeder.erje.net!news.albasani.net!news.trigofacile.com!.POSTED.reverse-90.fdn.fr!not-for-mail
From Yliur <yliur@free.fr>
Newsgroups fr.comp.lang.java
Subject Re: Aide pour une stratégie de programmation.
Date Wed, 15 Nov 2017 09:57:22 +0100
Organization Groupes francophones par TrigoFACILE
Message-ID <20171115095722.5d432934@free.fr> (permalink)
References <59fc966a$0$20429$426a34cc@news.free.fr> <20171107150354.5dc0969f@free.fr> <5a03af3a$0$7158$426a74cc@news.free.fr> <20171109091546.54256f71@free.fr> <5a06ff9f$0$3443$426a34cc@news.free.fr> <20171111183357.7277d116@free.fr> <5a0a6560$0$3841$426a74cc@news.free.fr> <20171114122759.223fae94@free.fr> <5a0bc677$0$3851$426a74cc@news.free.fr>
Mime-Version 1.0
Content-Type text/plain; charset=UTF-8
Content-Transfer-Encoding 8bit
Injection-Info news.trigofacile.com; posting-account="yliur@free.fr"; posting-host="reverse-90.fdn.fr:80.67.176.90"; logging-data="28211"; mail-complaints-to="abuse@trigofacile.com"
X-Newsreader Claws Mail 3.15.1-dirty (GTK+ 2.24.31; x86_64-pc-linux-gnu)
Xref csiph.com fr.comp.lang.java:1606

Show key headers only | View raw


Le 15 Nov 2017 04:45:43 GMT
bloiiing <bloiiing.invalid@yahoo.com> a écrit :

> Je viens de comprendre ce que tu veux dire par séparer les données de
> l'inteface graphique. Ou du moins je pense avoir compris l'idée.
> 
> Comment t'y prendrais-tu pour sauver les textes? Dans des String, des
> JTextArea, des Vector de String ou autres? Moi je les sauvegardais
> dans des JTextPane mais je viens de comprendre que si je veux
> effectuer un traitement sur ces données ce sera plus compliqué que
> sur des String ou des Vector<String>.

C'est bien ça. Les JTextPane sont des objets graphiques, il vaut mieux
les utiliser pour les représentations graphiques mais pas pour du
stockage de données, ce sera plus simple et plus clair.

Je vais essayer de détailler/expliquer ce sur quoi j'étais parti au
début.

Il faut d'abord définir des classes permettant de stocker les données,
on ne s'intéresse pas à leur représentation graphique à ce niveau. Donc
on aurait par exemple une classe Chapitre définie comme ça (c'est
simplifié, tu auras sans doute plus d'éléments) :

public class Chapitre
{
    private String titre ;
    private String corps ;
}

Il doit y avoir d'autres concepts manipulés par ton programme, c'est le
moment d'en faire une liste (c'est toujours utile) : des personnages,
des lieux, ... ? Quelles sont les notions qui vont être manipulables ?
En as-tu une liste ?


Ensuite on va avoir une fenêtre pour représenter graphiquement une
liste de chapitres et un chapitre en cours d'édition. Ici aussi c'est
simplifié pour l'instant. La classe devrait ressembler à ça (pour les
composants graphiques, j'utilise une convention consistant à indiquer
leur type, puis un souligné puis leur nom ; pratique parce qu'il y a
deux informations importantes dans les composants graphiques) :

public class FenPrincipale extends JFrame
{
    private JList      liste_chapitres ;
    private JTextField txt_titreChapitreEdite ;
    private JTextPane  zonetxt_corpsChapitreEdite ;
}

Note que JList est un composant graphique permettant de représenter une
liste visuellement et d'interagir avec elle, alors que plus haut
List<Chapitre> permet simplement de stocker des données (les
chapitres), sans se préoccuper de représentation visuelle.


Et pour lier le tout, on aura une classe référençant les éléments
principaux de l'application. Elle peut ressembler à ça :

public class Application
{
    private List<Chapitre> chapitres ;
    private FenPrincipale  fenPrincipale ;
}


Note que les chapitres et autres données à venir pourraient être
regroupées dans une classe DonneesAppli, elle-même référencée dan
Application, mais on verra plus tard quand ça s'étoffera.

Côté fenêtre c'est pareil : on va sans doute avoir des panneaux et
autres, pas juste trois composants posés directement dedans, mais on
verra ça plus tard aussi, ce n'est pas nécessaire pour cette
explication .


Pour le rangement en revanche mieux vaut bien séparer les choses, ça
permet de mieux saisir leur rôle. Si src est le répertoire contenant
tes sources, ça peut se présenter comme ça :
    src
        donnees
            Chapitre
        interfacegraphique
            FenPrincipale
        traitements
            ... (ici les chargements/sauvegardes par exemple)
        Application

Je te laisse nommer les choses à ta convenance, tout ça n'est qu'un
exemple.


Ça c'est pour la base de l'organisation des données, c'est très
important que ce soit clair.


Maintenant un aperçu du fonctionnement de l'ensemble, tu me diras
si c'est clair...

L'idée générale est celle-ci :
    Fichier <- chargement/sauvegarde -> Données <- édition-> Fenêtre

Les étapes importantes :
    - À partir d'un fichier on charge les données en mémoire (classe
      Chapitre : il y aura un objet par chapitre).
      La JList de la fenêtre est à ce moment remplie aussi avec les
      chapitres (on verra plus tard comment la synchroniser avec la
      liste de chapitres, je ne détaille pas ça pour l'instant).
        => Pour la réalisation de cette partie on verra plus tard.
    - Quand on clique sur un chapitre dans la liste pour l'éditer, les
      deux champs de saisie de la fenêtre vont être remplis avec les
      textes issus du chapitre.
        => Il y aura quelque part (en réaction à un clic sur un élément
           de la JList) un bout de code de la forme
             fenPrincipale.txt_titreChapitreEdite.setText     (chapitre.getTitre()) ;
             fenPrincipale.zonetxt_corpsChapitreEdite.setText (chapitre.getCorps()) ;
    - À ce moment l'utilisateur peut éditer les textes (ici titre et
      corps) du chapitre dans les deux composants graphiques. Ces
      textes sont édités uniquement dans le composant graphique, les
      données du chapitre dans l'objet de la classe Chapitre ne sont
      pas modifiées.
    - À un moment ou un autre, les données éditées doivent être
      envoyées dans l'objet Chapitre. Là c'est un choix d'ergonomie de
      ta part : est-ce que l'édition de ces données doit être
      annulable ? Est-ce que le texte d'un chapitre peut être visible à
      différents endroits simultanément ? Est-ce qu'on peut faire des
      recherches dans le texte des chapitres ? Suivant la réponse à
      ces questions et quelques autres, le moment où la synchronisation
      sera effectuée (l'événement qui la déclenchera) sera différent.
        => Dans les deux cas il y aura un bout de code ressemblant à ça :
             chapitre.setTitre (fenPrincipale.txt_titreChapitreEdite.getText()) ;
             chapitre.setCorps (fenPrincipale.zonetxt_corpsChapitreEdite.getText()) ;
    - À un autre moment, à définir également, les données seront
      sauvegardées dans le fichier.
        => Opération symétrique du chargement depuis le fichier, à voir
           en même temps.


Est-ce plus clair comme ça ?

Pour avancer à partir de là, il faut d'une part définir les autres
données manipulées par l'application (personnages, ... ?), les
informations qui les composent (j'ai juste noté titre et corps dans
les chapitres, mais il y a sans doute d'autres choses) ; d'autre part
définir à quel moment les textes sont synchronisées entre les
composants graphiques et les données de l'application. Pour cette
deuxième partie, il y a plusieurs solutions possibles, à voir en
fonction de ce que fait le reste de l'appli ; pour l'instant on
pourrait se contenter de copier les données des composants graphiques
dans les données de l'appli quand on passe à un autre chapitre, c'est
simple à mettre en œuvre et c'est un bon exemple ; il sera toujours
temps de changer d'avis quand tu auras bien compris le principe de
fonctionnement.


Dis-moi si le fonctionnement général te paraît plus clair ou si tu
as des questions...

Back to fr.comp.lang.java | Previous | NextPrevious in thread | Next in thread | Find similar


Thread

Aide pour une stratégie de programmation. bloiiing <bloiiing.invalid@yahoo.com> - 2017-11-03 16:16 +0000
  Re: Aide pour une stratégie de programmation. Yliur <yliur@free.fr> - 2017-11-07 15:03 +0100
    Re: Aide pour une stratégie de programmation. bloiiing <bloiiing.invalid@yahoo.com> - 2017-11-09 01:28 +0000
      Re: Aide pour une stratégie de programmation. Yliur <yliur@free.fr> - 2017-11-09 09:15 +0100
        Re: Aide pour une stratégie de programmation. bloiiing <bloiiing.invalid@yahoo.com> - 2017-11-11 13:48 +0000
          Re: Aide pour une stratégie de programmation. Yliur <yliur@free.fr> - 2017-11-11 18:33 +0100
            Re: Aide pour une stratégie de programmation. bloiiing <bloiiing.invalid@yahoo.com> - 2017-11-14 03:39 +0000
              Re: Aide pour une stratégie de programmation. Yliur <yliur@free.fr> - 2017-11-14 12:27 +0100
                Re: Aide pour une stratégie de programmation. bloiiing <bloiiing.invalid@yahoo.com> - 2017-11-15 03:48 +0000
                Re: Aide pour une stratégie de programmation. Samuel DEVULDER <samuel-dot-devulder@laposte-dot-net.invalid> - 2017-11-15 08:44 +0100
                Re: Aide pour une stratégie de programmation. Yliur <yliur@free.fr> - 2017-11-15 09:10 +0100
                Re: Aide pour une stratégie de programmation. Samuel DEVULDER <samuel-dot-devulder@laposte-dot-net.invalid> - 2017-11-15 09:31 +0100
                Re: Aide pour une stratégie de programmation. bloiiing <bloiiing.invalid@yahoo.com> - 2017-11-17 01:45 +0000
                Re: Aide pour une stratégie de programmation. bloiiing <bloiiing.invalid@yahoo.com> - 2017-11-15 04:45 +0000
                Re: Aide pour une stratégie de programmation. Samuel DEVULDER <samuel-dot-devulder@laposte-dot-net.invalid> - 2017-11-15 09:44 +0100
                Re: Aide pour une stratégie de programmation. bloiiing <bloiiing.invalid@yahoo.com> - 2017-11-17 01:33 +0000
                Re: Aide pour une stratégie de programmation. Yliur <yliur@free.fr> - 2017-11-15 09:57 +0100
                Re: Aide pour une stratégie de programmation. bloiiing <bloiiing.invalid@yahoo.com> - 2017-11-17 01:24 +0000
                Re: Aide pour une stratégie de programmation. Yliur <yliur@free.fr> - 2017-11-17 08:32 +0100
                Re: Aide pour une stratégie de programmation. bloiiing <bloiiing.invalid@yahoo.com> - 2017-11-19 06:08 +0000
                Re: Aide pour une stratégie de programmation. Samuel DEVULDER <samuel-dot-devulder@laposte-dot-net.invalid> - 2017-11-19 08:38 +0100
                Re: Aide pour une stratégie de programmation. bloiiing <bloiiing.invalid@yahoo.com> - 2017-11-19 12:27 +0000
                Re: Aide pour une stratégie de programmation. Samuel DEVULDER <samuel-dot-devulder@laposte-dot-net.invalid> - 2017-11-20 01:33 +0100
                Re: Aide pour une stratégie de programmation. bloiiing <bloiiing.invalid@yahoo.com> - 2017-11-20 20:51 +0000
                Re: Aide pour une stratégie de programmation. Yliur <yliur@free.fr> - 2017-11-19 10:13 +0100
                Re: Aide pour une stratégie de programmation. Yliur <yliur@free.fr> - 2017-11-19 10:51 +0100
                Re: Aide pour une stratégie de programmation. bloiiing <bloiiing.invalid@yahoo.com> - 2017-11-19 12:20 +0000
                Re: Aide pour une stratégie de programmation. Yliur <yliur@free.fr> - 2017-11-19 14:42 +0100
                Re: Aide pour une stratégie de programmation. bloiiing <bloiiing.invalid@yahoo.com> - 2017-11-19 15:55 +0000

csiph-web