IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Composants Java Discussion :

Erreur dans l'écriture devant une flèche dessinée


Sujet :

Composants Java

  1. #41
    Membre régulier
    Femme Profil pro
    Étudiant
    Inscrit en
    Février 2017
    Messages
    108
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 31
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2017
    Messages : 108
    Points : 89
    Points
    89
    Par défaut
    ok
    run:
    Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
    at javax.swing.JList$1.getSize(JList.java:455)
    at javax.swing.plaf.basic.BasicListUI.updateLayoutState(BasicListUI.java:1342)
    at javax.swing.plaf.basic.BasicListUI.maybeUpdateLayoutState(BasicListUI.java:1311)
    at javax.swing.plaf.basic.BasicListUI.getPreferredSize(BasicListUI.java:578)
    at javax.swing.JComponent.getPreferredSize(JComponent.java:1662)
    at javax.swing.ScrollPaneLayout.layoutContainer(ScrollPaneLayout.java:791)
    at java.awt.Container.layout(Container.java:1510)
    at java.awt.Container.doLayout(Container.java:1499)
    at java.awt.Container.validateTree(Container.java:1695)
    at java.awt.Container.validateTree(Container.java:1704)
    at java.awt.Container.validateTree(Container.java:1704)
    at java.awt.Container.validateTree(Container.java:1704)
    at java.awt.Container.validateTree(Container.java:1704)
    at java.awt.Container.validateTree(Container.java:1704)
    at java.awt.Container.validate(Container.java:1630)
    at java.awt.Container.validateUnconditionally(Container.java:1667)
    at java.awt.Window.pack(Window.java:818)
    at Fenetre_essai.initComponents(Fenetre_essai.java:372)
    at Fenetre_essai.<init>(Fenetre_essai.java:54)
    at Fenetre_essai$12.run(Fenetre_essai.java:564)
    at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:311)
    at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:756)
    at java.awt.EventQueue.access$500(EventQueue.java:97)
    at java.awt.EventQueue$3.run(EventQueue.java:709)
    at java.awt.EventQueue$3.run(EventQueue.java:703)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:76)
    at java.awt.EventQueue.dispatchEvent(EventQueue.java:726)
    at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:201)
    at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:116)
    at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:105)
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101)
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:93)
    at java.awt.EventDispatchThread.run(EventDispatchThread.java:82)
    Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
    at javax.swing.JList$1.getSize(JList.java:455)
    at javax.swing.plaf.basic.BasicListUI.updateLayoutState(BasicListUI.java:1342)
    at javax.swing.plaf.basic.BasicListUI.maybeUpdateLayoutState(BasicListUI.java:1311)
    at javax.swing.plaf.basic.BasicListUI.getPreferredSize(BasicListUI.java:578)
    at javax.swing.JComponent.getPreferredSize(JComponent.java:1662)
    at javax.swing.ScrollPaneLayout.layoutContainer(ScrollPaneLayout.java:791)
    at java.awt.Container.layout(Container.java:1510)
    at java.awt.Container.doLayout(Container.java:1499)
    at java.awt.Container.validateTree(Container.java:1695)
    at java.awt.Container.validateTree(Container.java:1704)
    at java.awt.Container.validateTree(Container.java:1704)
    at java.awt.Container.validateTree(Container.java:1704)
    at java.awt.Container.validateTree(Container.java:1704)
    at java.awt.Container.validateTree(Container.java:1704)
    at java.awt.Container.validate(Container.java:1630)
    at java.awt.Window.dispatchEventImpl(Window.java:2744)
    at java.awt.Component.dispatchEvent(Component.java:4711)
    at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:758)
    at java.awt.EventQueue.access$500(EventQueue.java:97)
    at java.awt.EventQueue$3.run(EventQueue.java:709)
    at java.awt.EventQueue$3.run(EventQueue.java:703)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:76)
    at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:86)
    at java.awt.EventQueue$4.run(EventQueue.java:731)
    at java.awt.EventQueue$4.run(EventQueue.java:729)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:76)
    at java.awt.EventQueue.dispatchEvent(EventQueue.java:728)
    at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:201)
    at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:116)
    at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:105)
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101)
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:93)
    at java.awt.EventDispatchThread.run(EventDispatchThread.java:82)

  2. #42
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    La stacktrace complète et le source du constructeur de JLIst à un arguemtnconfirme mon hypothèse... ne passe rien en paramètre du constructeur de JList
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  3. #43
    Membre régulier
    Femme Profil pro
    Étudiant
    Inscrit en
    Février 2017
    Messages
    108
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 31
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2017
    Messages : 108
    Points : 89
    Points
    89
    Par défaut
    oui en fait ça marche maintenant pour l'affichage de jlist mais pour la création dans le fichier CallflowSenario.txt y 'a un probleme des exceptions
    at java.io.FileOutputStream.open(FileOutputStream.java:270)
    at java.io.FileOutputStream.<init>(FileOutputStream.java:213)
    at java.io.FileOutputStream.<init>(FileOutputStream.java:101)
    at java.io.FileWriter.<init>(FileWriter.java:63)
    at Main.mainMethod(Main.java:54)
    at Fenetre_essai.jList1ValueChanged(Fenetre_essai.java:466)
    at Fenetre_essai.access$100(Fenetre_essai.java:40)
    at Fenetre_essai$3.valueChanged(Fenetre_essai.java:244)
    at javax.swing.JList.fireSelectionValueChanged(JList.java:1796)
    at javax.swing.JList$ListSelectionHandler.valueChanged(JList.java:1810)
    at javax.swing.DefaultListSelectionModel.fireValueChanged(DefaultListSelectionModel.java:184)
    at javax.swing.DefaultListSelectionModel.fireValueChanged(DefaultListSelectionModel.java:164)
    at javax.swing.DefaultListSelectionModel.fireValueChanged(DefaultListSelectionModel.java:211)
    at javax.swing.DefaultListSelectionModel.changeSelection(DefaultListSelectionModel.java:405)
    at javax.swing.DefaultListSelectionModel.changeSelection(DefaultListSelectionModel.java:415)
    at javax.swing.DefaultListSelectionModel.setSelectionInterval(DefaultListSelectionModel.java:459)
    at javax.swing.JList.setSelectionInterval(JList.java:2065)
    at javax.swing.plaf.basic.BasicListUI$Handler.adjustSelection(BasicListUI.java:2739)
    at javax.swing.plaf.basic.BasicListUI$Handler.mousePressed(BasicListUI.java:2695)
    at java.awt.AWTEventMulticaster.mousePressed(AWTEventMulticaster.java:280)
    at java.awt.Component.processMouseEvent(Component.java:6530)
    at javax.swing.JComponent.processMouseEvent(JComponent.java:3324)
    at java.awt.Component.processEvent(Component.java:6298)
    at java.awt.Container.processEvent(Container.java:2236)
    at java.awt.Component.dispatchEventImpl(Component.java:4889)
    at java.awt.Container.dispatchEventImpl(Container.java:2294)
    at java.awt.Component.dispatchEvent(Component.java:4711)
    at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4888)
    at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4522)
    at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4466)
    at java.awt.Container.dispatchEventImpl(Container.java:2280)
    at java.awt.Window.dispatchEventImpl(Window.java:2746)
    at java.awt.Component.dispatchEvent(Component.java:4711)
    at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:758)
    at java.awt.EventQueue.access$500(EventQueue.java:97)
    at java.awt.EventQueue$3.run(EventQueue.java:709)
    at java.awt.EventQueue$3.run(EventQueue.java:703)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:76)
    at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:86)
    at java.awt.EventQueue$4.run(EventQueue.java:731)
    at java.awt.EventQueue$4.run(EventQueue.java:729)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:76)
    at java.awt.EventQueue.dispatchEvent(EventQueue.java:728)
    at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:201)
    at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:116)
    at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:105)
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101)
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:93)
    at java.awt.EventDispatchThread.run(EventDispatchThread.java:82)


    voila son code normalement c'est le meme que je fait dans le code ancien
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    private void jList1ValueChanged(javax.swing.event.ListSelectionEvent evt) throws Exception {                                    
            // TODO add your handling code here:
            if ( evt.getValueIsAdjusting() ) {
                 Main senre=new Main();
                 Long start = System.currentTimeMillis();
    					File selectedFile = jList1.getSelectedValue(); // je récupère le File sélectionné dans la JList
    					File[] files = selectedFile.listFiles(File::isFile);
                                            String select=selectedFile.toString();// je cherche les fichiers (et que les fichiers) qui s'y trouvent
                                         char c='\\';
                         String d=Character.toString(c);
                                            String autre=select.concat(d);
                         String pathfilesena=selectedFile.toString().concat(d).concat("CallflowSenario.txt");
     
                                            for (int i = 0; i <files.length; i++) {					
                                            System.out.print( "Contenu de " + selectedFile + ": ");
    					if ( files!=null && files.length>0 ) {
                                                String pathfich=selectedFile.toString().concat(d).concat(files[i].getName());
                                                String newFile= pathfich.replace(".gz", "");
                                                if(files[i].getName().startsWith("RNCCN")== true){
                                                    if(files[i].getName().endsWith(".xml")){
                                                    System.out.println(pathfich); senre.mainMethod(pathfich,select);FileReader file = null;
                         try{
                             file = new FileReader(pathfilesena);
     
                         } catch (FileNotFoundException e) {
                             // TODO Auto-generated catch block
                             e.printStackTrace();
                         }
                         BufferedReader br=new BufferedReader(file);
                         try {
                             jTextArea1.read(br,null);
                             System.out.println("Analyse de senario  en " + (System.currentTimeMillis() - start) + " mses");
                         } catch (IOException e) {
                             // TODO Auto-generated catch block
                             e.printStackTrace();
                         }
                         try {
                             br.close();
                         } catch (IOException e) {
                             // TODO Auto-generated catch block
                             e.printStackTrace();
                         }}else if(files[i].getName().endsWith(".xml.gz")){decompressGzipFile(pathfich, newFile);senre.mainMethod(pathfich,select);
                         FileReader file = null;
                         try{
                             file = new FileReader(pathfilesena);
     
                         } catch (FileNotFoundException e) {
                             // TODO Auto-generated catch block
                             e.printStackTrace();
                         }
                         BufferedReader br=new BufferedReader(file);
                         try {
                             jTextArea1.read(br,null);
                             System.out.println("Analyse de senario  en " + (System.currentTimeMillis() - start) + " mses");
                         } catch (IOException e) {
                             // TODO Auto-generated catch block
                             e.printStackTrace();
                         }
                         try {
                             br.close();
                         } catch (IOException e) {
                             // TODO Auto-generated catch block
                             e.printStackTrace();
                         }}}
    						//System.out.println(files.length+" fichier"+(files.length>1?"s":""));
    						//Arrays.stream(files).map(File::getName).map(f->"  "+f).forEach(System.out::println); // j'affiche la liste des noms des fichiers trouvés
    					}
    					else {
    						System.out.println("Aucun fichier.");
    					}
    				}
    			}}
    merci encore

  4. #44
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par dalila15 Voir le message
    oui en fait ça marche maintenant pour l'affichage de jlist mais pour la création dans le fichier CallflowSenario.txt y 'a un probleme des exceptions
    at java.io.FileOutputStream.open(FileOutputStream.java:270)
    Bah déjà il manque quelque chose dans la stacktrace : un stacktrace ça ne commence jamais par at, donc elle n'est pas complète...

    Ensuite, au lieu de faire les usines à gaz comme je vous l'ai déjà dit du genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    File selectedFile = jList1.getSelectedValue(); // je récupère le File sélectionné dans la JList
    					File[] files = selectedFile.listFiles(File::isFile);
                                            String select=selectedFile.toString();// je cherche les fichiers (et que les fichiers) qui s'y trouvent
                                         char c='\\';
                         String d=Character.toString(c);
                                            String autre=select.concat(d);
                         String pathfilesena=selectedFile.toString().concat(d).concat("CallflowSenario.txt");
     
                                            for (int i = 0; i <files.length; i++) {					
                                            System.out.print( "Contenu de " + selectedFile + ": ");
    					if ( files!=null && files.length>0 ) {
                                                String pathfich=selectedFile.toString().concat(d).concat(files[i].getName());
                                                String newFile= pathfich.replace(".gz", "");
                                                if(files[i].getName().startsWith("RNCCN")== true){
    peut-être que le problème vous sauterait aux yeux directement. En tout cas moi, j'ai pas envie de m'embêter à débrouiller ce caillon à votre place !
    Rappel 1 : on peut créer une chaine par concaténation : String s = s1 + s2 + s3...
    Rappel 2 : on peut créer un File par File nouveau = new File ( file, string ), ou file est File et string est String !!! sans avoir à faire des concats de String et de Character.toString de char !!!
    Ensuite, ça ne sert strictement à rien de tester si un tableau est null dans une boucle qui le parcourt, par contre c'est très utile voire indispensable de le faire avant de commencer la boucle !
    Et ça sert strictement à rien d'autre que de compliquer le code et de risquer de faire des erreurs que de reconstituer un chemin en assemblant des petits bouts extraits du chemin qu'on a déjà au début !!!
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  5. #45
    Membre régulier
    Femme Profil pro
    Étudiant
    Inscrit en
    Février 2017
    Messages
    108
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 31
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2017
    Messages : 108
    Points : 89
    Points
    89
    Par défaut
    j'ai corrigé l'erreur ..ok je fais nettoyé tout ça..j'ai juste une faute pour le nom de chemin
    mercii infiniment pour vos réponse

  6. #46
    Nouveau membre du Club
    Homme Profil pro
    ingénieur télécom
    Inscrit en
    Février 2017
    Messages
    54
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : Tunisie

    Informations professionnelles :
    Activité : ingénieur télécom
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Février 2017
    Messages : 54
    Points : 27
    Points
    27
    Par défaut
    Bonjour Joel ,
    est ce qu'il y a une méthode pour stocker une jpanel ou on dessine le scenario pour le modifier ultéreirement , c'est le code qui nous permet de dessiner le scenario
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
    194
    195
    196
    197
    198
    199
    200
    201
    202
    203
    204
    205
    206
    207
    208
    209
    210
    211
    212
    213
    214
    215
    216
    217
    218
    219
    220
    221
    222
    223
    224
    225
    226
    227
    228
    229
    230
    231
    232
    233
    234
    235
    236
    237
    238
    239
    240
    241
    242
    243
    244
    245
    246
    247
    248
    249
    250
    251
    252
    253
    254
    255
    256
    257
    258
    259
    260
    261
    262
    263
    264
    265
    266
    267
    268
    269
    270
    271
    272
    273
    274
    275
    276
    277
    278
    279
    280
    281
    282
    283
    284
    285
    286
    287
    288
    289
    290
    291
    292
    293
    294
    295
    296
    297
    298
    299
    300
    301
    302
    303
    304
    305
    306
    307
    308
    309
    310
    311
    312
    313
    314
    315
    316
    317
    318
    319
    320
    321
    322
    323
    324
    325
    326
    327
    328
    329
    330
    331
    332
    import java.awt.Color;
    import java.awt.Dimension;
    import java.awt.Font;
    import java.awt.FontMetrics;
    import java.awt.Graphics;
    import java.awt.Graphics2D;
    import java.awt.Point;
    import java.awt.event.MouseAdapter;
    import java.awt.event.MouseEvent;
    import java.awt.geom.Point2D;
    import java.awt.geom.Rectangle2D;
    import java.io.FileNotFoundException;
    import java.io.IOException;
    import java.util.ArrayList;
    import java.util.List;
    import javax.swing.JButton;
    import javax.swing.JFrame;
    import javax.swing.JList;
    import javax.swing.JPanel;
    import javax.swing.JScrollPane;
    import javax.swing.SwingConstants;
    import javax.swing.SwingUtilities;
    import org.apache.poi.EncryptedDocumentException;
    import org.apache.poi.openxml4j.exceptions.InvalidFormatException;
     
    public class Exemple extends JPanel  {
     JList liste = new JList();
     
    	private static final int MARGETOP = 50;
    	private static final int WIDTH = 100;
    	private static final int H = 60;
    	private static final int HEIGHT = 3 * H;
    	private static final int MARGIN = 5;
    	private static final int ARROW = 5;
     
    	private Rule[] rules = new Rule[5];
    	private List<Arrow> arrows = new ArrayList<>();
     
    	private int y = MARGETOP + 100/ 2;
    	private Arrow currentArrow; 
     
    	public Exemple() {
     
      liste.setFont(new Font("Engravers MT", Font.PLAIN, 11));
         JScrollPane jScrollPane6 = new javax.swing.JScrollPane();
    		String[] ruleNames = { "UE", "NodeB", "DRNC", "SRNC", "CN" };
    		int x = 0;
    		for (int i = 0; i < rules.length; i++, x += WIDTH) {
    			rules[i] = new Rule(ruleNames[i], x, WIDTH);
    		}
     
    		setPreferredSize(new Dimension(860, 800));
     
                    JButton jButton8 = new javax.swing.JButton();
    		MouseAdapter mouseAdapter;
                mouseAdapter = new MouseAdapter() {
     
                    @Override
                    public void mousePressed(MouseEvent e) {
                        currentArrow = createArrow(e.getPoint());
                        repaint();
                    }
     
                    @Override
                    public void mouseDragged(MouseEvent e) {
                        updateArrow(e.getPoint());
                        repaint();
                    }
     
                    @Override
                    public void mouseReleased(MouseEvent e) {
                    	 if ( currentArrow!=null ) {
                    	                    updateArrow(e.getPoint());
     
                    	                     JFrame parent = (JFrame) SwingUtilities.getWindowAncestor(Exemple.this); 
                    		             jliste b = null;
    									try {
    										b = new jliste(parent);
    									} catch (EncryptedDocumentException e1) {
    										// TODO Auto-generated catch block
    										e1.printStackTrace();
    									} catch (FileNotFoundException e1) {
    										// TODO Auto-generated catch block
    										e1.printStackTrace();
    									} catch (InvalidFormatException e1) {
    										// TODO Auto-generated catch block
    										e1.printStackTrace();
    									} catch (IOException e1) {
    										// TODO Auto-generated catch block
    										e1.printStackTrace();
    									}
     
     
                    		             String selection = b.getSelection();
     
                    	                     // attention selection pourrait être null si on ferme jliste sans sélection ! A toi de voir ce qu'il faut faire ou ne pas faire !!!
                    	                    currentArrow.setText(selection);
                    	                    saveArrow();
                    	 }
                    	}
     
                };
    		addMouseListener(mouseAdapter);
    		addMouseMotionListener(mouseAdapter);
     
    	}
     
    	protected int saveArrow() {
    		if (currentArrow != null && currentArrow.isValid()) {
    			arrows.add(currentArrow);
    			y += H;
     
    		}
     
    		currentArrow = null;
                    repaint(); 
    		return y;
    	}
     
    	private Arrow createArrow(Point point) {
    		for (Rule rule : rules) {
    			if (rule.contains(point)) {
    				return rule.createArrow(point, y);
    			}
    		}
    		return null;
    	}
     
    	private void updateArrow(Point point) {
    		if (currentArrow != null) {
    			for (Rule rule : rules) {
    				if (rule.contains(point)) {
    					rule.updateArrow(currentArrow, point);
     
    				}
    			}
    		}
    	}
     
    	@Override
    	public void paint(Graphics g) {
    		super.paint(g);
    		for (Rule rule : rules) {
    			rule.draw(g);
    		}
     
    		g.setColor(Color.BLACK);
    		for (Arrow arrow : arrows) {
    			arrow.draw(g);
    		}
     
    		g.setColor(Color.BLACK);
    		if (currentArrow != null) {
    			currentArrow.draw(g);
    		}
    	}
     
    	public static void main(String[] args) {
     
    		JFrame frame = new JFrame();
     
    		frame.add(new Exemple());
     
    		frame.pack();
    		frame.setLocationRelativeTo(null);
     
    		frame.setVisible(true);
     
     
    	}
     
    	public static class Arrow {
     
    		private int x;
    		private int xend;
    		private int y;
                    private String text;
     
    		public Arrow(int x, int y) {
    			this.x = x;
    			this.xend = x;
    			this.y = y;
     
    		}
     
            public void setText(String text) {
                this.text = text;
            }
     
    		public void draw(Graphics g) {
    			  if (isValid()) {
                    Graphics2D g2d = (Graphics2D) g;
     
                                    if(x<xend)
                                    {g2d.drawLine(x, y, xend, y);
     
                    g2d.drawLine(xend, y, xend - ARROW, y - ARROW);
                    g2d.drawLine(xend, y, xend - ARROW, y + ARROW);}
                                    else{
                                    g2d.drawLine(x, y, xend, y);
     
                    g2d.drawLine(xend, y, xend + ARROW, y + ARROW);
                    g2d.drawLine(xend, y, xend + ARROW, y - ARROW);}
           if ( text!=null ) {// si un texte à affiche
      int ytexte = (int)getStringLocation(g2d, new Rectangle2D.Double(x,y-ARROW,xend-x,ARROW*2), text, SwingConstants.CENTER, SwingConstants.CENTER).getY(); // on centre le texte en hauteur sur la flêche
       g.drawString( text, 460, ytexte ); // et bien on l'affiche tout simplement
                             }                         
     
    		}
                    }
    		public boolean isValid() {
    			return xend != x;
    		}
     
    		public void setEnd(int end) {
                         if (x>=45 && x<=55 && end>300 && end <=350){xend=350;}
                        else if(x>=145 && x<=155 && end>=300&& end <=350) {xend=350;}
                        else if(x>=245 && x<= 255 && end>300&&end<=350){xend=350;}
                        else if(x>=345 && x<=355 && end>350 && end <=450){xend=450;}
     
                        else if (x>=345 && x<=355 && end<100 && end >=50){xend=50;}
                        else if(x>=345 && x<=355 && end<200&& end <=150) {xend=150;}
                        else if(x>=345 && x<= 355 && end<300 && end>=250){xend=250;}
                        else if(x>=445 && x<=455 && end<400 && end >=350){xend=350;}
     
    		}
     
    	}
     
    	public static class Rule {
     
    		public static final int N = 4;
     
    		private final String name;
    		private final int start;
    		private final int width;
    		private Rectangle2D textBounds;
     
    		private Rectangle2D rectangle;
     
    		public Rule(String name, int start, int width) {
    			this.name = name;
    			this.start = start;
    			this.width = width;
    			this.rectangle = new Rectangle2D.Double(start, MARGETOP, start + width, MARGETOP + N * HEIGHT);
    		}
     
    		public Arrow createArrow(Point point, int y) {
    			if (point.getX()<55 && point.getX()>45){point=new Point(50, y);}
    			if (point.getX()<155 && point.getX()>145){point=new Point(150, y);}
    			if (point.getX()<255 && point.getX()>245){point=new Point(250, y);}
    			if (point.getX()<355 && point.getX()>345){point=new Point(350, y);}
    			if (point.getX()<455 && point.getX()>445){point=new Point(450, y);}
    			//return new Arrow(start + width / 2, y);
                            return new Arrow((int) point.getX(), y);
     
    		}
     
    		public void updateArrow(Arrow currentArrow, Point point) {	
                            currentArrow.setEnd((int) point.getX());
    		}
     
    		public boolean contains(Point point) {
    			return rectangle.contains(point);
    		}
     
    		public void draw(Graphics g) {
     
    			g.setColor(Color.BLACK);
     
    			int x = start + width / 2;
    			int y = MARGETOP;
     
    			if (textBounds == null) {
    				Rectangle2D stringBounds = g.getFontMetrics().getStringBounds("MMMM", g);
    				textBounds = new Rectangle2D.Double(x - stringBounds.getWidth() / 2 - MARGIN,
    						y - stringBounds.getHeight() - MARGIN, MARGIN * 2 + stringBounds.getWidth(),
    						MARGIN * 2 + stringBounds.getHeight());
    			}
    			Graphics2D g2d = ((Graphics2D) g);
    			g2d.draw(textBounds);
    			Point2D.Float p = getStringLocation(g2d, textBounds, name, SwingConstants.CENTER, SwingConstants.CENTER);
    			g2d.drawString(name, (float) p.getX(), (float) p.getY());
     
    			for (int i = 0; i < N; i++, y += HEIGHT) {
    				g2d.drawLine(x, y + MARGIN, x, y + HEIGHT - MARGIN);
    			}
    		}
    	}
            public void dessiner(Graphics g,int h) throws IOException, FileNotFoundException, EncryptedDocumentException, InvalidFormatException{
     
            g.drawString("fff",460,h);}
     
    	public static Point2D.Float getStringLocation(Graphics2D g2d, Rectangle2D bounds, String string, int halign,
    			int valign) {
     
    		final FontMetrics fontMetrics = g2d.getFontMetrics();
    		final Rectangle2D textBounds = fontMetrics.getStringBounds(string, g2d);
    		final double textWidth = textBounds.getWidth();
     
    		double x, y;
     
    		switch (halign) {
    		case SwingConstants.LEFT:
    			x = bounds.getX();
    			break;
    		case SwingConstants.RIGHT:
    			x = bounds.getX() + bounds.getWidth() - textWidth;
    			break;
    		case SwingConstants.CENTER:
    		default:
    			x = bounds.getX() + (bounds.getWidth() - textWidth) / 2;
    			break;
    		}
    		switch (valign) {
    		case SwingConstants.TOP:
    			y = bounds.getY() + fontMetrics.getAscent() - fontMetrics.getDescent();
    			break;
    		case SwingConstants.BOTTOM:
    			y = bounds.getY() + bounds.getHeight() - fontMetrics.getDescent();
    			break;
    		case SwingConstants.CENTER:
    		default:
    			y = bounds.getY() + bounds.getHeight() / 2 - ((fontMetrics.getAscent() + fontMetrics.getDescent()) / 2)
    					+ fontMetrics.getAscent();
    			break;
    		}
     
    		return new Point2D.Float((float) x, (float) y);
    	}
     
    }

  7. #47
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Non.

    Mais tu peux simplement sauvegarder le dessin du panel dans une image(JPanel.createImage(largeur,hauteur)), ou dessiner directement dans l'image (ce qui est exactement la même chose que de dessiner dans un panel (sauf la création initiale). Pour créer une image à partir d'un panel, il faut absolument qu'il soit affiché. C'est pour ça que la deuxième méthode est souvent plus utile, surtout s'il faut pouvoir la réafficher.
    Une troisième solution est de stocker tout ce qu'on utilise pour faire le dessin (dans votre cas, la liste des flêches). L'avantage de cette troisième méthode est de permettre de modifier le dessin après qu'on l'ait réaffiché. Dans les deux premiers cas, ce qui a été sauvegarder c'est une image bitmap, des pixels, et il est beaucoup plus difficile de faire des modifications fonctionnelles (déplacer une flche par exemple, ou changer le texte d'une flêche...)...parce qu'on a perdu toute notion de modèle. Avec ce troisième mode on peut facilement modéliser un fichier qui représente les objets en mémoire,, ce qui permet de sauvegarder le travail et de le modifier ultérieurement)
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  8. #48
    Nouveau membre du Club
    Homme Profil pro
    ingénieur télécom
    Inscrit en
    Février 2017
    Messages
    54
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : Tunisie

    Informations professionnelles :
    Activité : ingénieur télécom
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Février 2017
    Messages : 54
    Points : 27
    Points
    27
    Par défaut
    mais comment stocker tout ce qu'on a utilisé , est-ce qu'il ya des méthodes pour ça ?
    je veux vous interroger aussi , est ce qu'il ya une methode pour par exemple effacer la derniere fleche dessiné avec les touches Ctrl+Z prédéfini dans java ?

  9. #49
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par RabehBoubakri Voir le message
    mais comment stocker tout ce qu'on a utilisé , est-ce qu'il ya des méthodes pour ça ?
    Il y a différent moyen oui. Plus ou moins direct en Java. La serialisation par exemple (qui va stocker une instance de classe en xml, mais qui a l'inconvénient d'adhérer fortement à la structure le la classe : en cas de changement, il se peut que un ancien xml ne puisse plus être chargé.
    Ensuite, il y a modélisation que tu peux faire entièrement toi-même, en xml, ou binaire, on ce que tu veux (stockee une flêche, c'est stocker un x, un y et un nom), ou la modélisation via des API de mappings, etc.

    Citation Envoyé par RabehBoubakri Voir le message
    je veux vous interroger aussi , est ce qu'il ya une methode pour par exemple effacer la derniere fleche dessiné avec les touches Ctrl+Z prédéfini dans java ?
    Non. Mais ce n'est pas très compliqué : en dehors de la gestion du clavier elle-même (que tu peux faire avec un KeyEventDispatcher), il suffit de supprimer le dernier Arrow ajouté à la liste.
    Mais dans un cadre général, faire un système de undo/redo est un tout petit peu plus compliqué, parce qu'il faut mettre en place une liste d'action réversible. Il ne s'agit pas de gérer l'annulation d'un enchainement d'actions avec des ifs dans tous les sens comme vous avez l'habitude...
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  10. #50
    Membre régulier
    Femme Profil pro
    Étudiant
    Inscrit en
    Février 2017
    Messages
    108
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 31
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2017
    Messages : 108
    Points : 89
    Points
    89
    Par défaut
    ok,mercii encore
    j'ai corrigé l'erreur puisque j'ai fait des parcours inutiles..

  11. #51
    Membre régulier
    Femme Profil pro
    Étudiant
    Inscrit en
    Février 2017
    Messages
    108
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 31
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2017
    Messages : 108
    Points : 89
    Points
    89
    Par défaut
    Citation Envoyé par joel.drigo;9096213[COLOR="#0000CD"
    ]Il y a différent moyen oui. Plus ou moins direct en Java. La serialisation par exemple (qui va stocker une instance de classe en xml, mais qui a l'inconvénient d'adhérer fortement à la structure le la classe : en cas de changement, il se peut que un ancien xml ne puisse plus être chargé.
    Ensuite, il y a modélisation que tu peux faire entièrement toi-même, en xml, ou binaire, on ce que tu veux (stockee une flêche, c'est stocker un x, un y et un nom), ou la modélisation via des API de mappings, etc.[/COLOR]
    S'il vous plait; pouvez vous nous diriger un peu comment faire ça.j'ai pas trouvé comment enregistrer un senario déja fait en fait tout le panel pour que je puisse le modifier àprés..quand je vais cliquer sur edit ce panel (editeur graphique)de sénario va s'afficher

    Non. Mais ce n'est pas très compliqué : en dehors de la gestion du clavier elle-même (que tu peux faire avec un KeyEventDispatcher), il suffit de supprimer le dernier Arrow ajouté à la liste.
    Mais dans un cadre général, faire un système de undo/redo est un tout petit peu plus compliqué, parce qu'il faut mettre en place une liste d'action réversible. Il ne s'agit pas de gérer l'annulation d'un enchainement d'actions avec des ifs dans tous les sens comme vous avez l'habitude...
    On est des débutants c'est notre premier projet.. on n'a pas beaucoup d'idées pour le langage java..pour l'enchainement d'actions avec des ifs on n'a pas trouvé des solutions pour ça.on a forcé de dessiner les fleches dans des intervalles connues puisqu'on sait les echanges des fleches entre les entités comment..mais on n'a pas trouvé honnetement que de faire ça..
    merci encore

  12. #52
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Comme je te l'ai dit, si tu n'as prévu qu'un seul type d'action (créer une flêche, c'est-à-dire créer une instance de Arrow et l'ajouter à une liste), tu peux simplement annuler en supprimant la dernière flêche ajoutée de la liste (un repaint() ensuite et la dernière flêche créée est annulée). Pour supprimer le dernière élement d'une List : list.remove(list.size()-1). Eventuellement, on peut simplifier en utilisant une pile, soit une Deque (par exemple une ArrayDeque), au lieu d'une List : poiur ajouter, au lieu de add(currentArrow), on utilise push(currentArrow), et pour supprimer la dernière flêche ajoutée, il suffit d'appeler la méthode pop() de Deque. Ce n'est donc pas plus compliqué que d'utiliser une ArrayList.

    Maintenant, si tu as plusieurs types d'action, qui ne consiste pas à ajouter un élément à une liste dont il suffit de supprimer le dernier, ça va devenir très compliqué de gérer l'ordre des annulations. Pour simplifier ça, on va utiliser une classe intermédiaire, dont on pourra stocker les actions dans une liste, ou une pile, ce qui permettra de gérer facilement l'ordre d'annulation (annuler le dernier, puis l'avant dernier, etc.).

    Cette classe intermédiare, on appelle ça justement une action. Tu peux simplement faire une interface toute simple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    public interface Action {
        void run();
    }
    Pour faire l'action concrète de création d'une flêche, il suffit que ton action de création de flêche fasse exactement ce que tu fais actuellement en dehors de l'action pour créer une flêche. Actuellement pour créer une flêche, il faut appeler la méthode saveArrow(). L'action de création pourrait donc s'écrire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    public class createArrowAction implements Action {
         public void run() {
              saveArrow();
         }
    }
    Il faudra que cette classe soit interne à la classe où se trouve saveArrow() pour pouvoir l'appeler.

    Mais ce qui importe pour l'annulation, c'est de faire l'annulation. Pour faire l'annulation donc, si on part sur une solution de List, comme dit précédemment, il suffit de faire arrows.remove(arrows.size()-1). On peut simplifier dans ton cas à ne faire qu'une action d'annulation (si tu voulais faire de undo/redo, il faudra complexifier en faisant une action réversive, soit une action d'annulation associée à une action de recréation (de ce qui vient d'être annulé).

    Donc si tu fais dans ta classe une méthode comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    public void cancelLastArrow() {
           if ( !arrows.isEmpty() ) { // on ne peut annuler que s'il existe quelque chose dans la liste
              arrows.remove(arrows.size()-1);
              repaint(); // pour raffraichir l'affichage
          }
    }
    Il y a en plus éventuellement le souci de la gestion du y, donc pour complèter :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    public void cancelLastArrow() {
           if ( !arrows.isEmpty() ) { // on ne peut annuler que s'il existe quelque chose dans la liste
              arrows.remove(arrows.size()-1);
              y -= H;
              repaint(); // pour raffraichir l'affichage
          }
    }
    Donc pour faire une action qui fait l'annulation, il suffit de faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    public class CancelLastArrowAction implements Action {
         public void run() {
              cancelLastArrow();
         }
    }
    Il suffit donc de stocker des instances d'action dans une liste, ou une pile. Pour annuler, on récupère la dernière action dans la liste ou la pile, et on appelle sa méthode run().

    Il suffit donc d'ajouter à ta classe une [c]Deque<Action> actions = new ArrayDeque<>();[/code]
    de modifier saveArrow() pour que l'action d'annulation soit créer :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    protected int saveArrow() {
    		if (currentArrow != null && currentArrow.isValid()) {
    			arrows.add(currentArrow);
    			y += H;
                            actions.push(new CancelLastArrow()); // on stocke l'action d'annulation de ce qu'on vient de faire
    		}
     
    		currentArrow = null;
                    repaint(); 
    		return y;
    	}
    et pour annuler, on fera tout simplement :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    if ( !actions.isEmpty() ) {
         actions.pop().run();
    }
    Avec Java 8 est apparu ce qu'on appelle une expression lambda : c'est une expression qui permet en quelque sorte d'implémenter à la volée une interface.
    On peut donc simplifier ce qu'on vient faire comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    protected int saveArrow() {
    		if (currentArrow != null && currentArrow.isValid()) {
    			arrows.add(currentArrow);
    			y += H;
                            actions.push(()-> cancelLastArrow()); // on stocke l'action d'annulation de ce qu'on vient de faire
    		}
     
    		currentArrow = null;
                    repaint(); 
    		return y;
    	}
    On n'a plus besoin de classe CancelLastArrow.

    Si je reprends l'exemple que je vous avais donné et que j'y intègre le résumé de tout ça, ça donnera ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
    194
    195
    196
    197
    198
    199
    200
    201
    202
    203
    204
    205
    206
    207
    208
    209
    210
    211
    212
    213
    214
    215
    216
    217
    218
    219
    220
    221
    222
    223
    224
    225
    226
    227
    228
    229
    230
    231
    232
    233
    234
    235
    236
    237
    238
    239
    240
    241
    242
    243
    244
    245
    246
    247
    248
    249
    250
    251
    252
    253
    254
    255
    256
    257
    258
    259
    260
    261
    262
    263
    264
    265
    266
    267
    268
    269
    270
    271
    272
    273
    274
    275
    276
    277
    278
    279
    280
    281
    282
    283
    284
    285
    286
    287
    288
    289
    290
    291
    public class Exemple extends JPanel {
     
    	private static final int MARGETOP = 50;
    	private static final int WIDTH = 100;
    	private static final int H = 60;
    	private static final int HEIGHT = 3 * H;
    	private static final int MARGIN = 5;
    	private static final int ARROW = 5;
     
    	private Rule[] rules = new Rule[5];
    	private List<Arrow> arrows = new ArrayList<>();
    	private Deque<Action> actions = new ArrayDeque<>(); // stocke les actions d'annulation
     
    	private int y = MARGETOP + H / 2;
    	private Arrow currentArrow;
     
    	public Exemple() {
     
    		String[] ruleNames = { "UE", "NodeB", "SRNC", "DRNC", "CN" };
    		int x = 0;
    		for (int i = 0; i < rules.length; i++, x += WIDTH) {
    			rules[i] = new Rule(ruleNames[i], x, WIDTH);
    		}
     
    		setPreferredSize(new Dimension(x, MARGETOP + Rule.N * HEIGHT));
     
    		MouseAdapter mouseAdapter = new MouseAdapter() {
     
    			@Override
    			public void mousePressed(MouseEvent e) {
    				currentArrow = createArrow(e.getPoint());
    				repaint();
    			}
     
    			@Override
    			public void mouseDragged(MouseEvent e) {
    				updateArrow(e.getPoint());
    				repaint();
    			}
     
    			@Override
    			public void mouseReleased(MouseEvent e) {
    				updateArrow(e.getPoint());
    				saveArrow();
    			}
     
    		};
    		addMouseListener(mouseAdapter);
    		addMouseMotionListener(mouseAdapter);
     
                    // pour réagir au CTRL-Z pour annuler la dernière flêche créée
    		KeyboardFocusManager.getCurrentKeyboardFocusManager().addKeyEventDispatcher(new KeyEventDispatcher() {
     
    			@Override
    			public boolean dispatchKeyEvent(KeyEvent e) {
    				if ( e.getID()==KeyEvent.KEY_PRESSED && e.getKeyCode()==KeyEvent.VK_Z && (e.getModifiers() & KeyEvent.CTRL_MASK) != 0 ) {
    					if ( !actions.isEmpty() ) {
    						actions.pop().run();
    						return true;
    					}
    				}
    				return false;
    			}
    		});
     
    	}
     
    	protected void saveArrow() {
    		if (currentArrow != null && currentArrow.isValid()) {
    			arrows.add(currentArrow);
    			y += H;
    			actions.push(()->cancelLastArrow()); // on stocke l'action d'annulation de la dernière flêche créée
    		}
    		currentArrow = null;
    		repaint();
    	}
     
            // supprime la dernière flêche créé et remet le y à la position précédente
    	protected void cancelLastArrow() {
    		if ( !arrows.isEmpty() ) {
    			arrows.remove(arrows.size()-1);
    			y -= H;
    			repaint();
    		}
    	}
     
    	private Arrow createArrow(Point point) {
    		for (Rule rule : rules) {
    			if (rule.contains(point)) {
    				return rule.createArrow(point, y);
    			}
    		}
    		return null;
    	}
     
    	private void updateArrow(Point point) {
    		if (currentArrow != null) {
    			for (Rule rule : rules) {
    				if (rule.contains(point)) {
    					rule.updateArrow(currentArrow, point);
    				}
    			}
    		}
    	}
     
    	@Override
    	public void paint(Graphics g) {
    		super.paint(g);
    		for (Rule rule : rules) {
    			rule.draw(g);
    		}
     
    		g.setColor(Color.BLUE);
    		for (Arrow arrow : arrows) {
    			arrow.draw(g);
    		}
     
    		g.setColor(Color.RED);
    		if (currentArrow != null) {
    			currentArrow.draw(g);
    		}
    	}
     
    	public static void main(String[] args) {
     
    		JFrame frame = new JFrame();
     
    		frame.add(new Exemple());
     
    		frame.pack();
    		frame.setLocationRelativeTo(null);
     
    		frame.setVisible(true);
     
    	}
     
    	public static class Arrow {
     
    		private int x;
    		private int xend;
    		private int y;
     
    		public Arrow(int x, int y) {
    			this.x = x;
    			this.xend = x;
    			this.y = y;
    		}
     
    		public void draw(Graphics g) {
    			if (isValid()) {
    				Graphics2D g2d = (Graphics2D) g;
    				g2d.drawLine(x, y, xend, y);
    				g2d.drawLine(xend, y, xend - ARROW, y - ARROW);
    				g2d.drawLine(xend, y, xend - ARROW, y + ARROW);
    			}
    		}
     
    		public boolean isValid() {
    			return xend != x;
    		}
     
    		public void setEnd(int end) {
    			if (end <= x) {
    				xend = x;
    			} else if (end - x >= 2 * WIDTH) {
    				xend = x + 2 * WIDTH;
    			} else if (end - x <= WIDTH) {
    				xend = x + WIDTH;
    			}
    		}
     
    	}
     
    	public static class Rule {
     
    		public static final int N = 4;
     
    		private final String name;
    		private final int start;
    		private final int width;
    		private Rectangle2D textBounds;
     
    		private Rectangle2D rectangle;
     
    		public Rule(String name, int start, int width) {
    			this.name = name;
    			this.start = start;
    			this.width = width;
    			this.rectangle = new Rectangle2D.Double(start, MARGETOP, start + width, MARGETOP + N * HEIGHT);
    		}
     
    		public Arrow createArrow(Point point, int y) {
    			return new Arrow(start + width / 2, y);
    		}
     
    		public void updateArrow(Arrow currentArrow, Point point) {
    			currentArrow.setEnd(start + width / 2);
    		}
     
    		public boolean contains(Point point) {
    			return rectangle.contains(point);
    		}
     
    		public void draw(Graphics g) {
     
    			g.setColor(Color.BLACK);
     
    			int x = start + width / 2;
    			int y = MARGETOP;
     
    			if (textBounds == null) {
    				Rectangle2D stringBounds = g.getFontMetrics().getStringBounds("MMMM", g);
    				textBounds = new Rectangle2D.Double(x - stringBounds.getWidth() / 2 - MARGIN,
    						y - stringBounds.getHeight() - MARGIN, MARGIN * 2 + stringBounds.getWidth(),
    						MARGIN * 2 + stringBounds.getHeight());
    			}
    			Graphics2D g2d = ((Graphics2D) g);
    			g2d.draw(textBounds);
    			Point2D.Float p = getStringLocation(g2d, textBounds, name, SwingConstants.CENTER, SwingConstants.CENTER);
    			g2d.drawString(name, (float) p.getX(), (float) p.getY());
     
    			for (int i = 0; i < N; i++, y += HEIGHT) {
    				g2d.drawLine(x, y + MARGIN, x, y + HEIGHT - MARGIN);
    			}
     
    		}
     
    	}
     
    	/**
             * méthode qui permet de placer un texte relativement à un rectangle : elle
             * calcule la position à utiliser avec la méthode Graphics.drawString()
             * 
             * @param g2d
             *            contexte graphique
             * @param bounds
             *            bounds du rectangle
             * @param string
             *            le texte
             * @param halign
             *            le type d'alignement horizontal parmi SwingContants.LEFT,
             *            SwingConstants.CENTER ou SwingConstants.RIGHT
             * @param valign
             *            le type d'alignement vertical parmi SwingContants.TOP,
             *            SwingConstants.CENTER ou SwingConstants.BOTTOM
             * @return
             */
    	public static Point2D.Float getStringLocation(Graphics2D g2d, Rectangle2D bounds, String string, int halign,
    			int valign) {
     
    		final FontMetrics fontMetrics = g2d.getFontMetrics();
    		final Rectangle2D textBounds = fontMetrics.getStringBounds(string, g2d);
    		final double textWidth = textBounds.getWidth();
     
    		double x, y;
     
    		switch (halign) {
    		case SwingConstants.LEFT:
    			x = bounds.getX();
    			break;
    		case SwingConstants.RIGHT:
    			x = bounds.getX() + bounds.getWidth() - textWidth;
    			break;
    		case SwingConstants.CENTER:
    		default:
    			x = bounds.getX() + (bounds.getWidth() - textWidth) / 2;
    			break;
    		}
    		switch (valign) {
    		case SwingConstants.TOP:
    			y = bounds.getY() + fontMetrics.getAscent() - fontMetrics.getDescent();
    			break;
    		case SwingConstants.BOTTOM:
    			y = bounds.getY() + bounds.getHeight() - fontMetrics.getDescent();
    			break;
    		case SwingConstants.CENTER:
    		default:
    			y = bounds.getY() + bounds.getHeight() / 2 - ((fontMetrics.getAscent() + fontMetrics.getDescent()) / 2)
    					+ fontMetrics.getAscent();
    			break;
    		}
     
    		return new Point2D.Float((float) x, (float) y);
    	}
     
    	@FunctionalInterface
    	private static interface Action {
    		void run();
    	}
     
    }
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  13. #53
    Membre régulier
    Femme Profil pro
    Étudiant
    Inscrit en
    Février 2017
    Messages
    108
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 31
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2017
    Messages : 108
    Points : 89
    Points
    89
    Par défaut
    Bonjour Joel,

    c'est toujours au sujet de mon application qui permet d'afficher des flèches et de sélectionner un message pour l'afficher juste en face.
    j'aimerais bien pouvoir stocker tous les messages affichés dans une liste mais lorsque j'essaie de parcourir la liste rien ne s'affiche.
    C'est la méthode getNOMsel() qui doit le faire.
    Voilà mon code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
    194
    195
    196
    197
    198
    199
    200
    201
    202
    203
    204
    205
    206
    207
    208
    209
    210
    211
    212
    213
    214
    215
    216
    217
    218
    219
    220
    221
    222
    223
    224
    225
    226
    227
    228
    229
    230
    231
    232
    233
    234
    235
    236
    237
    238
    239
    240
    241
    242
    243
    244
    245
    246
    247
    248
    249
    250
    251
    252
    253
    254
    255
    256
    257
    258
    259
    260
    261
    262
    263
    264
    265
    266
    267
    268
    269
    270
    271
    272
    273
    274
    275
    276
    277
    278
    279
    280
    281
    282
    283
    284
    285
    286
    287
    288
    289
    290
    291
    292
    293
    294
    295
    296
    297
    298
    299
    300
    301
    302
    303
    304
    305
    306
    307
    308
    309
    310
    311
    312
    313
    314
    315
    316
    317
    318
    319
    320
    321
    322
    323
    324
    325
    326
    327
    328
    329
    330
    331
    332
    333
    334
    335
    336
    337
    338
    339
    340
    341
    342
    343
    344
    345
    346
    347
    348
    349
    350
    351
    352
    353
    354
    355
    356
    357
    358
    359
    360
    361
    362
    363
    364
    365
    366
    367
    368
    369
    370
    371
    372
    373
    374
    375
    376
    377
    378
    379
    380
    381
    382
    383
    384
    385
    386
    387
    388
    389
    390
    391
    392
    393
    394
    395
    396
    397
    398
    399
    400
    401
    402
    403
    404
    405
    406
    407
    408
    409
    410
    411
    412
    413
    414
    415
    416
    417
    418
     
    /*
     * To change this license header, choose License Headers in Project Properties.
     * To change this template file, choose Tools | Templates
     * and open the template in the editor.
     */
     
    /**
     *
     * @author W.S.I
     */import java.awt.Color;
    import java.awt.Dimension;
    import java.awt.Font;
    import java.awt.FontMetrics;
    import java.awt.Graphics;
    import java.awt.Graphics2D;
    import java.awt.Point;
    import java.awt.event.MouseAdapter;
    import java.awt.event.MouseEvent;
    import java.awt.geom.Point2D;
    import java.awt.geom.Rectangle2D;
    import java.io.FileNotFoundException;
    import java.io.IOException;
    import java.util.ArrayList;
    import java.util.Iterator;
    import java.util.List;
    import java.util.logging.Level;
    import java.util.logging.Logger;
    import javax.swing.JButton;
     
    import javax.swing.JFrame;
    import javax.swing.JList;
    import javax.swing.JOptionPane;
    import javax.swing.JPanel;
    import javax.swing.JScrollPane;
    import javax.swing.SwingConstants;
    import javax.swing.SwingUtilities;
    import javax.swing.event.ListSelectionEvent;
    import javax.swing.event.ListSelectionListener;
    import org.apache.poi.EncryptedDocumentException;
    import org.apache.poi.openxml4j.exceptions.InvalidFormatException;
     
    public class Exemple extends JPanel  {
     JList liste = new JList();
     String nom;
     
     //Exemple panel;
     
    	private static final int MARGETOP = 50;
    	private static final int WIDTH = 100;
    	private static final int H = 60;
    	private static final int HEIGHT = 3 * H;
    	private static final int MARGIN = 5;
    	private static final int ARROW = 5;
     
    	private Rule[] rules = new Rule[5];
    	private List<Arrow> arrows = new ArrayList<>();
      ArrayList<String> lisnom=new ArrayList<>();
    	private int y = MARGETOP + H / 2;
    	private Arrow currentArrow; 
     
    	public Exemple() {
     //JButton jButton8 = new javax.swing.JButton();
      liste.setFont(new Font("Engravers MT", Font.PLAIN, 11));
         JScrollPane jScrollPane6 = new javax.swing.JScrollPane();
    		String[] ruleNames = { "UE", "NodeB", "DRNC", "SRNC", "CN" };
    		int x = 0;
    		for (int i = 0; i < rules.length; i++, x += WIDTH) {
    			rules[i] = new Rule(ruleNames[i], x, WIDTH);
    		}
     
    		setPreferredSize(new Dimension(860, 768));
     
                    JButton jButton8 = new javax.swing.JButton();
    		MouseAdapter mouseAdapter;
                mouseAdapter = new MouseAdapter() {
     
                    @Override
                    public void mousePressed(MouseEvent e) {
                        currentArrow = createArrow(e.getPoint());
                        repaint();
                    }
     
                    @Override
                    public void mouseDragged(MouseEvent e) {
                        updateArrow(e.getPoint());
                        repaint();
                    }
     
                    @Override
                    public void mouseReleased(MouseEvent e) {
                      if ( currentArrow!=null ) {
                        updateArrow(e.getPoint());
                      // int z=e.getY();
     
     
                           if(e.getX()>=45&&e.getX()<=455 )
     
                                                        try {
                                      // Point mouse = e.getPoint();
     
                        JFrame parent = (JFrame) SwingUtilities.getWindowAncestor(Exemple.this);  
       // SwingUtilities.convertPointToScreen(mouse,Exemple.this); // permet de connaitre la fenêtre dans laquelle le composant se trouve (panel, c'est la référence du composant où se trouve le MouseListener original (celui qui produit mouseReleased())
    jliste    b= new jliste(parent);
    String selection = b.getSelection();
     
    currentArrow.setText(selection);
       String nom=currentArrow.getText();
     
     
                                                        // System.out.println(nom);
     
    saveArrow();
     
     
    getNOMsel(); 
     
    for(Iterator it=lisnom.iterator(); it.hasNext();) 
     
                System.out.println(it.next());
     
     
                        } catch (IOException ex) {
                            Logger.getLogger(Exemple.class.getName()).log(Level.SEVERE, null, ex);
                        } catch (EncryptedDocumentException ex) {
                            Logger.getLogger(Exemple.class.getName()).log(Level.SEVERE, null, ex);
                        } catch (InvalidFormatException ex) {
                            Logger.getLogger(Exemple.class.getName()).log(Level.SEVERE, null, ex);
                        }
     
     
     
     
     
     
     
                    }
     
                    }  };
    		addMouseListener(mouseAdapter);
    		addMouseMotionListener(mouseAdapter);
     
                }
     
    	protected int saveArrow() {
    		if (currentArrow != null && currentArrow.isValid()) {
    			arrows.add(currentArrow);
    			y += H;
     
    		}
    		currentArrow = null;
                    repaint(); 
                    return y;
    	}
            ArrayList<String> getNOMsel(){if (currentArrow != null && currentArrow.isValid()) {
    			String nom=newExemple().getNom();
    			lisnom.add(nom);
     
            }	
           currentArrow = null;
            return lisnom;}
     
    	private Arrow createArrow(Point point) {
    		for (Rule rule : rules) {
    			if (rule.contains(point)) {
    				return rule.createArrow(point, y);
    			}
    		}
    		return null;
    	}
     
    	private void updateArrow(Point point) {
    		if (currentArrow != null) {
    			for (Rule rule : rules) {
    				if (rule.contains(point)) {
    					rule.updateArrow(currentArrow, point);
     
    				}
    			}
    		}
    	}
     
    	@Override
    	public void paint(Graphics g) {
    		super.paint(g);
    		for (Rule rule : rules) {
    			rule.draw(g);
    		}
     
    		g.setColor(Color.BLACK);
    	for (Arrow arrow : arrows) {
    			arrow.draw(g);
    		}
     
    		g.setColor(Color.BLACK);
    		if (currentArrow != null) {
    			currentArrow.draw(g);
    		}
    	}
     
    	public static void main(String[] args) throws IOException, FileNotFoundException, EncryptedDocumentException, InvalidFormatException {
     
    		JFrame frame = new JFrame();
     
    		frame.add(new Exemple());
     
    		frame.pack();
    		frame.setLocationRelativeTo(null);
     
    		frame.setVisible(true);
     
     
     
    	}
     	public static class Arrow {
     
    		private int x;
    		private int xend;
    		private int y;
                    private String text;
     
    		public Arrow(int x, int y) {
    			this.x = x;
    			this.xend = x;
    			this.y = y;
     
    		}
     
            public void setText(String text) {
                this.text = text;
            }
     
            public String getText() {
                return text;
            }
     
     
    		public void draw(Graphics g) {
    			  if (isValid()) {
                    Graphics2D g2d = (Graphics2D) g;
     
                                    if(x<xend)
                                    {g2d.drawLine(x, y, xend, y);
     
                    g2d.drawLine(xend, y, xend - ARROW, y - ARROW);
                    g2d.drawLine(xend, y, xend - ARROW, y + ARROW);}
                                    else{
                                    g2d.drawLine(x, y, xend, y);
     
                    g2d.drawLine(xend, y, xend + ARROW, y + ARROW);
                    g2d.drawLine(xend, y, xend + ARROW, y - ARROW);}
           if ( text!=null ) {// si un texte à affiche
       int ytexte = (int)getStringLocation(g2d, new Rectangle2D.Double(x,y-ARROW,xend-x,ARROW*2), text,SwingConstants.CENTER, SwingConstants.CENTER).getY(); // on centre le texte en hauteur sur la flêche
       g.drawString( text, 460, ytexte ); // et bien on l'affiche tout simplement
                             }                         
     
    		}
                    }
    		public boolean isValid() {
    			return xend != x;
    		}
     
    		public void setEnd(int end) {
                         if (x>=45 && x<=55 && end>300 && end <=350){xend=350;}
                        else if(x>=145 && x<=155 && end>=300&& end <=350) {xend=350;}
                        else if(x>=245 && x<= 255 && end>300&&end<=350){xend=350;}
                        else if(x>=345 && x<=355 && end>350 && end <=450){xend=450;}
     
                        else if (x>=345 && x<=355 && end<100 && end >=50){xend=50;}
                        else if(x>=345 && x<=355 && end<200&& end <=150) {xend=150;}
                        else if(x>=345 && x<= 355 && end<300 && end>=250){xend=250;}
                        else if(x>=445 && x<=455 && end<400 && end >=350){xend=350;}
     
    		}
     
    	}
     
    	public static class Rule {
     
    		public static final int N = 4;
     
    		private final String name;
    		private final int start;
    		private final int width;
    		private Rectangle2D textBounds;
     
    		private Rectangle2D rectangle;
     
    		public Rule(String name, int start, int width) {
    			this.name = name;
    			this.start = start;
    			this.width = width;
    			this.rectangle = new Rectangle2D.Double(start, MARGETOP, start + width, MARGETOP + N * HEIGHT);
    		}
     
    		public Arrow createArrow(Point point, int y) {
    			if (point.getX()<55 && point.getX()>45){point=new Point(50, y);}
    			if (point.getX()<155 && point.getX()>145){point=new Point(150, y);}
    			if (point.getX()<255 && point.getX()>245){point=new Point(250, y);}
    			if (point.getX()<355 && point.getX()>345){point=new Point(350, y);}
    			if (point.getX()<455 && point.getX()>445){point=new Point(450, y);}
    			//return new Arrow(start + width / 2, y);
                            return new Arrow((int) point.getX(), y);
     
    		}
     
    		public void updateArrow(Arrow currentArrow, Point point) {
    			//currentArrow.setEnd(start + width / 2);
                            currentArrow.setEnd((int) point.getX());
                          //  String name = JOptionPane.showInputDialog("Label du Message");
    		}
     
    		public boolean contains(Point point) {
    			return rectangle.contains(point);
    		}
     
    		public void draw(Graphics g) {
     
    			g.setColor(Color.BLACK);
     
    			int x = start + width / 2;
    			int y = MARGETOP;
     
    			if (textBounds == null) {
    				Rectangle2D stringBounds = g.getFontMetrics().getStringBounds("MMMM", g);
    				textBounds = new Rectangle2D.Double(x - stringBounds.getWidth() / 2 - MARGIN,
    						y - stringBounds.getHeight() - MARGIN, MARGIN * 2 + stringBounds.getWidth(),
    						MARGIN * 2 + stringBounds.getHeight());
    			}
    			Graphics2D g2d = ((Graphics2D) g);
    			g2d.draw(textBounds);
    			Point2D.Float p = getStringLocation(g2d, textBounds, name, SwingConstants.CENTER, SwingConstants.CENTER);
    			g2d.drawString(name, (float) p.getX(), (float) p.getY());
     
    			for (int i = 0; i < N; i++, y += HEIGHT) {
    				g2d.drawLine(x, y + MARGIN, x, y + HEIGHT - MARGIN);
    			}
     
    		}
     
    	}
     
     
    	/**
             * méthode qui permet de placer un texte relativement à un rectangle : elle
             * calcule la position à utiliser avec la méthode Graphics.drawString()
             * 
             * @param g2d
             *            contexte graphique
             * @param bounds
             *            bounds du rectangle
             * @param string
             *            le texte
             * @param halign
             *            le type d'alignement horizontal parmi SwingContants.LEFT,
             *            SwingConstants.CENTER ou SwingConstants.RIGHT
             * @param valign
             *            le type d'alignement vertical parmi SwingContants.TOP,
             *            SwingConstants.CENTER ou SwingConstants.BOTTOM
             * @return
             */
    	public static Point2D.Float getStringLocation(Graphics2D g2d, Rectangle2D bounds, String string, int halign,
    			int valign) {
     
    		final FontMetrics fontMetrics = g2d.getFontMetrics();
    		final Rectangle2D textBounds = fontMetrics.getStringBounds(string, g2d);
    		final double textWidth = textBounds.getWidth();
     
    		double x, y;
     
    		switch (halign) {
    		case SwingConstants.LEFT:
    			x = bounds.getX();
    			break;
    		case SwingConstants.RIGHT:
    			x = bounds.getX() + bounds.getWidth() - textWidth;
    			break;
    		case SwingConstants.CENTER:
    		default:
    			x = bounds.getX() + (bounds.getWidth() - textWidth) / 2;
    			break;
    		}
    		switch (valign) {
    		case SwingConstants.TOP:
    			y = bounds.getY() + fontMetrics.getAscent() - fontMetrics.getDescent();
    			break;
    		case SwingConstants.BOTTOM:
    			y = bounds.getY() + bounds.getHeight() - fontMetrics.getDescent();
    			break;
    		case SwingConstants.CENTER:
    		default:
    			y = bounds.getY() + bounds.getHeight() / 2 - ((fontMetrics.getAscent() + fontMetrics.getDescent()) / 2)
    					+ fontMetrics.getAscent();
    			break;
    		}
     
    		return new Point2D.Float((float) x, (float) y);
    	}
     public ArrayList<String> getlist() {
           Exemple ex=new Exemple();
     
     
     
           String tex=ex.getNom();
           ArrayList<String> lis=new ArrayList<String>();
           lis.add(tex);
           for(Iterator it=lis.iterator(); it.hasNext();) 
     
                System.out.println(it.next());
     
     return lis;
     }
     
        public String getNom() {
            return nom;
        }
     
    }
    merci d'avance

  14. #54
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Salut,

    Premièrement, ce serait mieux de montrer du code qui compile, parce que là, c'est évident, tu ne peux même pas lancer le programme, donc forcément "rien" ne s'affiche...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    ArrayList<String> getNOMsel(){if (currentArrow != null && currentArrow.isValid()) {
    			String nom=newExemple().getNom();
    			lisnom.add(nom);
     
            }
    Ne risque pas de compiler :
    1. on devrait avoir un return d'une arrayList ! Y'en n'a pas ! Ça ne compile pas !
    2. c'est quoi newExemple(), c'est où ? je ne vois aucune méthode qui s'appelle comme ça...


    En supposant que ça compile (que tu aies fait les corrections nécessaires) :

    Si tu regardes bien ton code, tu fais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    saveArrow();
     
     
    getNOMsel();
    Donc premièrement tu appelles saveArrow() qui fait :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    protected int saveArrow() {
    		if (currentArrow != null && currentArrow.isValid()) {
    			arrows.add(currentArrow);
    			y += H;
     
    		}
    		currentArrow = null;
                    repaint(); 
                    return y;
    	}
    puis
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    ArrayList<String> getNOMsel(){if (currentArrow != null && currentArrow.isValid()) {
    			String nom=newExemple().getNom();
    			lisnom.add(nom);
     
            }
    comme saveArrow met currentArrow à null, on ne risque pas d'exécuter le code dnas le bloc du if (vu qu'on l'exécute seulement si currentArrow n'est pas null), donc d'ajouter quoique ce soit à lisnom.

    Maintenant comme d'habitude, toi et ton collègue vous compliquez la vie. Et votre code fait des trucs horribles et inutiles (sans parler des l'identation, des lignes vides inutiles, et des noms de variables). Pourquoi getNOMSel() retourne une list, pour faire ce machin :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    getNOMsel(); 
     
    for(Iterator it=lisnom.iterator(); it.hasNext();) 
     
                System.out.println(it.next());

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    for(String nom : getNOMSel() {
                System.out.println(nom);
    }
    Simple ! Faites simple !


    A propos de simplicité, revenons à nos moutons. Si le but est d'avoir une liste des textes situés dans les flêches qui se trouvent dans la liste arrows, et bien, au lieu de créer une autre variable liste (lisnom), une méthode foireuse pour essayer de récuper un truc pour le copier (l'ajouter) dans cette autre variable, utiliser directement la liste de flêches !

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    public List<String> getArrowTexts() {
         return arrows.stream().map(Arrow::getText).collect(Collectors.toList());
    }
    Au pire, si vous ne connaissez pas les stream et les lambas :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    public List<String> getArrowTexts() {
         List<String> arrowTexts = new ArrayList<>(arrows.size());
         for(Arrow arrow : arrows) {
               arrowTexts.add(arrow.getText());
         }
         return arrowTexts;
    }
    Alors d'accord, c'est un peu moins performant parce qu'il faut recréer la liste à chaque fois, mais bon, vu le programme globalement, on va pas plomber des masses les performances, et on simplifie nettement.

    Et pour faire l'affichage, on peut faire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    for(String text : getArrowTexts()){
         System.out.println(text);
    }
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  15. #55
    Membre régulier
    Femme Profil pro
    Étudiant
    Inscrit en
    Février 2017
    Messages
    108
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 31
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2017
    Messages : 108
    Points : 89
    Points
    89
    Par défaut
    ok merci encore .
    à la prochaine

  16. #56
    Membre régulier
    Femme Profil pro
    Étudiant
    Inscrit en
    Février 2017
    Messages
    108
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 31
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2017
    Messages : 108
    Points : 89
    Points
    89
    Par défaut
    Une autre préoccupation est le fait que nous devrions sauvegarder le dessin et les messages que nous avons fait dans la fenêtre Exemple pour l'afficher dans un jtextarea dans notre fenêtre principale. Nous avions déjà exposé ce problème et jusqu'à présent nous ne savons pas comment régler ce problème. Aussi, nous savons que nous pouvons l'enregistrer sous forme d'image mais cela ne nous arrange pas car nous devons modifier ce dessin ultérieurement. Donc nous avons besoin d'une autre solution. Merci d'avance.

  17. #57
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    J'ai déjà réponde à ça. La base de la sauvegarde afin de modification ultérieure c'est de sauvegarder les mêmes informations qui te permette de créer ce que tu veux sauvegarder pendant l'exécution. Ensuite, soit tu fais une sauvegarde binaire, soit une sauvegarde texte (et par exemple un serialisation, bien que personnellement je n'aime pas trop cette solution à cause de la problématique de version qu'elle engendre).

    Donc, à la base, si tu veux sauvegarder des flêches qui sont représentées en mémoire par une classe Arrow qui a pour attribut :
    • un x de départ
    • un x de d'arrivée
    • un y
    • un texte


    Et bien tu sauvegardes ces informations dans un fichier. Tu choisis un format qui te convient, xml, csv, json, peu importe... et tu écris les informations qui vont bien dedans
    .
    Pour charger les infos, il suffit de relire le fichier et de recréer les flêches avec les informations lues dedans.

    Par exemple (indépendant de votre projet), en XML, vite fait en StAX :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    import java.io.IOException;
    import java.io.InputStream;
    import java.io.OutputStream;
    import java.nio.file.Files;
    import java.nio.file.Path;
    import java.nio.file.Paths;
    import java.util.ArrayList;
    import java.util.List;
     
    import javax.xml.stream.FactoryConfigurationError;
    import javax.xml.stream.XMLInputFactory;
    import javax.xml.stream.XMLOutputFactory;
    import javax.xml.stream.XMLStreamException;
    import javax.xml.stream.XMLStreamReader;
    import javax.xml.stream.XMLStreamWriter;
     
    public class ExempleSave {
     
    	public static void main(String[] args) throws IOException {
     
    		Path fichier = Paths.get("fichiertruc.xml");
     
    		List<Machin> machinsToSave = new ArrayList<>();
    		machinsToSave.add(new Machin(10,10,"truc"));
    		machinsToSave.add(new Machin(20,20,"bidule"));
    		machinsToSave.add(new Machin(30,30,"machin"));
    		System.out.println("On va sauver : " + machinsToSave);
    		save(fichier ,machinsToSave);
     
    		System.out.println("On va recharger le fichier : ");
    		List<Machin> loadedMachins = load(fichier);
    		System.out.println("On a chargé : " + loadedMachins);
     
     
    	}
     
    	public static List<Machin> load(Path name) throws IOException {
    		List<Machin> machins = new ArrayList<>();
    		try(InputStream input = Files.newInputStream(name)) {
    			XMLStreamReader reader = XMLInputFactory.newFactory().createXMLStreamReader(input);
    			String current=null;
    			String text=null;
    			Integer x=null;
    			Integer y=null;
    			StringBuilder sb=new StringBuilder();
    			while ( reader.hasNext() ) {
    				switch( reader.next() ) {
    				case XMLStreamReader.START_ELEMENT:
    					switch(reader.getLocalName()) {
    					case "x":
    					case "y":
    					case "text":
    						current = reader.getLocalName();
    					}
    					break;
    				case XMLStreamReader.CHARACTERS:
    					if ( current!=null ) {
    						if( sb.length()!=0 ) {
    							sb.append(System.lineSeparator());
    						}
    						sb.append(reader.getText());
    					}
    					break;
    				case XMLStreamReader.END_ELEMENT:
    					if ( reader.getLocalName().equals(current) ) {
    						switch(current) {
    						case "x":
    							x = Integer.parseInt(sb.toString().trim());
    							break;
    						case "y":
    							y = Integer.parseInt(sb.toString().trim());
    							break;
    						case "text":
    							text = sb.toString();
    							break;
    						}
    						sb.setLength(0);
    					}
    					else if ( reader.getLocalName().equals("machin") ) {
    						if ( x==null || y==null || text==null ) {
    							throw new IOException("Missing data");
    						}
    						machins.add(new Machin(x, y, text));
    						x = y = null;
    						text = null;
    					}
    					break;
    				}
    			}
    		} catch (NumberFormatException | XMLStreamException e) {
    			throw new IOException(e);
    		}
    		return machins;
    	}
     
    	public static void save(Path name, List<Machin> machins) throws IOException {
    		try(OutputStream output = Files.newOutputStream(name)) {
    			XMLStreamWriter writer = XMLOutputFactory.newFactory().createXMLStreamWriter(output,"UTF-8");
    			writer.writeStartDocument("UTF-8","1.0");
    			writer.writeStartElement("machins");
    			for(Machin machin : machins) {
    				writer.writeStartElement("machin");
    				writer.writeStartElement("x");
    				writer.writeCharacters(String.valueOf(machin.getX()));
    				writer.writeEndElement();
    				writer.writeStartElement("y");
    				writer.writeCharacters(String.valueOf(machin.getY()));
    				writer.writeEndElement();
    				writer.writeStartElement("text");
    				writer.writeCData(machin.getText());
    				writer.writeEndElement();
    				writer.writeEndElement();
    			}
    			writer.writeEndElement();
    			writer.writeEndDocument();
    		} catch (XMLStreamException | FactoryConfigurationError e) {
    			throw new IOException(e);
    		}
    	}
     
    	public static class Machin {
     
    		private int x;
    		private int y;
    		private String text;
     
    		public Machin(int x, int y, String text) {
    			this.x=x;
    			this.y=y;
    			this.text=text;
    		}
     
    		public int getX() {
    			return x;
    		}
     
    		public int getY() {
    			return y;
    		}
     
    		public String getText() {
    			return text;
    		}
     
    		@Override
    		public String toString() {
    			return "("+x+", "+y+", "+text+")";
    		}
     
    	}
     
    }
    Le fichier étant comme ça :
    Code xml : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    <?xml version="1.0" encoding="utf-8"?>
    <machins>
      <machin>
        <x>10</x>
        <y>10</y>
        <text>
          <![CDATA[truc]]>
        </text>
      </machin>
      <machin>
        <x>20</x>
        <y>20</y>
        <text>
          <![CDATA[bidule]]>
        </text>
      </machin>
      <machin>
        <x>30</x>
        <y>30</y>
        <text>
          <![CDATA[machin]]>
        </text>
      </machin>
    </machins>
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  18. #58
    Membre régulier
    Femme Profil pro
    Étudiant
    Inscrit en
    Février 2017
    Messages
    108
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 31
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2017
    Messages : 108
    Points : 89
    Points
    89
    Par défaut
    ok merci encore,
    je vais essayer d'utiliser cette dernière
    Mais pour la méthode getArrowTexts(), je n arrive pas à l'utiliser dans une autre classe en instanciant la classe où elle se trouve.
    STP, tu pourrais me dire comment m'y prendre.
    Merci

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
      public List<String> getArrowTexts() {
         List<String> arrowTexts = new ArrayList<>(arrows.size());
         for(Arrow arrow : arrows) {
               arrowTexts.add(arrow.getText());
     
         }
         return arrowTexts;
    }

  19. #59
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Ça ne sert à rien d'instancier la classe pour appeler la méthode : il faut appeler la méthode pour l'instance déjà existente, celle où on créé les flêches. Une nouvelle instance aura forcément qu'une liste de flêches vide.

    Si tu as besoin d'appeler la méthode dans une autre classe, il faudra définir un moyen d'accèder à l'instance principale de travail.
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  20. #60
    Membre régulier
    Femme Profil pro
    Étudiant
    Inscrit en
    Février 2017
    Messages
    108
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 31
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2017
    Messages : 108
    Points : 89
    Points
    89
    Par défaut
    "il faudra définir un moyen d'accèder à l'instance principale de travail"
    SVP, pourriez vous être plus clair.
    Merci

Discussions similaires

  1. Erreur dans l'écriture d'une requête
    Par medharoun dans le forum Requêtes
    Réponses: 2
    Dernier message: 14/12/2016, 10h19
  2. Réponses: 4
    Dernier message: 30/08/2007, 18h08
  3. [PowerBuilder] Erreur dans un retrieve d'une datawindow
    Par Deedoo2000 dans le forum Powerbuilder
    Réponses: 1
    Dernier message: 04/08/2006, 10h39
  4. I.E. souscis dans l'écriture d'une toolbar
    Par Trap D dans le forum MFC
    Réponses: 10
    Dernier message: 09/06/2006, 16h27
  5. erreur dans l'execution d'une requete
    Par marsupilami34 dans le forum Requêtes
    Réponses: 4
    Dernier message: 06/09/2005, 16h47

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo