mirror of
https://github.com/LucasVbr/LecteurPdfDoubleAffichage.git
synced 2026-05-13 17:11:51 +00:00
@@ -0,0 +1,28 @@
|
||||
package lecteur_pdf_swing;
|
||||
|
||||
import javax.swing.*;
|
||||
import java.io.File;
|
||||
import java.io.IOException;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
public class GestionPdf {
|
||||
private static final int maxPdf = 2;
|
||||
private static final List<IhmPdf> ihmPdfList = new ArrayList<IhmPdf>();
|
||||
|
||||
public static void newIhmPdf() {
|
||||
if (ihmPdfList.size() >= maxPdf) {
|
||||
throw new IllegalStateException();
|
||||
}
|
||||
|
||||
try {
|
||||
IhmPdf ihm = new IhmPdf(SelectionnerFichier.ouvrirFichier());
|
||||
ihmPdfList.add(ihm);
|
||||
} catch (IOException ignored) {}
|
||||
|
||||
}
|
||||
|
||||
public static void main(String[] args) {
|
||||
newIhmPdf();
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,95 @@
|
||||
/*
|
||||
* Ihm, 03/02/2022
|
||||
* IUT Rodez 2022, INFO2
|
||||
* pas de copyright, aucun droits
|
||||
*/
|
||||
|
||||
package lecteur_pdf_swing;
|
||||
|
||||
import lecteur_pdf_swing.menuBar.MenuBar;
|
||||
import lecteur_pdf_swing.menuBar.menuItems.FermerFichier;
|
||||
import lecteur_pdf_swing.pdf.PdfPanel;
|
||||
|
||||
import javax.swing.*;
|
||||
import java.awt.*;
|
||||
import java.io.File;
|
||||
import java.io.IOException;
|
||||
|
||||
/**
|
||||
* TODO A compléter
|
||||
*
|
||||
* @author lucas
|
||||
*/
|
||||
public class IhmPdf extends JFrame {
|
||||
|
||||
PdfPanel pdfPanel;
|
||||
MenuBar menuBar;
|
||||
|
||||
public IhmPdf(File pdfFile) throws IOException {
|
||||
super(pdfFile.getName());
|
||||
|
||||
/* Déclaration des attributs */
|
||||
menuBar = new MenuBar(this);
|
||||
pdfPanel = new PdfPanel(pdfFile);
|
||||
|
||||
/* Hierarchie */
|
||||
setContentPane(pdfPanel);
|
||||
setJMenuBar(menuBar);
|
||||
|
||||
/* Render de la Frame */
|
||||
setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
|
||||
pack();
|
||||
setVisible(true);
|
||||
}
|
||||
|
||||
public void fermerFichier() {
|
||||
try {
|
||||
pdfPanel = new PdfPanel(null);
|
||||
validate();
|
||||
} catch (IOException ignored) {
|
||||
}
|
||||
}
|
||||
|
||||
public void ouvrirFichier() throws IOException {
|
||||
File fichier = SelectionnerFichier.ouvrirFichier();
|
||||
pdfPanel = new PdfPanel(fichier);
|
||||
validate();
|
||||
}
|
||||
|
||||
private boolean fullscreen = false;
|
||||
private GraphicsDevice device;
|
||||
|
||||
public void pleinEcran() {
|
||||
// Switch de disposition
|
||||
fullscreen = !fullscreen;
|
||||
if (fullscreen) { // Set fullscreen
|
||||
GraphicsEnvironment graphics =
|
||||
GraphicsEnvironment.getLocalGraphicsEnvironment();
|
||||
device = graphics.getDefaultScreenDevice();
|
||||
device.setFullScreenWindow(this);
|
||||
} else { // remove fullscreen
|
||||
device.setFullScreenWindow(null);
|
||||
setUndecorated(false);
|
||||
setVisible(true);
|
||||
}
|
||||
}
|
||||
|
||||
public void quitter() {
|
||||
dispose();
|
||||
}
|
||||
|
||||
public void zoomDefaut() {
|
||||
pdfPanel.updateScale(1.0f);
|
||||
validate();
|
||||
}
|
||||
|
||||
public void zoomMoins() {
|
||||
pdfPanel.updateScale(0.5f);
|
||||
validate();
|
||||
}
|
||||
|
||||
public void zoomPlus() {
|
||||
pdfPanel.updateScale(1.5f);
|
||||
validate();
|
||||
}
|
||||
}
|
||||
@@ -1,21 +0,0 @@
|
||||
/*
|
||||
* LecteurPDFDoubleAffichage.java, 08/12/2021
|
||||
* IUT Rodez 2021-2021, INFO2
|
||||
* pas de copyright, aucun droits
|
||||
*/
|
||||
|
||||
package lecteur_pdf;
|
||||
|
||||
import lecteur_pdf.affichage.Fenetre;
|
||||
|
||||
/**
|
||||
* Classe qui lance le lecteur PDF
|
||||
*/
|
||||
public class LecteurPDFDoubleAffichage {
|
||||
/**
|
||||
* Crée une nouvelle instance du lecteur PDF
|
||||
*
|
||||
* @param args non utilisé
|
||||
*/
|
||||
public static void main(String[] args) {new Fenetre();}
|
||||
}
|
||||
+2
-1
@@ -3,7 +3,8 @@
|
||||
* IUT Rodez 2021-2021, INFO2
|
||||
* pas de copyright, aucun droits
|
||||
*/
|
||||
package lecteur_pdf.menu;
|
||||
|
||||
package lecteur_pdf_swing;
|
||||
|
||||
import javax.swing.*;
|
||||
import javax.swing.filechooser.FileNameExtensionFilter;
|
||||
@@ -1,212 +0,0 @@
|
||||
/*
|
||||
* Fenetre, 22/11/2021
|
||||
* IUT Rodez 2021, INFO2
|
||||
* pas de copyright, aucun droits
|
||||
*/
|
||||
|
||||
package lecteur_pdf.affichage;
|
||||
|
||||
import lecteur_pdf.document.PDF;
|
||||
import lecteur_pdf.menu.Menu;
|
||||
|
||||
import javax.swing.*;
|
||||
import java.awt.*;
|
||||
import java.io.File;
|
||||
import java.io.IOException;
|
||||
|
||||
/**
|
||||
* classe correspondant à l’objet Fenêtre
|
||||
*
|
||||
* @author Léo FRANCH
|
||||
* @author Tristan NOGARET
|
||||
* @author Lucàs VABRE
|
||||
* @author Noé VILLENEUVE
|
||||
* @version 1.0
|
||||
*/
|
||||
public class Fenetre extends JFrame {
|
||||
|
||||
/** Titre de la fenêtre */
|
||||
private final String TITRE = "Lecteur PDF";
|
||||
|
||||
/** Le menu de la fenêtre */
|
||||
private Menu menu;
|
||||
|
||||
/** Le fichier courant */
|
||||
private File fichier;
|
||||
|
||||
/** Le document PDF courant */
|
||||
public PDF documentPDF;
|
||||
|
||||
/** Définit la disposition d'affichage des pages du document PDF */
|
||||
private boolean affichageVertical;
|
||||
|
||||
/** Définit l'état de la fenêtre, true si la fenêtre est en plein écran */
|
||||
private boolean fullscreen;
|
||||
|
||||
/**
|
||||
* Crée une nouvelle fenêtre contenant un Menu
|
||||
*/
|
||||
public Fenetre() {
|
||||
|
||||
/* Change le style de la fenêtre */
|
||||
try {
|
||||
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
|
||||
} catch (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
|
||||
/* Création du menu */
|
||||
menu = new Menu(this);
|
||||
this.setJMenuBar(menu);
|
||||
|
||||
/* permet de définir le mode plein écran comme désactivé lors du
|
||||
lancement de la fenêtre */
|
||||
fullscreen = false;
|
||||
|
||||
/* Définis l'affichage Vertical comme affichage par défaut */
|
||||
this.affichageVertical = true;
|
||||
|
||||
/* Initialise l'état par défaut de la fenêtre */
|
||||
setup();
|
||||
}
|
||||
|
||||
/**
|
||||
* Fonction utilitaire qui permet de définir l'état par défaut de la fenêtre
|
||||
*/
|
||||
public void setup() {
|
||||
setTitle(TITRE);
|
||||
|
||||
setSize(300, 300);
|
||||
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
|
||||
setLocationRelativeTo(null);
|
||||
setVisible(true);
|
||||
|
||||
dechargerPDF();
|
||||
revalidate();
|
||||
repaint();
|
||||
}
|
||||
|
||||
/**
|
||||
* Charge le document PDF courant si possible
|
||||
*
|
||||
* @throws IOException Si l'on arrive pas a charger le PDF
|
||||
*/
|
||||
public void chargerPDF() throws IOException {
|
||||
if (haveDocument()) chargerPDF(fichier, 1.0f);
|
||||
this.setExtendedState(JFrame.MAXIMIZED_BOTH);
|
||||
}
|
||||
|
||||
/**
|
||||
* Charge le document PDF courant avec un zoom spécifique si possible
|
||||
*
|
||||
* @param zoom La taille du zoom sur les pages
|
||||
* @throws IOException Si l'on arrive pas a charger le PDF
|
||||
*/
|
||||
public void chargerPDF(float zoom) throws IOException {
|
||||
if (haveDocument()) chargerPDF(fichier, zoom);
|
||||
this.setExtendedState(JFrame.MAXIMIZED_BOTH);
|
||||
}
|
||||
|
||||
/**
|
||||
* Charge un document PDF
|
||||
*
|
||||
* @param fichier Le fichier PDF à afficher dans la fenêtre
|
||||
* @throws IOException Si l'on arrive pas a charger le PDF
|
||||
*/
|
||||
public void chargerPDF(File fichier) throws IOException {
|
||||
chargerPDF(fichier, 1.0f);
|
||||
this.setExtendedState(JFrame.MAXIMIZED_BOTH);
|
||||
}
|
||||
|
||||
/**
|
||||
* Charge un document PDF
|
||||
*
|
||||
* @param fichier Le fichier PDF à afficher dans la fenêtre
|
||||
* @param zoom La taille du zoom sur les pages
|
||||
* @throws IOException Si l'on arrive pas a charger le PDF
|
||||
*/
|
||||
public void chargerPDF(File fichier, float zoom) throws IOException {
|
||||
dechargerPDF();
|
||||
|
||||
this.fichier = fichier;
|
||||
|
||||
/* Crée le panel qui contient le document PDF */
|
||||
JPanel pdfPanel = new JPanel();
|
||||
/* 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, affichageVertical);
|
||||
documentPDF.setZoom(zoom);
|
||||
pdfPanel.add(documentPDF);
|
||||
|
||||
/* Met à jour la page */
|
||||
this.setTitle(TITRE + " | " + fichier.getName());
|
||||
this.validate();
|
||||
this.pack();
|
||||
this.setLocationRelativeTo(null);
|
||||
this.setExtendedState(JFrame.MAXIMIZED_BOTH);
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* Supprime le PDF de la fenêtre
|
||||
*/
|
||||
public void dechargerPDF() {
|
||||
if (this.getContentPane() != null) {
|
||||
this.getContentPane().removeAll();
|
||||
documentPDF = null;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Prédicat qui vérifie si un PDF est affiché dans la fenêtre
|
||||
*
|
||||
* @return true si le prédicat est vérifié, false sinon
|
||||
*/
|
||||
public boolean haveDocument() {
|
||||
return documentPDF != null;
|
||||
}
|
||||
|
||||
/**
|
||||
* Définis le mode d'affichage du PDF
|
||||
*
|
||||
* @param affichageVertical true pour un affichage Vertical, false pour
|
||||
* un affichage horizontal
|
||||
*/
|
||||
public void setAffichageVertical(boolean affichageVertical) {
|
||||
this.affichageVertical = affichageVertical;
|
||||
}
|
||||
|
||||
/**
|
||||
* Prédicat qui vérifie si la fenêtre est en mode plein écran
|
||||
* @return true si le prédicat est vérifié, false sinon
|
||||
*/
|
||||
public boolean isFullscreen() {
|
||||
return fullscreen;
|
||||
}
|
||||
|
||||
/**
|
||||
* Affiche la fenêtre en plein écran lorsqu'elle ne l'est pas et repasse
|
||||
* en mode fenêtré si le mode plein écran est activé
|
||||
*/
|
||||
public void setFullscreen() {
|
||||
GraphicsEnvironment graphics =
|
||||
GraphicsEnvironment.getLocalGraphicsEnvironment();
|
||||
GraphicsDevice device = graphics.getDefaultScreenDevice();
|
||||
|
||||
dispose();
|
||||
fullscreen = !fullscreen;
|
||||
if (fullscreen) {
|
||||
setUndecorated(true);
|
||||
device.setFullScreenWindow(this);
|
||||
} else {
|
||||
device.setFullScreenWindow(null);
|
||||
setUndecorated(false);
|
||||
}
|
||||
setVisible(true);
|
||||
repaint();
|
||||
}
|
||||
}
|
||||
@@ -1,48 +0,0 @@
|
||||
///*
|
||||
// * gestionFenetre, 22/11/2021
|
||||
// * IUT Rodez 2021, INFO2
|
||||
// * pas de copyright, aucun droits
|
||||
// */
|
||||
//
|
||||
//package lecteur_pdf.affichage;
|
||||
//
|
||||
//import javax.swing.*;
|
||||
//import java.io.File;
|
||||
//
|
||||
///**
|
||||
// * classe de gestion des fenêtres
|
||||
// *
|
||||
// * @author Léo FRANCH
|
||||
// * @author Tristan NOGARET
|
||||
// * @author Lucàs VABRE
|
||||
// * @author Noé VILLENEUVE
|
||||
// * @version 1.0
|
||||
// */
|
||||
//public class gestionFenetre {
|
||||
//
|
||||
// final int NB_MAX_FENETRE = 2 ;
|
||||
// private Fenetre[] fenetresOuvertes;
|
||||
// File fichier = null ;
|
||||
//
|
||||
//
|
||||
// public void ouvrirFenetre(){
|
||||
// int placeVide;
|
||||
// for (placeVide=0; placeVide<2; placeVide++){
|
||||
// if (fenetresOuvertes[placeVide] == null) break;
|
||||
// }
|
||||
// if(placeVide==2) {
|
||||
// //todo erreur trop de fenetres
|
||||
// }else {
|
||||
// Fenetre fenetre = new Fenetre();
|
||||
// fenetresOuvertes[placeVide] = fenetre;
|
||||
// }
|
||||
// }
|
||||
// public void fermerFenetre(JFrame fenetre){
|
||||
// for (int i = 0; i<2 ; i++){
|
||||
// if (fenetre==fenetresOuvertes[i]){
|
||||
// fenetre.dispose();
|
||||
// fenetresOuvertes[i]= null ;
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
//}
|
||||
@@ -1,75 +0,0 @@
|
||||
/*
|
||||
* PDF, 17/11/2021
|
||||
* IUT Rodez 2021, INFO2
|
||||
* pas de copyright, aucun droits
|
||||
*/
|
||||
|
||||
package lecteur_pdf.document;
|
||||
|
||||
import org.apache.pdfbox.pdmodel.PDDocument;
|
||||
|
||||
import javax.swing.*;
|
||||
import java.awt.*;
|
||||
import java.io.File;
|
||||
import java.io.IOException;
|
||||
|
||||
/**
|
||||
* Définis virtuellement un fichier PDF
|
||||
*
|
||||
* @author Léo FRANCH
|
||||
* @author Tristan NOGARET
|
||||
* @author Lucàs VABRE
|
||||
* @author Noé VILLENEUVE
|
||||
*/
|
||||
public class PDF extends JPanel {
|
||||
|
||||
/** Document chargé */
|
||||
private final PDDocument document;
|
||||
|
||||
/** Les pages chargés */
|
||||
private final Page[] pages;
|
||||
|
||||
/** Le zoom des pages du document */
|
||||
private float zoom;
|
||||
|
||||
/**
|
||||
* Crée un document PDF affichable dans une fenêtre
|
||||
*
|
||||
* @param fichier Le fichier que l’on veut ouvrir
|
||||
* @param vertical booléen si true, affiche les pages en vertical,
|
||||
* sinon horizontal
|
||||
* @throws IOException si le fichier n’existe pas
|
||||
*/
|
||||
public PDF(File fichier, boolean vertical) throws IOException {
|
||||
document = PDDocument.load(fichier);
|
||||
pages = new Page[document.getNumberOfPages()];
|
||||
zoom = 1.0f;
|
||||
setAlignmentX(Component.CENTER_ALIGNMENT);
|
||||
if (vertical) setLayout(new BoxLayout(this, BoxLayout.Y_AXIS));
|
||||
}
|
||||
|
||||
/**
|
||||
* Charge toutes les pages du document PDF et les stocke dans le tableau
|
||||
*/
|
||||
public void loadPages() {
|
||||
|
||||
for (int i = 0; i < pages.length; i++) {
|
||||
try {
|
||||
pages[i] = new Page(document, i, zoom);
|
||||
this.add(pages[i]);
|
||||
} catch (IOException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Défini le zoom des pages du document
|
||||
*
|
||||
* @param zoom la nouvelle valeur du zoom (1.0f == 100%)
|
||||
*/
|
||||
public void setZoom(float zoom) {
|
||||
this.zoom = zoom;
|
||||
loadPages();
|
||||
}
|
||||
}
|
||||
@@ -1,120 +0,0 @@
|
||||
/*
|
||||
* Page, 17/11/2021
|
||||
* IUT Rodez 2021, INFO2
|
||||
* pas de copyright, aucun droits
|
||||
*/
|
||||
|
||||
package lecteur_pdf.document;
|
||||
|
||||
import org.apache.pdfbox.pdmodel.PDDocument;
|
||||
import org.apache.pdfbox.rendering.PDFRenderer;
|
||||
|
||||
import javax.swing.*;
|
||||
import java.awt.*;
|
||||
import java.awt.image.BufferedImage;
|
||||
import java.io.IOException;
|
||||
|
||||
/**
|
||||
* Page générée virtuellement pour l’affichage avec java swing
|
||||
*
|
||||
* @author Léo FRANCH
|
||||
* @author Tristan NOGARET
|
||||
* @author Lucàs VABRE
|
||||
* @author Noé VILLENEUVE
|
||||
*/
|
||||
public class Page extends JLabel {
|
||||
|
||||
/** Indice de la page dans le document */
|
||||
private final int INDEX;
|
||||
|
||||
/** Zoom de la page (1.0f == 100 %, 0.5 == 50%, ...) */
|
||||
private final float ZOOM;
|
||||
|
||||
/** Image de la page générée */
|
||||
private final ImageIcon IMAGE_ICON;
|
||||
|
||||
/**
|
||||
* Crée une page virtuellement pour l’afficher avec java swing
|
||||
*
|
||||
* @param document Document pdf
|
||||
* @param index indice de la page
|
||||
* @throws IllegalArgumentException Si les arguments ne sont pas valides
|
||||
* @throws IOException Si la page n’as pas pu être lue
|
||||
*/
|
||||
public Page(PDDocument document, int index) throws
|
||||
IllegalArgumentException,
|
||||
IOException {
|
||||
if (!isValid(document, index)) {
|
||||
throw new IllegalArgumentException();
|
||||
}
|
||||
|
||||
this.INDEX = index;
|
||||
this.ZOOM = 1.0f;
|
||||
this.IMAGE_ICON = generateImage(document);
|
||||
|
||||
/* Render */
|
||||
this.setIcon(IMAGE_ICON);
|
||||
}
|
||||
|
||||
/**
|
||||
* Crée une page virtuellement pour l’afficher avec java swing
|
||||
*
|
||||
* @param document Document pdf
|
||||
* @param index indice de la page
|
||||
* @param zoom Le zoom de la page
|
||||
* @throws IllegalArgumentException Si les arguments ne sont pas valides
|
||||
* @throws IOException Si la page n’as pas pu être lue
|
||||
*/
|
||||
public Page(PDDocument document, int index, float zoom) throws
|
||||
IllegalArgumentException,
|
||||
IOException {
|
||||
if (!isValid(document, index)) throw new IllegalArgumentException();
|
||||
|
||||
this.INDEX = index;
|
||||
this.ZOOM = zoom;
|
||||
this.IMAGE_ICON = generateImage(document); // Génère la page
|
||||
|
||||
/* Fait le rendu de la page */
|
||||
this.setIcon(IMAGE_ICON);
|
||||
}
|
||||
|
||||
/**
|
||||
* Prédicat qui vérifie si une page est valide
|
||||
* Le document ne doit pas être null et l’index doit être compris entre 0
|
||||
* et le nombre de pages du pdf.
|
||||
*
|
||||
* @param document Document pdf
|
||||
* @param index indice de la page
|
||||
* @return true si le prédicat est vérifié, false sinon
|
||||
*/
|
||||
private boolean isValid(PDDocument document, int index) {
|
||||
return document != null && 0 <= index
|
||||
&& index < document.getNumberOfPages();
|
||||
}
|
||||
|
||||
/**
|
||||
* Génère une image de la page
|
||||
*
|
||||
* @param document Document PDF
|
||||
* @return JLabel contenant la page sous forme d’image
|
||||
* @throws IOException En cas d’erreur de lecture
|
||||
*/
|
||||
private ImageIcon generateImage(PDDocument document) throws IOException {
|
||||
|
||||
/* Défini la qualité de l’image par rapport au zoom */
|
||||
final int DPI = 120;
|
||||
int imageScale = (ZOOM > 1.0f) ? Image.SCALE_SMOOTH : Image.SCALE_FAST;
|
||||
|
||||
/* Crée une image de la page à afficher */
|
||||
PDFRenderer pdfRenderer = new PDFRenderer(document);
|
||||
BufferedImage bufferedImage = pdfRenderer.renderImageWithDPI(INDEX, DPI);
|
||||
|
||||
/* Redimensionne l'image */
|
||||
final int LARGEUR = (int)(bufferedImage.getWidth() * ZOOM);
|
||||
final int HAUTEUR = (int)(bufferedImage.getHeight() * ZOOM);
|
||||
|
||||
/* Retourne l’image à la bonne taille */
|
||||
return new ImageIcon(bufferedImage.getScaledInstance(LARGEUR, HAUTEUR,
|
||||
imageScale));
|
||||
}
|
||||
}
|
||||
@@ -1,46 +0,0 @@
|
||||
/*
|
||||
* KeyBinding.java, 18/11/2021
|
||||
* IUT Rodez 2021-2021, INFO2
|
||||
* pas de copyright, aucun droits
|
||||
*/
|
||||
|
||||
package lecteur_pdf.menu;
|
||||
|
||||
import javax.swing.*;
|
||||
import java.util.ArrayList;
|
||||
|
||||
/**
|
||||
* TODO class comment
|
||||
*
|
||||
* @author Léo FRANCH
|
||||
* @author Tristan NOGARET
|
||||
* @author Lucàs VABRE
|
||||
* @author Noé VILLENEUVE
|
||||
* @version 1.0
|
||||
*/
|
||||
public class KeyBinding {
|
||||
|
||||
/* Déclaration des éléments visuels */
|
||||
JFrame frame = new JFrame();
|
||||
JLabel label = new JLabel();
|
||||
|
||||
/* Déclaration des listes */
|
||||
ArrayList<String> listeOptions;
|
||||
ArrayList<KeyStroke> listeRaccourcis;
|
||||
|
||||
/**
|
||||
* TODO commenter la méthode
|
||||
*/
|
||||
public void KeyBinding() {
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* TODO commenter la méthode
|
||||
* @param key
|
||||
* @param menuItem
|
||||
*/
|
||||
public void setMenuItemAccelerator(KeyStroke key, JMenuItem menuItem) {
|
||||
// TODO
|
||||
}
|
||||
}
|
||||
@@ -1,377 +0,0 @@
|
||||
/*
|
||||
* Menu.java, 20/11/2021
|
||||
* IUT Rodez 2021-2021, INFO2
|
||||
* pas de copyright, aucun droits
|
||||
*/
|
||||
|
||||
package lecteur_pdf.menu;
|
||||
|
||||
import lecteur_pdf.affichage.Fenetre;
|
||||
|
||||
import javax.swing.*;
|
||||
import java.awt.event.ActionEvent;
|
||||
import java.awt.event.KeyEvent;
|
||||
import java.io.File;
|
||||
import java.io.IOException;
|
||||
import java.util.ArrayList;
|
||||
|
||||
/**
|
||||
* Classe pour afficher le Menu "Fichier" avec ses options
|
||||
*
|
||||
* @author Léo FRANCH
|
||||
* @author Tristan NOGARET
|
||||
* @author Lucàs VABRE
|
||||
* @author Noé VILLENEUVE
|
||||
* @version 1.0
|
||||
*/
|
||||
public class Menu extends JMenuBar {
|
||||
|
||||
/**
|
||||
* La Fenêtre mère de la barre des menus
|
||||
*/
|
||||
private final Fenetre FENETRE;
|
||||
|
||||
/**
|
||||
* Liste contenant les différents menus
|
||||
*/
|
||||
private final ArrayList<JMenu> MENU_LIST = new ArrayList<>();
|
||||
|
||||
/**
|
||||
* Liste contenant les différents sous menus
|
||||
*/
|
||||
private final ArrayList<JMenuItem> ITEM_LIST = new ArrayList<>();
|
||||
|
||||
/**
|
||||
* Constructeur du menu
|
||||
*
|
||||
* @param fenetre La Fenêtre mère de la barre des menus
|
||||
*/
|
||||
public Menu(Fenetre fenetre) {
|
||||
this.FENETRE = fenetre;
|
||||
|
||||
createMenuFichier();
|
||||
// createMenuOptions();
|
||||
createMenuAffichage();
|
||||
}
|
||||
|
||||
/**
|
||||
* Créé le menu Fichier et ses sous-menus
|
||||
*/
|
||||
private void createMenuFichier() {
|
||||
|
||||
// Créer le Menu Fichier
|
||||
JMenu Fichier = new JMenu("Fichier");
|
||||
|
||||
// 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 actionListener aux JMenuItem
|
||||
Ouvrir.addActionListener(this::actionPerformed);
|
||||
Fermer.addActionListener(this::actionPerformed);
|
||||
Quitter.addActionListener(this::actionPerformed);
|
||||
|
||||
// Définis les raccourcis
|
||||
KeyStroke raccourciOuvrir = KeyStroke.getKeyStroke(KeyEvent.VK_O,
|
||||
KeyEvent.CTRL_DOWN_MASK);
|
||||
Ouvrir.setAccelerator(raccourciOuvrir);
|
||||
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);
|
||||
|
||||
// Ajout des éléments au menu "Fichier"
|
||||
Fichier.add(Ouvrir);
|
||||
Fichier.add(Fermer);
|
||||
Fichier.add(Quitter);
|
||||
|
||||
// Ajoute le menu "Fichier" dans la liste des menus
|
||||
MENU_LIST.add(Fichier);
|
||||
|
||||
// Ajoute Ouvrir, Fermer et Quitter dans la liste des items
|
||||
ITEM_LIST.add(Ouvrir);
|
||||
ITEM_LIST.add(Fermer);
|
||||
ITEM_LIST.add(Quitter);
|
||||
|
||||
// Ajoute le menu à la barre de menu
|
||||
this.add(Fichier);
|
||||
}
|
||||
|
||||
/**
|
||||
* Menu Options, pas fini, à faire dans les prochains sprints
|
||||
*/
|
||||
// /**
|
||||
// * Créé le menu Options et ses sous-menus
|
||||
// */
|
||||
// private void createMenuOptions() {
|
||||
//
|
||||
// // Créer le Menu Options
|
||||
// JMenu Options = new JMenu("Options");
|
||||
//
|
||||
// // Créer l'item Préférences
|
||||
// JMenuItem Preferences = new JMenuItem("Préférences");
|
||||
//
|
||||
// // Ajout du Listener au 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
|
||||
// MENU_LIST.add(Options);
|
||||
//
|
||||
// // Ajoute Preferences dans la liste des items
|
||||
// ITEM_LIST.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, plein écran et affichage horizontal ou vertical
|
||||
JMenuItem PleinEcran = new JMenuItem("Mode plein écran");
|
||||
JMenuItem ZoomPlus = new JMenuItem("Zoom 150%");
|
||||
JMenuItem ZoomNeutre = new JMenuItem("Zoom 100%");
|
||||
JMenuItem ZoomMinus = new JMenuItem("Zoom 50%");
|
||||
JMenuItem affichageVertical = new JMenuItem("Disposition Verticale");
|
||||
JMenuItem affichageHorizontal = new JMenuItem("Disposition Horizontale");
|
||||
|
||||
// Ajoute des actionListener aux JMenuItem
|
||||
PleinEcran.addActionListener(this::actionPerformed);
|
||||
ZoomPlus.addActionListener(this::actionPerformed);
|
||||
ZoomNeutre.addActionListener(this::actionPerformed);
|
||||
ZoomMinus.addActionListener(this::actionPerformed);
|
||||
affichageVertical.addActionListener(this::actionPerformed);
|
||||
affichageHorizontal.addActionListener(this::actionPerformed);
|
||||
|
||||
// Définis les raccourcis des différents JMenuItems
|
||||
KeyStroke raccourciPleinEcran = KeyStroke.getKeyStroke(KeyEvent.VK_F11,
|
||||
0);
|
||||
PleinEcran.setAccelerator(raccourciPleinEcran);
|
||||
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);
|
||||
KeyStroke raccourciAffVert = KeyStroke.getKeyStroke(KeyEvent.VK_V,
|
||||
KeyEvent.CTRL_DOWN_MASK);
|
||||
affichageVertical.setAccelerator(raccourciAffVert);
|
||||
KeyStroke raccourciAffHor = KeyStroke.getKeyStroke(KeyEvent.VK_H,
|
||||
KeyEvent.CTRL_DOWN_MASK);
|
||||
affichageHorizontal.setAccelerator(raccourciAffHor);
|
||||
|
||||
// Ajout des éléments au menu "Affichage"
|
||||
Affichage.add(PleinEcran);
|
||||
Affichage.addSeparator();
|
||||
Affichage.add(ZoomPlus);
|
||||
Affichage.add(ZoomNeutre);
|
||||
Affichage.add(ZoomMinus);
|
||||
Affichage.addSeparator();
|
||||
Affichage.add(affichageVertical);
|
||||
Affichage.add(affichageHorizontal);
|
||||
|
||||
// Ajoute le menu "Affichage" dans la liste des menus
|
||||
MENU_LIST.add(Affichage);
|
||||
|
||||
// Ajoute les JMenuItem dans la liste des items
|
||||
ITEM_LIST.add(PleinEcran);
|
||||
ITEM_LIST.add(ZoomPlus);
|
||||
ITEM_LIST.add(ZoomNeutre);
|
||||
ITEM_LIST.add(ZoomMinus);
|
||||
ITEM_LIST.add(affichageVertical);
|
||||
ITEM_LIST.add(affichageHorizontal);
|
||||
|
||||
|
||||
// Ajoute le menu à la barre de menu
|
||||
this.add(Affichage);
|
||||
}
|
||||
|
||||
/**
|
||||
* Méthode qui gère les actions des sous-menus
|
||||
*
|
||||
* @param ae un action event
|
||||
*/
|
||||
public void actionPerformed(ActionEvent ae) {
|
||||
String choice = ae.getActionCommand();
|
||||
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;
|
||||
|
||||
/* Message sur les popups d'erreurs */
|
||||
final String[][] POPUPS_MSG = {
|
||||
{"Fermer le PDF actuel", "Êtes-vous sûr de vouloir fermer le PDF "
|
||||
+ "courant ?"},
|
||||
{"Quitter l'application", "Êtes-vous sûr de vouloir quitter ?"}
|
||||
};
|
||||
|
||||
switch (choice) {
|
||||
// Cas où l'utilisateur clique sur ouvrir
|
||||
case "Ouvrir" -> {
|
||||
if (FENETRE.isFullscreen()) {
|
||||
FENETRE.setFullscreen();
|
||||
}
|
||||
|
||||
if (FENETRE.haveDocument()
|
||||
&& popupConfirmation(POPUPS_MSG[FERMER])
|
||||
!= JOptionPane.OK_OPTION) {
|
||||
break;
|
||||
}
|
||||
File fichier = SelectionnerFichier.ouvrirFichier();
|
||||
|
||||
if (fichier != null) {
|
||||
try {
|
||||
FENETRE.chargerPDF(fichier);
|
||||
} catch (IOException e) {
|
||||
JOptionPane.showMessageDialog(FENETRE,
|
||||
messageErrCorrompu);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Cas où l'utilisateur clique sur fermer
|
||||
case "Fermer" -> {
|
||||
if (FENETRE.isFullscreen()) {
|
||||
FENETRE.setFullscreen();
|
||||
}
|
||||
if (FENETRE.haveDocument()
|
||||
&& popupConfirmation(POPUPS_MSG[FERMER])
|
||||
== JOptionPane.OK_OPTION) {
|
||||
FENETRE.setup();
|
||||
}
|
||||
}
|
||||
|
||||
// Cas où l'utilisateur clique sur quitter
|
||||
case "Quitter" -> {
|
||||
if (FENETRE.isFullscreen()) {
|
||||
FENETRE.setFullscreen();
|
||||
}
|
||||
int option = popupConfirmation(POPUPS_MSG[QUITTER]);
|
||||
|
||||
if (option == JOptionPane.OK_OPTION) {
|
||||
System.exit(0);
|
||||
}
|
||||
}
|
||||
|
||||
// Cas où l'utilisateur clique sur mode plein écran
|
||||
case "Mode plein écran" -> FENETRE.setFullscreen();
|
||||
|
||||
// Cas où l'utilisateur clique sur zoom 150%
|
||||
case "Zoom 150%" -> {
|
||||
try {
|
||||
FENETRE.chargerPDF(2.0f);
|
||||
} catch (IOException e) {
|
||||
JOptionPane.showMessageDialog(FENETRE, messageErrCorrompu);
|
||||
}
|
||||
}
|
||||
|
||||
// Cas où l'utilisateur clique sur zoom 100%
|
||||
case "Zoom 100%" -> {
|
||||
try {
|
||||
FENETRE.chargerPDF(1.0f);
|
||||
} catch (IOException e) {
|
||||
JOptionPane.showMessageDialog(FENETRE, messageErrCorrompu);
|
||||
}
|
||||
}
|
||||
|
||||
// Cas où l'utilisateur clique sur zoom 50%
|
||||
case "Zoom 50%" -> {
|
||||
try {
|
||||
FENETRE.chargerPDF(0.5f);
|
||||
} catch (IOException e) {
|
||||
JOptionPane.showMessageDialog(FENETRE, messageErrCorrompu);
|
||||
}
|
||||
}
|
||||
|
||||
// Cas où l'utilisateur clique sur dispotion verticale
|
||||
case "Disposition Verticale" -> {
|
||||
if (FENETRE.haveDocument()) {
|
||||
FENETRE.setAffichageVertical(true);
|
||||
try {
|
||||
FENETRE.chargerPDF();
|
||||
} catch (IOException e) {
|
||||
JOptionPane.showMessageDialog(FENETRE, messageErrCorrompu);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Cas où l'utilisateur clique sur dispotion horizontale
|
||||
case "Disposition Horizontale" -> {
|
||||
if (FENETRE.haveDocument()) {
|
||||
FENETRE.setAffichageVertical(false);
|
||||
try {
|
||||
FENETRE.chargerPDF();
|
||||
} catch (IOException e) {
|
||||
JOptionPane.showMessageDialog(FENETRE, messageErrCorrompu);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @return la liste des JMenuItem
|
||||
*/
|
||||
public ArrayList<JMenuItem> getMenuItems() {
|
||||
return ITEM_LIST;
|
||||
}
|
||||
|
||||
/**
|
||||
* Methode qui renvoie le sous menu demandé avec l'index adéquat
|
||||
*
|
||||
* @param index Indice du sous menu
|
||||
* @return Le sous menu demandé
|
||||
*/
|
||||
public JMenuItem getMenuItem(int 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;
|
||||
}
|
||||
|
||||
final int TITRE = 0;
|
||||
final int MESSAGE = 1;
|
||||
|
||||
final Object[] CHOIX = {"Oui", "Non"};
|
||||
|
||||
return JOptionPane.showOptionDialog(null, strings[MESSAGE],
|
||||
strings[TITRE],
|
||||
JOptionPane.YES_NO_OPTION,
|
||||
JOptionPane.QUESTION_MESSAGE, null,
|
||||
CHOIX, CHOIX[0]);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,16 @@
|
||||
package lecteur_pdf_swing.menuBar;
|
||||
|
||||
import lecteur_pdf_swing.IhmPdf;
|
||||
import lecteur_pdf_swing.menuBar.menu.*;
|
||||
|
||||
import javax.swing.*;
|
||||
|
||||
public class MenuBar extends JMenuBar {
|
||||
|
||||
public MenuBar(IhmPdf parent) {
|
||||
|
||||
add(new MenuFichier(parent));
|
||||
add(new MenuAffichage(parent));
|
||||
add(new MenuOptions());
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,20 @@
|
||||
package lecteur_pdf_swing.menuBar.menu;
|
||||
|
||||
import lecteur_pdf_swing.IhmPdf;
|
||||
import lecteur_pdf_swing.menuBar.menuItems.*;
|
||||
|
||||
import javax.swing.*;
|
||||
|
||||
public class MenuAffichage extends JMenu {
|
||||
|
||||
public MenuAffichage(IhmPdf parent) {
|
||||
super("Affichage");
|
||||
// Ajouter les menu items
|
||||
add(new PleinEcran(parent));
|
||||
addSeparator();
|
||||
add(new ZoomPlus(parent));
|
||||
add(new ZoomDefaut(parent));
|
||||
add(new ZoomMoins(parent));
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,16 @@
|
||||
package lecteur_pdf_swing.menuBar.menu;
|
||||
|
||||
import lecteur_pdf_swing.IhmPdf;
|
||||
import lecteur_pdf_swing.menuBar.menuItems.*;
|
||||
|
||||
import javax.swing.*;
|
||||
|
||||
public class MenuFichier extends JMenu {
|
||||
public MenuFichier(IhmPdf parent) {
|
||||
super("Fichier");
|
||||
// Ajouter les menu items
|
||||
add(new OuvrirFichier(parent));
|
||||
add(new FermerFichier(parent));
|
||||
add(new Quitter(parent));
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,10 @@
|
||||
package lecteur_pdf_swing.menuBar.menu;
|
||||
|
||||
import javax.swing.*;
|
||||
|
||||
public class MenuOptions extends JMenu {
|
||||
public MenuOptions() {
|
||||
super("Options");
|
||||
// Ajouter les menu items
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,23 @@
|
||||
package lecteur_pdf_swing.menuBar.menuItems;
|
||||
|
||||
import lecteur_pdf_swing.IhmPdf;
|
||||
|
||||
import javax.swing.*;
|
||||
import java.awt.event.KeyEvent;
|
||||
|
||||
public class FermerFichier extends JMenuItem {
|
||||
|
||||
IhmPdf parent;
|
||||
|
||||
public FermerFichier(IhmPdf parent) {
|
||||
super("Fermer");
|
||||
this.parent = parent;
|
||||
|
||||
addActionListener(e -> {parent.fermerFichier();});
|
||||
|
||||
KeyStroke raccourciFermer = KeyStroke.getKeyStroke(KeyEvent.VK_X,
|
||||
KeyEvent.CTRL_DOWN_MASK);
|
||||
setAccelerator(raccourciFermer);
|
||||
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,30 @@
|
||||
package lecteur_pdf_swing.menuBar.menuItems;
|
||||
|
||||
import lecteur_pdf_swing.GestionPdf;
|
||||
import lecteur_pdf_swing.IhmPdf;
|
||||
|
||||
import javax.swing.*;
|
||||
import java.awt.event.KeyEvent;
|
||||
import java.io.IOException;
|
||||
|
||||
public class OuvrirFichier extends JMenuItem {
|
||||
|
||||
IhmPdf parent;
|
||||
|
||||
public OuvrirFichier(IhmPdf parent) {
|
||||
super("Ouvrir");
|
||||
this.parent = parent;
|
||||
|
||||
addActionListener(e -> {
|
||||
try {
|
||||
parent.ouvrirFichier();
|
||||
} catch (IOException ex) {
|
||||
ex.printStackTrace();
|
||||
}
|
||||
});
|
||||
|
||||
KeyStroke raccourciOuvrir = KeyStroke.getKeyStroke(KeyEvent.VK_O,
|
||||
KeyEvent.CTRL_DOWN_MASK);
|
||||
setAccelerator(raccourciOuvrir);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,21 @@
|
||||
package lecteur_pdf_swing.menuBar.menuItems;
|
||||
|
||||
import lecteur_pdf_swing.IhmPdf;
|
||||
|
||||
import javax.swing.*;
|
||||
import java.awt.event.KeyEvent;
|
||||
|
||||
public class PleinEcran extends JMenuItem {
|
||||
|
||||
IhmPdf parent;
|
||||
|
||||
public PleinEcran(IhmPdf parent) {
|
||||
super("Mode Plein Ecran");
|
||||
this.parent = parent;
|
||||
KeyStroke raccourciPleinEcran = KeyStroke.getKeyStroke(KeyEvent.VK_F11,
|
||||
0);
|
||||
setAccelerator(raccourciPleinEcran);
|
||||
addActionListener(e -> {parent.pleinEcran();});
|
||||
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,23 @@
|
||||
package lecteur_pdf_swing.menuBar.menuItems;
|
||||
|
||||
import lecteur_pdf_swing.IhmPdf;
|
||||
|
||||
import javax.swing.*;
|
||||
import java.awt.event.KeyEvent;
|
||||
|
||||
public class Quitter extends JMenuItem {
|
||||
|
||||
IhmPdf parent;
|
||||
|
||||
public Quitter(IhmPdf parent) {
|
||||
super("Quitter");
|
||||
this.parent = parent;
|
||||
|
||||
addActionListener(e -> {parent.quitter();});
|
||||
|
||||
KeyStroke raccourciQuitter = KeyStroke.getKeyStroke(KeyEvent.VK_Q,
|
||||
KeyEvent.CTRL_DOWN_MASK);
|
||||
setAccelerator(raccourciQuitter);
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,23 @@
|
||||
package lecteur_pdf_swing.menuBar.menuItems;
|
||||
|
||||
import lecteur_pdf_swing.IhmPdf;
|
||||
|
||||
import javax.swing.*;
|
||||
import java.awt.event.KeyEvent;
|
||||
|
||||
public class ZoomDefaut extends JMenuItem {
|
||||
|
||||
IhmPdf parent;
|
||||
|
||||
public ZoomDefaut(IhmPdf parent) {
|
||||
super("Zoom 100%");
|
||||
this.parent = parent;
|
||||
|
||||
KeyStroke raccourciZoomDefaut = KeyStroke.getKeyStroke(KeyEvent.VK_L,
|
||||
KeyEvent.CTRL_DOWN_MASK);
|
||||
setAccelerator(raccourciZoomDefaut);
|
||||
addActionListener(e -> {parent.zoomDefaut();});
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,22 @@
|
||||
package lecteur_pdf_swing.menuBar.menuItems;
|
||||
|
||||
import lecteur_pdf_swing.IhmPdf;
|
||||
|
||||
import javax.swing.*;
|
||||
import java.awt.event.KeyEvent;
|
||||
|
||||
public class ZoomMoins extends JMenuItem {
|
||||
|
||||
IhmPdf parent;
|
||||
|
||||
public ZoomMoins(IhmPdf parent) {
|
||||
super("Zoom 50%");
|
||||
this.parent = parent;
|
||||
|
||||
KeyStroke raccourciZoomMoins = KeyStroke.getKeyStroke(KeyEvent.VK_K,
|
||||
KeyEvent.CTRL_DOWN_MASK);
|
||||
setAccelerator(raccourciZoomMoins);
|
||||
addActionListener(e -> {parent.zoomMoins();});
|
||||
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,21 @@
|
||||
package lecteur_pdf_swing.menuBar.menuItems;
|
||||
|
||||
import lecteur_pdf_swing.IhmPdf;
|
||||
|
||||
import javax.swing.*;
|
||||
import java.awt.event.KeyEvent;
|
||||
|
||||
public class ZoomPlus extends JMenuItem {
|
||||
|
||||
IhmPdf parent;
|
||||
|
||||
public ZoomPlus(IhmPdf parent) {
|
||||
super("Zoom 150%");
|
||||
this.parent = parent;
|
||||
KeyStroke raccourciZoomPlus = KeyStroke.getKeyStroke(KeyEvent.VK_M,
|
||||
KeyEvent.CTRL_DOWN_MASK);
|
||||
setAccelerator(raccourciZoomPlus);
|
||||
addActionListener(e -> {parent.zoomPlus();});
|
||||
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,42 @@
|
||||
package lecteur_pdf_swing.pdf;
|
||||
|
||||
import org.apache.pdfbox.pdmodel.PDDocument;
|
||||
import org.apache.pdfbox.rendering.PDFRenderer;
|
||||
|
||||
import java.awt.image.BufferedImage;
|
||||
import java.io.File;
|
||||
import java.io.IOException;
|
||||
|
||||
public class PdfLoader {
|
||||
PDDocument document;
|
||||
PDFRenderer renderer;
|
||||
|
||||
public PdfLoader(File file) throws IOException {
|
||||
document = PDDocument.load(file);
|
||||
renderer = new PDFRenderer(document);
|
||||
}
|
||||
|
||||
public int getNbPages() {
|
||||
return document.getNumberOfPages();
|
||||
}
|
||||
|
||||
public BufferedImage renderPage(int pageIndex, float scale) throws IOException {
|
||||
if (pageIndex < 0 || pageIndex >= this.getNbPages()) {
|
||||
throw new IllegalArgumentException();
|
||||
}
|
||||
return renderer.renderImage(pageIndex, scale);
|
||||
}
|
||||
|
||||
public void close() {
|
||||
try {
|
||||
document.close();
|
||||
} catch(IOException ignored) {}
|
||||
}
|
||||
|
||||
public void load(File file) {
|
||||
try {
|
||||
document = PDDocument.load(file);
|
||||
} catch (IOException ignored) {}
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,86 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<form xmlns="http://www.intellij.com/uidesigner/form/" version="1" bind-to-class="lecteur_pdf_swing.pdf.PdfPanel">
|
||||
<grid id="27dc6" binding="mainPanel" layout-manager="GridLayoutManager" row-count="2" column-count="6" same-size-horizontally="false" same-size-vertically="false" hgap="-1" vgap="-1">
|
||||
<margin top="0" left="0" bottom="0" right="0"/>
|
||||
<constraints>
|
||||
<xy x="20" y="20" width="500" height="400"/>
|
||||
</constraints>
|
||||
<properties/>
|
||||
<border type="none"/>
|
||||
<children>
|
||||
<component id="9ec2f" class="javax.swing.JLabel" binding="pageIndicator">
|
||||
<constraints>
|
||||
<grid row="0" column="3" row-span="1" col-span="1" vsize-policy="0" hsize-policy="0" anchor="8" fill="0" indent="0" use-parent-layout="false"/>
|
||||
</constraints>
|
||||
<properties>
|
||||
<text value="/ - "/>
|
||||
</properties>
|
||||
</component>
|
||||
<component id="6e10b" class="javax.swing.JButton" binding="suivantButton" default-binding="true">
|
||||
<constraints>
|
||||
<grid row="0" column="4" row-span="1" col-span="1" vsize-policy="0" hsize-policy="3" anchor="0" fill="1" indent="0" use-parent-layout="false"/>
|
||||
</constraints>
|
||||
<properties>
|
||||
<text value="Suivant"/>
|
||||
</properties>
|
||||
</component>
|
||||
<hspacer id="cb0bf">
|
||||
<constraints>
|
||||
<grid row="0" column="5" row-span="1" col-span="1" vsize-policy="1" hsize-policy="6" anchor="0" fill="1" indent="0" use-parent-layout="false"/>
|
||||
</constraints>
|
||||
</hspacer>
|
||||
<hspacer id="75413">
|
||||
<constraints>
|
||||
<grid row="0" column="0" row-span="1" col-span="1" vsize-policy="1" hsize-policy="6" anchor="0" fill="1" indent="0" use-parent-layout="false"/>
|
||||
</constraints>
|
||||
</hspacer>
|
||||
<component id="6531c" class="javax.swing.JButton" binding="precedentButton">
|
||||
<constraints>
|
||||
<grid row="0" column="1" row-span="1" col-span="1" vsize-policy="0" hsize-policy="3" anchor="0" fill="1" indent="0" use-parent-layout="false"/>
|
||||
</constraints>
|
||||
<properties>
|
||||
<text value="Précédent"/>
|
||||
</properties>
|
||||
</component>
|
||||
<grid id="59e1d" layout-manager="BorderLayout" hgap="0" vgap="0">
|
||||
<constraints>
|
||||
<grid row="1" column="0" row-span="1" col-span="6" vsize-policy="3" hsize-policy="3" anchor="0" fill="3" indent="0" use-parent-layout="false"/>
|
||||
</constraints>
|
||||
<properties/>
|
||||
<border type="none"/>
|
||||
<children>
|
||||
<scrollpane id="7a9db" binding="scrollPane">
|
||||
<constraints border-constraint="Center"/>
|
||||
<properties>
|
||||
<verticalScrollBarPolicy value="20"/>
|
||||
</properties>
|
||||
<border type="none"/>
|
||||
<children>
|
||||
<grid id="fd78c" layout-manager="BorderLayout" hgap="0" vgap="0">
|
||||
<constraints/>
|
||||
<properties/>
|
||||
<border type="none"/>
|
||||
<children>
|
||||
<component id="835ed" class="javax.swing.JLabel" binding="page">
|
||||
<constraints border-constraint="Center"/>
|
||||
<properties>
|
||||
<text value=""/>
|
||||
</properties>
|
||||
</component>
|
||||
</children>
|
||||
</grid>
|
||||
</children>
|
||||
</scrollpane>
|
||||
</children>
|
||||
</grid>
|
||||
<component id="73f5" class="javax.swing.JTextField" binding="indexPage">
|
||||
<constraints>
|
||||
<grid row="0" column="2" row-span="1" col-span="1" vsize-policy="0" hsize-policy="6" anchor="8" fill="1" indent="0" use-parent-layout="false">
|
||||
<preferred-size width="150" height="-1"/>
|
||||
</grid>
|
||||
</constraints>
|
||||
<properties/>
|
||||
</component>
|
||||
</children>
|
||||
</grid>
|
||||
</form>
|
||||
@@ -0,0 +1,77 @@
|
||||
package lecteur_pdf_swing.pdf;
|
||||
|
||||
import javax.swing.*;
|
||||
import java.awt.*;
|
||||
import java.io.File;
|
||||
import java.io.IOException;
|
||||
|
||||
public class PdfPanel extends JPanel {
|
||||
private int currentPage;
|
||||
private float currentScale;
|
||||
|
||||
final PdfLoader pdfLoader;
|
||||
|
||||
private JButton suivantButton;
|
||||
private JButton precedentButton;
|
||||
private JLabel pageIndicator;
|
||||
private JPanel mainPanel;
|
||||
private JLabel page;
|
||||
private JScrollPane scrollPane;
|
||||
private JTextField indexPage;
|
||||
|
||||
public PdfPanel(File pdfFile) throws IOException {
|
||||
super();
|
||||
|
||||
this.currentScale = 1.0f;
|
||||
|
||||
scrollPane.setMaximumSize(Toolkit.getDefaultToolkit().getScreenSize());
|
||||
/* Définitions des arguments */
|
||||
pdfLoader = new PdfLoader(pdfFile);
|
||||
|
||||
if (pdfFile != null) {
|
||||
defaultPage();
|
||||
|
||||
/* Hierarchie */
|
||||
add(mainPanel);
|
||||
|
||||
/* Actions */
|
||||
suivantButton.addActionListener(e -> updatePage(currentPage + 1));
|
||||
precedentButton.addActionListener(e -> updatePage(currentPage - 1));
|
||||
indexPage.addActionListener(e -> updatePageInput());
|
||||
}
|
||||
}
|
||||
|
||||
public void updateScale(float scale) {
|
||||
this.currentScale = scale;
|
||||
updatePage(currentPage);
|
||||
}
|
||||
|
||||
private void defaultPage() {
|
||||
updatePage(0);
|
||||
}
|
||||
|
||||
public void updatePage(int index) {
|
||||
try {
|
||||
if (pdfLoader == null) throw new IllegalStateException();
|
||||
page.setIcon(new ImageIcon(pdfLoader.renderPage(index,
|
||||
currentScale)));
|
||||
currentPage = index;
|
||||
pageIndicator.setText(String.format("%d/%d", currentPage + 1,
|
||||
pdfLoader.getNbPages()));
|
||||
} catch (IOException | IllegalArgumentException | IllegalStateException ignored) {}
|
||||
}
|
||||
|
||||
public void updatePageInput() {
|
||||
String input = indexPage.getText();
|
||||
try {
|
||||
int index = Integer.parseInt(input);
|
||||
if (index > 0 && index <= pdfLoader.getNbPages()) {
|
||||
updatePage(index - 1);
|
||||
} else {
|
||||
throw new Exception();
|
||||
}
|
||||
} catch (Exception e) {
|
||||
indexPage.setText("");
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user