Hallo zusammen,
Ich habe eine GUI erstellt mit LayoutManager. Wenn ich dort auf einen bestimmten Knopf drücke, wird diese Klasse ausgeführt:
Der Code tut was er soll, jedoch braucht es ewig, damit der PDF Viewer angezeigt wird. Während es lädt, also noch kein Reader zu sehen ist, wollte ich einen Ladebildschirm implementieren (mithilfe eines Splashscreens nehme ich an?), der ein GIF anzeigt, bis eben der Reader fertig geladen ist. Im Internet sind die Tutorials zu dem Thema eher mager und oft werden pro Tutorial andere Vorgänge genommen. Hat jemand einen Ansatz wie ich hier vorgehe??
Vielen Dank im Voraus
Ich habe eine GUI erstellt mit LayoutManager. Wenn ich dort auf einen bestimmten Knopf drücke, wird diese Klasse ausgeführt:
Java:
package pdf;
import java.awt.SplashScreen;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.io.File;
import java.io.IOException;
import java.util.List;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFrame;
import org.apache.pdfbox.pdfviewer.PDFPagePanel;
import org.apache.pdfbox.pdmodel.PDDocument;
import org.apache.pdfbox.pdmodel.PDPage;
public class PDFViewer {
int currentPageNo = 0;
public PDFViewer(String path) {
//ImageIcon logo = new ImageIcon("resources/BASF_logo_logotype.png");//Splashscrreen
File pdf_path = new File(path);
try {
PDDocument inputPdf = PDDocument.load(pdf_path);
List<PDPage> allPgs = inputPdf.getDocumentCatalog().getAllPages();
PDPage testPage = (PDPage)allPgs.get(0);
JFrame testFrame = new JFrame();
testFrame.setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);
testFrame.addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
try {
inputPdf.close();
testFrame.setVisible(false);
} catch (IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
}
});
PDFPagePanel pdfPanel = new PDFPagePanel();
pdfPanel.setPage(testPage);
testFrame.add(pdfPanel);
testFrame.setBounds(0, 0, pdfPanel.getWidth(), pdfPanel.getHeight()+50);
testFrame.addKeyListener(new KeyAdapter() {
@Override
public void keyTyped(KeyEvent e) {
// TODO Auto-generated method stub
}
@Override
public void keyPressed(KeyEvent e) {
if(e.getKeyCode() == KeyEvent.VK_DOWN ) {
if(currentPageNo < allPgs.size()-1) {
currentPageNo++;
PDPage currentPage = (PDPage)allPgs.get(currentPageNo);
pdfPanel.setPage(currentPage);
testFrame.add(pdfPanel);
testFrame.invalidate();
testFrame.validate();
testFrame.repaint();
}
}
if(e.getKeyCode() == KeyEvent.VK_UP) {
if(currentPageNo>0) {
currentPageNo--;
PDPage currentPage = (PDPage)allPgs.get(currentPageNo);
pdfPanel.setPage(currentPage);
testFrame.add(pdfPanel);
testFrame.invalidate();
testFrame.validate();
testFrame.repaint();
}
}
}
@Override
public void keyReleased(KeyEvent e) {
// TODO Auto-generated method stub
}
});
testFrame.setVisible(true);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
Der Code tut was er soll, jedoch braucht es ewig, damit der PDF Viewer angezeigt wird. Während es lädt, also noch kein Reader zu sehen ist, wollte ich einen Ladebildschirm implementieren (mithilfe eines Splashscreens nehme ich an?), der ein GIF anzeigt, bis eben der Reader fertig geladen ist. Im Internet sind die Tutorials zu dem Thema eher mager und oft werden pro Tutorial andere Vorgänge genommen. Hat jemand einen Ansatz wie ich hier vorgehe??
Vielen Dank im Voraus