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

 Java Discussion :

Posez votre question Signaler IHM: bouton annuler ? importer une image ?


Sujet :

Java

  1. #1
    Membre du Club
    Homme Profil pro
    Inscrit en
    Février 2013
    Messages
    95
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2013
    Messages : 95
    Points : 41
    Points
    41
    Par défaut Posez votre question Signaler IHM: bouton annuler ? importer une image ?
    Bonjour, pour me préparer à ma 2e année d'informatique, j'essaie de prendre de l'avance sur la matière (et m'occuper). Mon projet est simple. Créer une IHM où l'on peut simplement créer et enregistrer des diaporamas personnalisés afin de pouvoir les revoir par la suite en ouvrant ce programme.
    Le code :

    package diaporama;
    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
     
    package diaporama;
     
    import java.awt.Color;
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
    import java.awt.event.KeyEvent;
    import java.io.File;
    import java.io.FileNotFoundException;
    import java.io.FileWriter;
    import java.io.IOException;
    import java.io.PrintWriter;
    import javax.swing.ButtonGroup;
    import javax.swing.JFrame;
    import javax.swing.JMenu;
    import javax.swing.JMenuBar;
    import javax.swing.JMenuItem;
    import javax.swing.JOptionPane;
    import javax.swing.JPanel;
    import javax.swing.JRadioButton;
    import javax.swing.KeyStroke;
     
    public class Fenetre extends JFrame{
     
    	  private JMenuBar menuBar = new JMenuBar();
     
    	  private JMenu 
    	  		  menuFichier = new JMenu("Fichier"),
    			  menuEdition = new JMenu("Edition"),
    			  sousMenuVitesse = new JMenu("Vitesse"),
    			  menuInfo = new JMenu("À propos");
     
    	  private JMenuItem 
    	  		  itemNewDiapo = new JMenuItem("Nouveau"),
    	  		  itemOuvrir = new JMenuItem("Ouvrir"),
    			  itemFermer = new JMenuItem("Fermer"),
    			  itemLancer = new JMenuItem("Lancer"),
    			  itemQuitter = new JMenuItem("Quitter"),
    			  itemStop = new JMenuItem("Arrêter"),
    			  itemInfo = new JMenuItem("?");
     
    	  ButtonGroup bg = new ButtonGroup();
    	  private JRadioButton 
    	  		  jcmiVitLente = new JRadioButton("Lente"),
    			  jcmiVitNormal = new JRadioButton("Normal"),
    			  jcmiVitRapide = new JRadioButton("Rapide");
     
     
     
     
      public Fenetre(){
        this.setTitle("Diaporama");
        this.setSize(1200, 800);
        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        this.setLocationRelativeTo(null);
     
     
        JPanel pan = new JPanel();
        pan.setBackground(Color.DARK_GRAY);        
        this.setContentPane(pan);               
     
     
        // On initialise nos menus 
     
        // Menu Fichier
        itemNewDiapo.addActionListener(new ActionListener(){
        	public void actionPerformed(ActionEvent argo0){
        		CreateDiapo();
        	}
        });
        this.menuFichier.add(itemNewDiapo);
        this.menuFichier.add(itemOuvrir);
        this.menuFichier.add(itemQuitter);
     
        // Ajout d'un séparateur
        this.menuFichier.addSeparator();
        itemFermer.addActionListener(new ActionListener(){
          public void actionPerformed(ActionEvent arg0) {
            System.exit(0);
          }        
        });
        this.menuFichier.add(itemFermer);
     
        // Menu Edition
        // on met les bouttons radio dans un buttonGroup pour limiter a 1 actif
        jcmiVitNormal.setSelected(true);
        bg.add(jcmiVitLente);
        bg.add(jcmiVitNormal);
        bg.add(jcmiVitRapide);
     
        // On ajoute les éléments dans notre sous-menu
        this.sousMenuVitesse.add(jcmiVitLente);
        this.sousMenuVitesse.add(jcmiVitNormal);
        this.sousMenuVitesse.add(jcmiVitRapide);
     
     
        // Ajout du sous-menu dans notre menu
        this.menuEdition.add(itemLancer);
        this.menuEdition.add(itemStop);
        this.menuEdition.add(this.sousMenuVitesse);
     
     
        // Menu Info
        this.menuInfo.add(itemInfo);
        itemInfo.addActionListener(new ActionListener(){
            public void actionPerformed(ActionEvent arg0) {
                fenetreInfo();
              }
            });
     
     
        // Ajout des menus dans la barre de menus et ajout de mnémoniques !
        // L'ordre d'ajout va déterminer l'ordre d'apparition dans le menu de gauche à droite
        // Le premier ajouté sera tout à gauche de la barre de menu et inversement pour le dernier
        itemLancer.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_L, KeyEvent.CTRL_MASK));
        itemStop.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_A, KeyEvent.CTRL_MASK));
        itemFermer.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_F, KeyEvent.CTRL_MASK));
        itemNewDiapo.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_N, KeyEvent.CTRL_MASK));
        itemOuvrir.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_O, KeyEvent.CTRL_MASK));
        itemQuitter.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_Q, KeyEvent.CTRL_MASK));
     
        menuFichier.setMnemonic('F');
        this.menuBar.add(menuFichier);
        menuEdition.setMnemonic('E');
        this.menuBar.add(menuEdition);
        menuInfo.setMnemonic('P');
        this.menuBar.add(menuInfo);
     
        this.setJMenuBar(menuBar);
     
        this.setVisible(true);
     
        }
     
      private void CreateDiapo(){
    	  boolean nomOk = true;
    	  System.out.println("test1");
    	  String nom = JOptionPane.showInputDialog(null, "Nom du diaporama:     (entre 1 et 20 charactère, sans espace)", "Nouveau diaporama", JOptionPane.QUESTION_MESSAGE);
    	  if(nom.length()<=20 && nom.length()>0){
    		  for(int i=0;i<nom.length() && nomOk == true;i++){
    			  if(nom.charAt(i)==' ') nomOk = false;
    			  System.out.println(i);
    		  }
    	  }else nomOk = false;
    	  System.out.println("test2");
     
    	  if(nomOk){
    		 boolean outOk = true;
    		  // on ajoute le nom de la diapo à la liste des dossiers diaporama
    		try {
    			FileWriter fOut = new FileWriter("listeDiaporama.txt", true);
    			PrintWriter pOut = new PrintWriter(fOut);
    			for(int i=0;i<20;i++){
    				if(i < nom.length()){
    					pOut.print(nom.charAt(i));
    				}else{
    					pOut.print(' ');
    				}
    			}		
    			fOut.close();
    			pOut.close();
    		} catch (FileNotFoundException e) {
    			e.printStackTrace();
    			outOk = false;
    		} catch (IOException e) {
    			e.printStackTrace();
    			outOk = false;
     
    		}
     
    		// si le dosier n'a pas pu être créé
    		if(outOk == false)
    			JOptionPane.showMessageDialog(null, "Problème lors de la création du dossier" + nom, "Erreur ", JOptionPane.ERROR_MESSAGE);
    		else{
    			new File(nom).mkdir();
    		}
    	  }
      }
     
      public void fenetreInfo(){
    	  String info = "Programme créer par Jordan M.\n";
    	  info += "Le but est de me familiariser avec les IHMs.";
          JOptionPane.showMessageDialog(null, info, "Informations", JOptionPane.INFORMATION_MESSAGE);
      }
    }
    Pour le moment je suis confronté à deux problèmes.
    1)
    Dans la fonction: private void CreateDiapo()
    le programme demande à l'utilisateur d'entrée un nom de dossier (qui se créer j'ai vérifier)
    mais il peut aussi annuler lorsque la balise lui demande. Lors ce que il annule la demande de nom j'ai plusieurs erreur dans la console (mais aucun crash apparent dans le programme) Mais je n'aime pas laisser cette erreur.
    Existe t'il une méthode simple pour vérifier que le dossier n'existe pas encore?
    2)
    J'aimerais importer des photos mais comment faire?
    j'ai cru comprendre avec l'objet: JFileChooser mais je n'arrive pas à l'intégrer (aucun bon effet).
    De plus je ne sais pas si il est préférable de copier les images importer où garder leur localisation en mémoire(dans un fichier).
    Merci d'avance :)

  2. #2
    Membre éprouvé
    Avatar de Cafeinoman
    Homme Profil pro
    Couteau suisse d'une PME
    Inscrit en
    Octobre 2012
    Messages
    628
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Couteau suisse d'une PME

    Informations forums :
    Inscription : Octobre 2012
    Messages : 628
    Points : 1 256
    Points
    1 256
    Par défaut
    Peux tu poster les traces d'erreurs que tu as lors de l'annulation de création?
    As-tu essayé de créer plusieurs diapo à la suite? Sinon pour répondre directement il existe une méthode exist() dans File qui permet de vérifier qu'un dossier/fichier existe.

    Pour le chargement de photos, JFileChooser est bien ce qu'il te faut. Que veux tu dire par aucun bon effet? Peux tu poster ton code de test?
    Pour ce qui est du maintien en mémoire, tu est en fait obligé de garder en mémoire un objet Image le temps de l'exécution du programme il me semble.
    «Dieu ne joue pas aux dés.» - Albert Einstein. Et pan! 30 ans de retard dans la théorie quantique!
    «Tout n'est pas politique, mais la politique s'intéresse à tout.» - Nicolas Machiavel. Et surtout à ceux qui ne s'y intéressent pas.

  3. #3
    Membre du Club
    Homme Profil pro
    Inscrit en
    Février 2013
    Messages
    95
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2013
    Messages : 95
    Points : 41
    Points
    41
    Par défaut
    Salut Cafeinoman et merci

    Voici les traces d'erreur (comme on peut voir seul test1 s'affiche dans la console et pas test2 donc j'en conclut que le programme ferme la méthode tout seul mais je n'aime pas avoir une erreur même si elle ne fait rien de mal)

    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
    test1
    Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
    at diaporama.Fenetre.CreateDiapo(Fenetre.java:138)
    at diaporama.Fenetre.access$0(Fenetre.java:134)
    at diaporama.Fenetre$1.actionPerformed(Fenetre.java:67)
    at javax.swing.AbstractButton.fireActionPerformed(Unknown Source)
    at javax.swing.AbstractButton$Handler.actionPerformed(Unknown Source)
    at javax.swing.DefaultButtonModel.fireActionPerformed(Unknown Source)
    at javax.swing.DefaultButtonModel.setPressed(Unknown Source)
    at javax.swing.AbstractButton.doClick(Unknown Source)
    at javax.swing.plaf.basic.BasicMenuItemUI.doClick(Unknown Source)
    at javax.swing.plaf.basic.BasicMenuItemUI$Handler.mouseReleased(Unknown Source)
    at java.awt.Component.processMouseEvent(Unknown Source)
    at javax.swing.JComponent.processMouseEvent(Unknown Source)
    at java.awt.Component.processEvent(Unknown Source)
    at java.awt.Container.processEvent(Unknown Source)
    at java.awt.Component.dispatchEventImpl(Unknown Source)
    at java.awt.Container.dispatchEventImpl(Unknown Source)
    at java.awt.Component.dispatchEvent(Unknown Source)
    at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source)
    at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source)
    at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source)
    at java.awt.Container.dispatchEventImpl(Unknown Source)
    at java.awt.Window.dispatchEventImpl(Unknown Source)
    at java.awt.Component.dispatchEvent(Unknown Source)
    at java.awt.EventQueue.dispatchEventImpl(Unknown Source)
    at java.awt.EventQueue.access$200(Unknown Source)
    at java.awt.EventQueue$3.run(Unknown Source)
    at java.awt.EventQueue$3.run(Unknown Source)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source)
    at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source)
    at java.awt.EventQueue$4.run(Unknown Source)
    at java.awt.EventQueue$4.run(Unknown Source)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source)
    at java.awt.EventQueue.dispatchEvent(Unknown Source)
    at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
    at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
    at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
    at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
    at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
    at java.awt.EventDispatchThread.run(Unknown Source)
    J'ai bien créé plusieurs diaporamas à la suite (du moins, le dossier, car je ne sais toujours pas importer les photos) et il se créer mais si je crée 2X l fois même dossier, le nouveau ne se créer pas. Donc je vais simplement ajouter un avertissement avec la méthode exist() dont tu m'as parlé.

    Pour JFileChooser, je n'ai tout simplement pas su ouvrir la fenêtre, mais je vais réessayer, je dirais quoi

    Pour mes autres questions, je voulais savoir plusieurs choses :

    Je veux créer des diaporamas, mais est-ce que je copie les photos dans les dossiers diaporama ou est-ce que je fais juste une copie de l'adresse absolue de l'image. Qu'est-ce qui est mieux/ plus propre au point de vue programmation.

    Merci encore

  4. #4
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    Citation Envoyé par Linquisiteur Voir le message
    Salut Cafeinoman et merci

    Voici les traces d'erreur (comme on peut voir seul test1 s'affiche dans la console et pas test2 donc j'en conclut que le programme ferme la méthode tout seul mais je n'aime pas avoir une erreur même si elle ne fait rien de mal)
    Un exception, ça remonte jusqu'à ce que ça soit traité. Comme ce n'est pas traité dans ta méthode, la méthode s'arrête de suite et l'appelant prend le relais, avec la même question: est-ce que c'est traité.

    En l'occurence ici, tu as dans ton code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    	  String nom = JOptionPane.showInputDialog(null, "Nom du diaporama:     (entre 1 et 20 charactère, sans espace)", "Nouveau diaporama", JOptionPane.QUESTION_MESSAGE);
    	  if(nom.length()<=20 && nom.length()>0){
    Mais à aucun moment tu ne vérifie que nom n'est pas null. Hors ce sera le cas si on clique sur annuler!




    Citation Envoyé par Linquisiteur Voir le message
    Je veux créer des diaporamas, mais est-ce que je copie les photos dans les dossiers diaporama ou est-ce que je fais juste une copie de l'adresse absolue de l'image. Qu'est-ce qui est mieux/ plus propre au point de vue programmation.

    Merci encore
    Ha la grande question. Disons qu'à priori ton application n'a pas vocation a préserver les images dans le temps, donc ça n'a pas de sens d'en faire une copie, ça ne ferait que gaspiller de la place. Maintenant, il faudra du coup, pour ton affichage, que tu vérifie toujours que le fichier est bien toujours présent. Si on a éjecté le CD / la clé USB, tu n'aura plus accès à l'image.

  5. #5
    Membre éprouvé
    Avatar de Cafeinoman
    Homme Profil pro
    Couteau suisse d'une PME
    Inscrit en
    Octobre 2012
    Messages
    628
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Couteau suisse d'une PME

    Informations forums :
    Inscription : Octobre 2012
    Messages : 628
    Points : 1 256
    Points
    1 256
    Par défaut
    Pense aussi à utiliser un try-with-resources pour tes writer : si une exception est levée, ils ne seront pas fermé.
    «Dieu ne joue pas aux dés.» - Albert Einstein. Et pan! 30 ans de retard dans la théorie quantique!
    «Tout n'est pas politique, mais la politique s'intéresse à tout.» - Nicolas Machiavel. Et surtout à ceux qui ne s'y intéressent pas.

  6. #6
    Membre du Club
    Homme Profil pro
    Inscrit en
    Février 2013
    Messages
    95
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2013
    Messages : 95
    Points : 41
    Points
    41
    Par défaut
    Merci à vous, J'ai tenu compte de vos conseil et j'ai résolu mes problèmes
    J'ai su obtenir le path des images, vérifier les dossiers existant,..

    Pour le souci de copier où non je crois que je vais prendre le chemin absolu mais ajouter une option pour tout copier afin de rassembler les images dans des dossiers.

    Mon programme est surtout un entrainement , plus j'ajoute d'option plus j'approfondis mes connaissance.
    Maintenant il faut que je trouve comment faire un système de switch pour voir les images en défilement manuel et automatique :/

    Je ne ferme pas le sujet car j'aurais s'en doute encore des question.


    Encore merci

  7. #7
    Membre éprouvé
    Avatar de Cafeinoman
    Homme Profil pro
    Couteau suisse d'une PME
    Inscrit en
    Octobre 2012
    Messages
    628
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Couteau suisse d'une PME

    Informations forums :
    Inscription : Octobre 2012
    Messages : 628
    Points : 1 256
    Points
    1 256
    Par défaut
    De rien. Mais passe plutôt en résolu et réouvre un sujet si nécessaire, ça facilité les recherches futur pour les gens confrontés au même problème
    «Dieu ne joue pas aux dés.» - Albert Einstein. Et pan! 30 ans de retard dans la théorie quantique!
    «Tout n'est pas politique, mais la politique s'intéresse à tout.» - Nicolas Machiavel. Et surtout à ceux qui ne s'y intéressent pas.

  8. #8
    Membre du Club
    Homme Profil pro
    Inscrit en
    Février 2013
    Messages
    95
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2013
    Messages : 95
    Points : 41
    Points
    41
    Par défaut
    pas de problème

    Bonne nuit

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 2
    Dernier message: 03/03/2015, 16h36
  2. IHM bouton annuler et memento
    Par roswellenshort dans le forum Langage
    Réponses: 0
    Dernier message: 25/11/2013, 15h54
  3. [PPT-2007] Posez votre question Signaler Enregistrer sous PDF
    Par leloup84 dans le forum Powerpoint
    Réponses: 0
    Dernier message: 14/06/2012, 14h00
  4. Réponses: 0
    Dernier message: 24/04/2012, 22h31
  5. Réponses: 1
    Dernier message: 26/07/2011, 13h52

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