From b6261915b78a635a43be502aeee191fc8dfcb7b8 Mon Sep 17 00:00:00 2001 From: Tristan Nogaret Date: Mon, 6 Dec 2021 22:39:40 +0100 Subject: [PATCH] Zoom, fermer, quitter, menu j'ai tout fait sah bon weekend --- LecteurPdfDoubleAffichage.iml | 6 +- src/lecteur_pdf/affichage/Fenetre.java | 7 +- src/lecteur_pdf/document/PDF.java | 1 - src/lecteur_pdf/document/Page.java | 12 +-- src/lecteur_pdf/menu/Menu.java | 111 +++++++++++++++++++++++-- 5 files changed, 119 insertions(+), 18 deletions(-) diff --git a/LecteurPdfDoubleAffichage.iml b/LecteurPdfDoubleAffichage.iml index ec0d6bb..70f263c 100644 --- a/LecteurPdfDoubleAffichage.iml +++ b/LecteurPdfDoubleAffichage.iml @@ -6,9 +6,9 @@ - + - + @@ -35,7 +35,5 @@ - - \ No newline at end of file diff --git a/src/lecteur_pdf/affichage/Fenetre.java b/src/lecteur_pdf/affichage/Fenetre.java index 7c689b1..b3bbe99 100644 --- a/src/lecteur_pdf/affichage/Fenetre.java +++ b/src/lecteur_pdf/affichage/Fenetre.java @@ -40,7 +40,7 @@ public class Fenetre extends JFrame { */ private File fichier; - private PDF documentPDF; + public PDF documentPDF; /** * TODO @@ -85,6 +85,7 @@ public class Fenetre extends JFrame { /* Crée l’élément scrollable */ JScrollPane scrollPane = new JScrollPane(pdfPanel); scrollPane.getVerticalScrollBar().setUnitIncrement(16); + scrollPane.getHorizontalScrollBar().setUnitIncrement(16); this.add(scrollPane, BorderLayout.CENTER); documentPDF = new PDF(fichier); @@ -105,7 +106,7 @@ public class Fenetre extends JFrame { /** * */ - public void rechargerPDF() { + public void rechargerPDF(float zoom) { dechargerPDF(); /* Crée le panel qui contient le document PDF */ @@ -113,9 +114,11 @@ public class Fenetre extends JFrame { /* Crée l’élément scrollable */ JScrollPane scrollPane = new JScrollPane(pdfPanel); scrollPane.getVerticalScrollBar().setUnitIncrement(16); + scrollPane.getHorizontalScrollBar().setUnitIncrement(16); this.add(scrollPane, BorderLayout.CENTER); documentPDF = new PDF(fichier); + documentPDF.setZoom(zoom); pdfPanel.add(documentPDF); /* Ajoute le scrollPane et le centre dans la page */ diff --git a/src/lecteur_pdf/document/PDF.java b/src/lecteur_pdf/document/PDF.java index 80a0872..00a8fa3 100644 --- a/src/lecteur_pdf/document/PDF.java +++ b/src/lecteur_pdf/document/PDF.java @@ -64,7 +64,6 @@ public class PDF extends JPanel { */ public void loadPages() { - for (int i = 0; i < pages.length; i++) { try { pages[i] = new Page(document, i, zoom); diff --git a/src/lecteur_pdf/document/Page.java b/src/lecteur_pdf/document/Page.java index aad2080..fdff2cc 100644 --- a/src/lecteur_pdf/document/Page.java +++ b/src/lecteur_pdf/document/Page.java @@ -56,7 +56,7 @@ public class Page extends JLabel { this.INDEX = index; this.ZOOM = 1.0f; - this.IMAGE_ICON = generateImage(document, ZOOM); + this.IMAGE_ICON = generateImage(document); /* Render */ this.setIcon(IMAGE_ICON); @@ -80,7 +80,7 @@ public class Page extends JLabel { this.INDEX = index; this.ZOOM = zoom; - this.IMAGE_ICON = generateImage(document, ZOOM); + this.IMAGE_ICON = generateImage(document); /* Render */ this.setIcon(IMAGE_ICON); @@ -107,16 +107,16 @@ public class Page extends JLabel { * @return JLabel contenant la page sous forme d’image * @throws IOException En cas d’erreur de lecture */ - private ImageIcon generateImage(PDDocument document, float scale) throws IOException { + private ImageIcon generateImage(PDDocument document) throws IOException { final int DPI = 120; - int imageScale = (scale > 1.0f) ? Image.SCALE_SMOOTH : Image.SCALE_FAST; + int imageScale = (ZOOM > 1.0f) ? Image.SCALE_SMOOTH : Image.SCALE_FAST; PDFRenderer pdfRenderer = new PDFRenderer(document); BufferedImage bufferedImage = pdfRenderer.renderImageWithDPI(INDEX, DPI); - this.largeur = (int)(bufferedImage.getWidth() * scale); - this.hauteur = (int)(bufferedImage.getHeight() * scale); + this.largeur = (int)(bufferedImage.getWidth() * ZOOM); + this.hauteur = (int)(bufferedImage.getHeight() * ZOOM); return new ImageIcon(bufferedImage.getScaledInstance(largeur, hauteur, imageScale)); diff --git a/src/lecteur_pdf/menu/Menu.java b/src/lecteur_pdf/menu/Menu.java index 63e1a41..ea356dc 100644 --- a/src/lecteur_pdf/menu/Menu.java +++ b/src/lecteur_pdf/menu/Menu.java @@ -7,6 +7,7 @@ package lecteur_pdf.menu; import lecteur_pdf.affichage.Fenetre; +import org.apache.pdfbox.pdmodel.PDDocument; import javax.swing.*; import java.awt.event.ActionEvent; @@ -49,7 +50,8 @@ public class Menu extends JMenuBar { this.fenetre = fenetre; createMenuFichier(); - // createMenuAfficher(); + createMenuOptions(); + createMenuAffichage(); } /** @@ -60,13 +62,15 @@ public class Menu extends JMenuBar { // Créer le Menu Fichier JMenu Fichier = new JMenu("Fichier"); - // Créer les items Ouvrir et Fermer + // Créer les items Ouvrir, Fermer et Quitter JMenuItem Ouvrir = new JMenuItem("Ouvrir"); JMenuItem Fermer = new JMenuItem("Fermer"); + JMenuItem Quitter = new JMenuItem("Quitter"); // Ajoute des Listener aux JMenuItem Ouvrir.addActionListener(this::actionPerformed); Fermer.addActionListener(this::actionPerformed); + Quitter.addActionListener(this::actionPerformed); // Définis les raccourcis KeyStroke raccourciOuvrir @@ -75,22 +79,105 @@ public class Menu extends JMenuBar { KeyStroke raccourciFermer = KeyStroke.getKeyStroke(KeyEvent.VK_Q, KeyEvent.CTRL_DOWN_MASK); Fermer.setAccelerator(raccourciFermer); + KeyStroke raccourciQuitter + = KeyStroke.getKeyStroke(KeyEvent.VK_X, KeyEvent.CTRL_DOWN_MASK); + Quitter.setAccelerator(raccourciQuitter); // Ajouter les éléments au menu "Fichier" Fichier.add(Ouvrir); Fichier.add(Fermer); + Fichier.add(Quitter); // Ajoute le menu "Fichier" dans la liste des menus menuList.add(Fichier); - // Ajoute Ouvrir et Fermer dans la liste des sous menu + // Ajoute Ouvrir, Fermer et Quitter dans la liste des sous menu itemList.add(Ouvrir); itemList.add(Fermer); + itemList.add(Quitter); // Ajoute le menu à la barre de menu this.add(Fichier); } + /** + * Créé le menu Options et ses sous-menus + */ + private void createMenuOptions() { + + // Créer le Menu + JMenu Options = new JMenu("Options"); + + // Créer l'item Préférences + JMenuItem Preferences = new JMenuItem("Préférences"); + + // Ajoute des Listener aux JMenuItem + Preferences.addActionListener(this::actionPerformed); + + // Définis les raccourcis + KeyStroke raccourciPreferences + = KeyStroke.getKeyStroke(KeyEvent.VK_P, KeyEvent.CTRL_DOWN_MASK); + Preferences.setAccelerator(raccourciPreferences); + + // Ajouter les éléments au menu "Options" + Options.add(Preferences); + + // Ajoute le menu "Affichage" dans la liste des menus + menuList.add(Options); + + // Ajoute Preferences dans la liste des sous menu + itemList.add(Preferences); + + // Ajoute le menu à la barre de menu + this.add(Options); + } + + /** + * Créé le menu Affichage et ses sous-menus + */ + private void createMenuAffichage() { + + // Créer le Menu Affichage + JMenu Affichage = new JMenu("Affichage"); + + // Créer les items de zoom + JMenuItem ZoomPlus = new JMenuItem("Zoom +"); + JMenuItem ZoomNeutre = new JMenuItem("Zoom 0"); + JMenuItem ZoomMinus = new JMenuItem("Zoom -"); + + // Ajoute des Listener aux JMenuItem + ZoomPlus.addActionListener(this::actionPerformed); + ZoomNeutre.addActionListener(this::actionPerformed); + ZoomMinus.addActionListener(this::actionPerformed); + + // Définis les raccourcis + KeyStroke raccourciZoomPlus + = KeyStroke.getKeyStroke(KeyEvent. VK_PLUS, KeyEvent.CTRL_DOWN_MASK); + ZoomPlus.setAccelerator(raccourciZoomPlus); + KeyStroke raccourciZoomNeutre + = KeyStroke.getKeyStroke(KeyEvent. VK_0, KeyEvent.CTRL_DOWN_MASK); + ZoomNeutre.setAccelerator(raccourciZoomNeutre); + KeyStroke raccourciZoomMinus + = KeyStroke.getKeyStroke(KeyEvent. VK_MINUS, KeyEvent.CTRL_DOWN_MASK); + ZoomMinus.setAccelerator(raccourciZoomMinus); + + // Ajouter les éléments au menu "Affichage" + Affichage.add(ZoomPlus); + Affichage.add(ZoomNeutre); + Affichage.add(ZoomMinus); + + // Ajoute le menu "Affichage" dans la liste des menus + menuList.add(Affichage); + + // Ajoute des zoom dans la liste des sous menu + itemList.add(ZoomPlus); + itemList.add(ZoomNeutre); + itemList.add(ZoomMinus); + + // Ajoute le menu à la barre de menu + this.add(Affichage); + } + /** * Méthode qui gère les actions des sous-menus * @@ -104,8 +191,22 @@ public class Menu extends JMenuBar { File fichier = SelectionnerFichier.ouvrirFichier(); fenetre.chargerPDF(fichier); } - case "Fermer" -> System.exit( - 0); // TODO à changer pour que ça quitte vraiment + case "Fermer" -> { + fenetre.dechargerPDF(); + fenetre.validate(); + fenetre.setSize(300, 300); + } + case "Quitter" -> System.exit( + 0); + case "Zoom +" -> { + fenetre.rechargerPDF(2.0f); + } + case "Zoom 0" -> { + fenetre.rechargerPDF(1.0f); + } + case "Zoom -" -> { + fenetre.rechargerPDF(0.5f); + } } }