Modification du code des Popup + Ajout disposition Verticale et Horizontale

This commit is contained in:
LucasV-IUT
2021-12-07 21:41:26 +01:00
parent 7987a7958c
commit 49f3a1fa00
4 changed files with 197 additions and 123 deletions
+49 -19
View File
@@ -43,6 +43,8 @@ public class Fenetre extends JFrame {
public PDF documentPDF; public PDF documentPDF;
private boolean affichageVertical;
/** /**
* TODO * TODO
*/ */
@@ -51,24 +53,33 @@ public class Fenetre extends JFrame {
/* Change le style de la fenêtre */ /* Change le style de la fenêtre */
try { try {
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName()); UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
} catch (ClassNotFoundException | InstantiationException } catch (ClassNotFoundException
| IllegalAccessException | UnsupportedLookAndFeelException e) { | InstantiationException
| IllegalAccessException
| UnsupportedLookAndFeelException e) {
e.printStackTrace(); e.printStackTrace();
} }
// Création du menu // Création du menu
menu = new Menu(this); menu = new Menu(this);
this.setTitle(TITRE);
// Ajout de la barre de menu au frame
this.setJMenuBar(menu); this.setJMenuBar(menu);
this.setSize(300, 300); this.affichageVertical = true;
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setLocationRelativeTo(null); setup();
this.setVisible(true); }
public void setup() {
setTitle(TITRE);
setSize(300, 300);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setLocationRelativeTo(null);
setVisible(true);
dechargerPDF();
revalidate();
repaint();
} }
/** /**
@@ -89,11 +100,9 @@ public class Fenetre extends JFrame {
scrollPane.getHorizontalScrollBar().setUnitIncrement(16); scrollPane.getHorizontalScrollBar().setUnitIncrement(16);
this.add(scrollPane, BorderLayout.CENTER); this.add(scrollPane, BorderLayout.CENTER);
documentPDF = new PDF(fichier); documentPDF = new PDF(fichier, affichageVertical);
pdfPanel.add(documentPDF); pdfPanel.add(documentPDF);
/* Ajoute le scrollPane et le centre dans la page */
/* Charge les pages */ /* Charge les pages */
documentPDF.loadPages(); documentPDF.loadPages();
@@ -106,8 +115,18 @@ public class Fenetre extends JFrame {
/** /**
* *
* @throws IOException
*/ */
public void rechargerPDF(float zoom) throws IOException{ public void rechargerPDF() throws IOException {
rechargerPDF(1.0f);
}
/**
*
* @param zoom
* @throws IOException
*/
public void rechargerPDF(float zoom) throws IOException {
dechargerPDF(); dechargerPDF();
/* Crée le panel qui contient le document PDF */ /* Crée le panel qui contient le document PDF */
@@ -116,14 +135,12 @@ public class Fenetre extends JFrame {
JScrollPane scrollPane = new JScrollPane(pdfPanel); JScrollPane scrollPane = new JScrollPane(pdfPanel);
scrollPane.getVerticalScrollBar().setUnitIncrement(16); scrollPane.getVerticalScrollBar().setUnitIncrement(16);
scrollPane.getHorizontalScrollBar().setUnitIncrement(16); scrollPane.getHorizontalScrollBar().setUnitIncrement(16);
this.add(scrollPane, BorderLayout.CENTER); this.add(scrollPane);
documentPDF = new PDF(fichier); documentPDF = new PDF(fichier, affichageVertical);
documentPDF.setZoom(zoom); documentPDF.setZoom(zoom);
pdfPanel.add(documentPDF); pdfPanel.add(documentPDF);
/* Ajoute le scrollPane et le centre dans la page */
/* Charge les pages */ /* Charge les pages */
documentPDF.loadPages(); documentPDF.loadPages();
@@ -140,9 +157,22 @@ public class Fenetre extends JFrame {
public void dechargerPDF() { public void dechargerPDF() {
if (this.getContentPane() != null) { if (this.getContentPane() != null) {
this.getContentPane().removeAll(); this.getContentPane().removeAll();
documentPDF = null;
} }
} }
public boolean haveDocument() {
return documentPDF != null;
}
public void setAffichageVertical(boolean affichageVertical) {
this.affichageVertical = affichageVertical;
}
public boolean isAffichageVertical() {
return affichageVertical;
}
/** /**
* TODO comment main * TODO comment main
* *
+6 -11
View File
@@ -46,17 +46,12 @@ public class PDF extends JPanel {
* @param fichier Le fichier PDF que lon veut ouvrir * @param fichier Le fichier PDF que lon veut ouvrir
* @throws IllegalArgumentException si le fichier nexiste pas * @throws IllegalArgumentException si le fichier nexiste pas
*/ */
public PDF(File fichier) throws IOException{ public PDF(File fichier, boolean vertical) throws IOException {
// try { document = PDDocument.load(fichier);
this.document = PDDocument.load(fichier); pages = new Page[document.getNumberOfPages()];
this.pages = new Page[document.getNumberOfPages()]; zoom = 1.0f;
this.zoom = 1.0f; setAlignmentX(Component.CENTER_ALIGNMENT);
if (vertical) setLayout(new BoxLayout(this, BoxLayout.Y_AXIS));
this.setLayout(new BoxLayout(this, BoxLayout.Y_AXIS));
this.setAlignmentX(Component.CENTER_ALIGNMENT);
// } catch (IOException e) {
// throw new IllegalArgumentException();
// }
} }
/** /**
+141 -92
View File
@@ -7,15 +7,14 @@
package lecteur_pdf.menu; package lecteur_pdf.menu;
import lecteur_pdf.affichage.Fenetre; import lecteur_pdf.affichage.Fenetre;
import org.apache.pdfbox.pdmodel.PDDocument;
import javax.swing.*; import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent; import java.awt.event.ActionEvent;
import java.awt.event.KeyEvent; import java.awt.event.KeyEvent;
import java.io.File; import java.io.File;
import java.io.IOException; import java.io.IOException;
import java.util.ArrayList; import java.util.ArrayList;
/** /**
* Classe pour afficher le Menu "Fichier" avec ses options * Classe pour afficher le Menu "Fichier" avec ses options
* *
@@ -30,17 +29,17 @@ public class Menu extends JMenuBar {
/** /**
* La Fenêtre mère de la barre des menus * La Fenêtre mère de la barre des menus
*/ */
private final Fenetre fenetre; private final Fenetre FENETRE;
/** /**
* Liste contenant les différents menus * Liste contenant les différents menus
*/ */
private final ArrayList<JMenu> menuList = new ArrayList<>(); private final ArrayList<JMenu> MENU_LIST = new ArrayList<>();
/** /**
* Liste contenant les différents sous menus * Liste contenant les différents sous menus
*/ */
private final ArrayList<JMenuItem> itemList = new ArrayList<>(); private final ArrayList<JMenuItem> ITEM_LIST = new ArrayList<>();
/** /**
* Constructeur du menu * Constructeur du menu
@@ -48,7 +47,7 @@ public class Menu extends JMenuBar {
* @param fenetre La Fenêtre mère de la barre des menus * @param fenetre La Fenêtre mère de la barre des menus
*/ */
public Menu(Fenetre fenetre) { public Menu(Fenetre fenetre) {
this.fenetre = fenetre; this.FENETRE = fenetre;
createMenuFichier(); createMenuFichier();
createMenuOptions(); createMenuOptions();
@@ -74,14 +73,14 @@ public class Menu extends JMenuBar {
Quitter.addActionListener(this::actionPerformed); Quitter.addActionListener(this::actionPerformed);
// Définis les raccourcis // Définis les raccourcis
KeyStroke raccourciOuvrir KeyStroke raccourciOuvrir = KeyStroke.getKeyStroke(KeyEvent.VK_O,
= KeyStroke.getKeyStroke(KeyEvent.VK_O, KeyEvent.CTRL_DOWN_MASK); KeyEvent.CTRL_DOWN_MASK);
Ouvrir.setAccelerator(raccourciOuvrir); Ouvrir.setAccelerator(raccourciOuvrir);
KeyStroke raccourciFermer KeyStroke raccourciFermer = KeyStroke.getKeyStroke(KeyEvent.VK_Q,
= KeyStroke.getKeyStroke(KeyEvent.VK_Q, KeyEvent.CTRL_DOWN_MASK); KeyEvent.CTRL_DOWN_MASK);
Fermer.setAccelerator(raccourciFermer); Fermer.setAccelerator(raccourciFermer);
KeyStroke raccourciQuitter KeyStroke raccourciQuitter = KeyStroke.getKeyStroke(KeyEvent.VK_X,
= KeyStroke.getKeyStroke(KeyEvent.VK_X, KeyEvent.CTRL_DOWN_MASK); KeyEvent.CTRL_DOWN_MASK);
Quitter.setAccelerator(raccourciQuitter); Quitter.setAccelerator(raccourciQuitter);
// Ajouter les éléments au menu "Fichier" // Ajouter les éléments au menu "Fichier"
@@ -90,12 +89,12 @@ public class Menu extends JMenuBar {
Fichier.add(Quitter); Fichier.add(Quitter);
// Ajoute le menu "Fichier" dans la liste des menus // Ajoute le menu "Fichier" dans la liste des menus
menuList.add(Fichier); MENU_LIST.add(Fichier);
// Ajoute Ouvrir, Fermer et Quitter dans la liste des sous menu // Ajoute Ouvrir, Fermer et Quitter dans la liste des sous menu
itemList.add(Ouvrir); ITEM_LIST.add(Ouvrir);
itemList.add(Fermer); ITEM_LIST.add(Fermer);
itemList.add(Quitter); ITEM_LIST.add(Quitter);
// Ajoute le menu à la barre de menu // Ajoute le menu à la barre de menu
this.add(Fichier); this.add(Fichier);
@@ -116,18 +115,18 @@ public class Menu extends JMenuBar {
Preferences.addActionListener(this::actionPerformed); Preferences.addActionListener(this::actionPerformed);
// Définis les raccourcis // Définis les raccourcis
KeyStroke raccourciPreferences KeyStroke raccourciPreferences = KeyStroke.getKeyStroke(KeyEvent.VK_P,
= KeyStroke.getKeyStroke(KeyEvent.VK_P, KeyEvent.CTRL_DOWN_MASK); KeyEvent.CTRL_DOWN_MASK);
Preferences.setAccelerator(raccourciPreferences); Preferences.setAccelerator(raccourciPreferences);
// Ajouter les éléments au menu "Options" // Ajouter les éléments au menu "Options"
Options.add(Preferences); Options.add(Preferences);
// Ajoute le menu "Affichage" dans la liste des menus // Ajoute le menu "Affichage" dans la liste des menus
menuList.add(Options); MENU_LIST.add(Options);
// Ajoute Preferences dans la liste des sous menu // Ajoute Preferences dans la liste des sous menu
itemList.add(Preferences); ITEM_LIST.add(Preferences);
// Ajoute le menu à la barre de menu // Ajoute le menu à la barre de menu
this.add(Options); this.add(Options);
@@ -142,38 +141,47 @@ public class Menu extends JMenuBar {
JMenu Affichage = new JMenu("Affichage"); JMenu Affichage = new JMenu("Affichage");
// Créer les items de zoom // Créer les items de zoom
JMenuItem ZoomPlus = new JMenuItem("Zoom +"); JMenuItem ZoomPlus = new JMenuItem("Zoom 150%");
JMenuItem ZoomNeutre = new JMenuItem("Zoom 0"); JMenuItem ZoomNeutre = new JMenuItem("Zoom 100%");
JMenuItem ZoomMinus = new JMenuItem("Zoom -"); JMenuItem ZoomMinus = new JMenuItem("Zoom 50%");
JMenuItem affichageVertical = new JMenuItem("Disposition Verticale");
JMenuItem affichageHorizontal = new JMenuItem("Disposition Horizontale");
// Ajoute des Listener aux JMenuItem // Ajoute des Listener aux JMenuItem
ZoomPlus.addActionListener(this::actionPerformed); ZoomPlus.addActionListener(this::actionPerformed);
ZoomNeutre.addActionListener(this::actionPerformed); ZoomNeutre.addActionListener(this::actionPerformed);
ZoomMinus.addActionListener(this::actionPerformed); ZoomMinus.addActionListener(this::actionPerformed);
affichageVertical.addActionListener(this::actionPerformed);
affichageHorizontal.addActionListener(this::actionPerformed);
// Définis les raccourcis // Définis les raccourcis
KeyStroke raccourciZoomPlus KeyStroke raccourciZoomPlus = KeyStroke.getKeyStroke(KeyEvent.VK_PLUS,
= KeyStroke.getKeyStroke(KeyEvent. VK_PLUS, KeyEvent.CTRL_DOWN_MASK); KeyEvent.CTRL_DOWN_MASK);
ZoomPlus.setAccelerator(raccourciZoomPlus); ZoomPlus.setAccelerator(raccourciZoomPlus);
KeyStroke raccourciZoomNeutre KeyStroke raccourciZoomNeutre = KeyStroke.getKeyStroke(KeyEvent.VK_0,
= KeyStroke.getKeyStroke(KeyEvent. VK_0, KeyEvent.CTRL_DOWN_MASK); KeyEvent.CTRL_DOWN_MASK);
ZoomNeutre.setAccelerator(raccourciZoomNeutre); ZoomNeutre.setAccelerator(raccourciZoomNeutre);
KeyStroke raccourciZoomMinus KeyStroke raccourciZoomMinus = KeyStroke.getKeyStroke(KeyEvent.VK_MINUS,
= KeyStroke.getKeyStroke(KeyEvent. VK_MINUS, KeyEvent.CTRL_DOWN_MASK); KeyEvent.CTRL_DOWN_MASK);
ZoomMinus.setAccelerator(raccourciZoomMinus); ZoomMinus.setAccelerator(raccourciZoomMinus);
// Ajouter les éléments au menu "Affichage" // Ajouter les éléments au menu "Affichage"
Affichage.add(ZoomPlus); Affichage.add(ZoomPlus);
Affichage.add(ZoomNeutre); Affichage.add(ZoomNeutre);
Affichage.add(ZoomMinus); Affichage.add(ZoomMinus);
Affichage.addSeparator();
Affichage.add(affichageVertical);
Affichage.add(affichageHorizontal);
// Ajoute le menu "Affichage" dans la liste des menus // Ajoute le menu "Affichage" dans la liste des menus
menuList.add(Affichage); MENU_LIST.add(Affichage);
// Ajoute des zoom dans la liste des sous menu // Ajoute des zoom dans la liste des sous menu
itemList.add(ZoomPlus); ITEM_LIST.add(ZoomPlus);
itemList.add(ZoomNeutre); ITEM_LIST.add(ZoomNeutre);
itemList.add(ZoomMinus); ITEM_LIST.add(ZoomMinus);
ITEM_LIST.add(affichageHorizontal);
ITEM_LIST.add(affichageVertical);
// Ajoute le menu à la barre de menu // Ajoute le menu à la barre de menu
this.add(Affichage); this.add(Affichage);
@@ -184,39 +192,93 @@ public class Menu extends JMenuBar {
* *
* @param ae un action event * @param ae un action event
*/ */
public void actionPerformed(ActionEvent ae) { public void actionPerformed(ActionEvent ae) {
String choice = ae.getActionCommand(); String choice = ae.getActionCommand();
String messageErrCorrompu = "Une erreur s'est produite dans le chargement de votre document, il a peut-être été corrompu. "; String messageErrCorrompu = "Une erreur s'est produite dans le"
+ "chargement de votre document,"
+ "il a peut-être été corrompu. ";
final int FERMER = 0;
final int QUITTER = 1;
final String[][] POPUPS_MSG = {
{"Fermer le PDF actuel", "Êtes-vous sûr de vouloir fermer ?"},
{"Quitter l'application", "Êtes-vous sûr de vouloir quitter ?"}
};
switch (choice) { switch (choice) {
case "Ouvrir" -> { case "Ouvrir" -> {
try { File fichier = SelectionnerFichier.ouvrirFichier();
File fichier = SelectionnerFichier.ouvrirFichier();
fenetre.chargerPDF(fichier); if (FENETRE.haveDocument()
}catch (IOException e) { && popupConfirmation(POPUPS_MSG[FERMER])
JOptionPane.showMessageDialog(fenetre,messageErrCorrompu); != JOptionPane.OK_OPTION) {
break;
}
if (fichier != null) {
try {
FENETRE.chargerPDF(fichier);
} catch (IOException e) {
JOptionPane.showMessageDialog(FENETRE,
messageErrCorrompu);
}
} }
} }
case "Fermer" -> popupfermer(fenetre); case "Fermer" -> {
case "Quitter" -> popupquitter(fenetre); if (FENETRE.haveDocument()
case "Zoom +" -> { && popupConfirmation(POPUPS_MSG[FERMER])
try { == JOptionPane.OK_OPTION) {
fenetre.rechargerPDF(2.0f); FENETRE.setup();
} catch (IOException e) {
JOptionPane.showMessageDialog(fenetre,messageErrCorrompu);
} }
} }
case "Zoom 0" -> { case "Quitter" -> {
try { int option = popupConfirmation(POPUPS_MSG[QUITTER]);
fenetre.rechargerPDF(1.0f);
} catch (IOException e) { if (option == JOptionPane.OK_OPTION) {
JOptionPane.showMessageDialog(fenetre,messageErrCorrompu); System.exit(0);
} }
} }
case "Zoom -" -> { case "Zoom 150%" -> {
try { try {
fenetre.rechargerPDF(0.5f); FENETRE.rechargerPDF(2.0f);
} catch (IOException e) { } catch (IOException e) {
JOptionPane.showMessageDialog(fenetre,messageErrCorrompu); JOptionPane.showMessageDialog(FENETRE, messageErrCorrompu);
}
}
case "Zoom 100%" -> {
try {
FENETRE.rechargerPDF(1.0f);
} catch (IOException e) {
JOptionPane.showMessageDialog(FENETRE, messageErrCorrompu);
}
}
case "Zoom 50%" -> {
try {
FENETRE.rechargerPDF(0.5f);
} catch (IOException e) {
JOptionPane.showMessageDialog(FENETRE, messageErrCorrompu);
}
}
case "Disposition Verticale" -> {
if (FENETRE.haveDocument()) {
FENETRE.setAffichageVertical(true);
try {
FENETRE.rechargerPDF();
} catch (IOException e) {
JOptionPane.showMessageDialog(FENETRE, messageErrCorrompu);
}
}
}
case "Disposition Horizontale" -> {
if (FENETRE.haveDocument()) {
FENETRE.setAffichageVertical(false);
try {
FENETRE.rechargerPDF();
} catch (IOException e) {
JOptionPane.showMessageDialog(FENETRE, messageErrCorrompu);
}
} }
} }
} }
@@ -226,7 +288,7 @@ public class Menu extends JMenuBar {
* @return la liste des JMenuItem * @return la liste des JMenuItem
*/ */
public ArrayList<JMenuItem> getMenuItems() { public ArrayList<JMenuItem> getMenuItems() {
return itemList; return ITEM_LIST;
} }
/** /**
@@ -236,46 +298,33 @@ public class Menu extends JMenuBar {
* @return Le sous menu demandé * @return Le sous menu demandé
*/ */
public JMenuItem getMenuItem(int index) { public JMenuItem getMenuItem(int index) {
return itemList.get(index); return ITEM_LIST.get(index);
} }
/**
* Affiche une popup avec un message ou l'on peut repondre par oui ou par
* non
*
* @param strings Le tableau de chaine de caractère contenant le titre de
* la fenêtre et son message
* @return 0 Si la valeur est Oui
* 1 Si la valeur est Non
* -1 en cas d'erreur
*/
public int popupConfirmation(String[] strings) {
if (strings.length != 2) {
return -1;
}
public void popupfermer(Fenetre fenetre){ final int TITRE = 0;
JDialog jd = new JDialog(fenetre); final int MESSAGE = 1;
jd.setLayout(new FlowLayout());
jd.setBounds(500,300,400,100);
JLabel jlabel = new JLabel("etes vous sûr de vouloir fermer ? ");
JButton oui = new JButton("oui");
oui.addActionListener(e -> {
fenetre.documentPDF.removeAll();
fenetre.documentPDF.revalidate();
fenetre.documentPDF.repaint();
jd.setVisible(false);
});
JButton non = new JButton("non");
non.addActionListener(e -> jd.setVisible(false));
jd.add(jlabel);
jd.add(oui);
jd.add(non);
jd.setVisible(true);
}
private void popupquitter(Fenetre fenetre) { final Object[] CHOIX = {"Oui", "Non"};
JDialog jd = new JDialog(fenetre);
jd.setLayout(new FlowLayout());
jd.setBounds(500,300,400,100);
JLabel jlabel = new JLabel("etes vous sûr de vouloir quitter ? ");
JButton oui = new JButton("oui");
oui.addActionListener(e -> {
System.exit(0);
jd.setVisible(false);
});
JButton non = new JButton("non");
non.addActionListener(e -> jd.setVisible(false));
jd.add(jlabel);
jd.add(oui);
jd.add(non);
jd.setVisible(true);
return JOptionPane.showOptionDialog(null, strings[MESSAGE],
strings[TITRE],
JOptionPane.YES_NO_OPTION,
JOptionPane.QUESTION_MESSAGE, null,
CHOIX, CHOIX[0]);
} }
} }
@@ -32,8 +32,8 @@ public class SelectionnerFichier {
final String DESCRIPTION = "PDF files (*.pdf)"; final String DESCRIPTION = "PDF files (*.pdf)";
final String EXTENSION = "pdf"; final String EXTENSION = "pdf";
final String BOUTON_OK = "Ouvrir"; final String BOUTON_OK = "Ouvrir";
final String INDICE_BOUTON_OK = "Ouvre le fichier sélectionné";
final String BOUTON_ANNULER = "Annuler"; final String BOUTON_ANNULER = "Annuler";
final String INDICE_BOUTON_OK = "Ouvre le fichier sélectionné";
final String INDICE_BOUTON_ANNULER = "Annule la sélection"; final String INDICE_BOUTON_ANNULER = "Annule la sélection";
/* Crée une fenêtre de sélection de fichier */ /* Crée une fenêtre de sélection de fichier */