Bonjour, pour me préparer à ma 2eme 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é afin de pouvoir les revoir par la suite en ouvrant ce programme.
le code:
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).