📄 thumbspanel.java
字号:
// $Id: ThumbsPanel.java,v 1.25 2007/05/21 15:02:19 mike Exp $package org.faceless.pdf2.viewer;import org.faceless.pdf2.viewer.SwingWorker;import org.faceless.pdf2.PDF;import org.faceless.pdf2.PDFParser;import org.faceless.pdf2.PagePainter;import javax.swing.*;import java.awt.*;import java.awt.event.MouseAdapter;import java.awt.event.MouseEvent;import java.awt.event.MouseMotionAdapter;/** * Represents the "thumbnails" panel on the left of the Viewer * * <p><i> * This code is copyright the Big Faceless Organization. You're welcome to * use, modify and distribute it in any form in your own projects, provided * those projects continue to make use of the Big Faceless PDF library. * </i><p> */class ThumbsPanel extends JScrollPane implements PDFViewport.ViewportObserver{ private ViewPanel view; private PDFParser parser; private Image[] images; private Point prev; private Rectangle[] locations; private static final int hspacer = 10; private static final int vspacer = 20; private int currentPage; private PDFViewport pdfViewport; private PDF document; ThumbsPanel(PDFViewport pdfViewport) { super(); this.pdfViewport = pdfViewport; view = new ViewPanel(); setViewportView(view); getVerticalScrollBar().setUnitIncrement(15); getVerticalScrollBar().setBlockIncrement(15); getHorizontalScrollBar().setUnitIncrement(15); getHorizontalScrollBar().setBlockIncrement(15); viewport = getViewport(); } public void setDocument(PDF document) { if (!document.equals(this.document)) { this.document = document; view.setDocument(document); } } private void thumbComplete() { repaint(); } public void viewportChanged(double x, double y) { currentPage = pdfViewport.getPageNumber(); repaint(); } class ViewPanel extends JPanel { ViewPanel() { super(); setPreferredSize(new Dimension(100, 500)); setVisible(true); } public void setDocument(PDF document) { parser = new PDFParser(document); images = new Image[parser.getNumberOfPages()]; locations = new Rectangle[parser.getNumberOfPages()]; // get thumnail for each page new ThumbWorker().start(); addMouseListener(new BasicMouseListener()); addMouseMotionListener(new BasicMouseMotionListener()); } public void paint(Graphics g) { super.paint(g); if (images != null) { prev = new Point(0, 5); int h = 0; int w = 0; for (int i = 0; i < images.length; i++) { if (images[i] == null) break; Point p1; if ((prev.x + w + images[i].getWidth(null) + hspacer) < (viewport.getWidth())) { p1 = new Point(prev.x + w + hspacer, prev.y); } else { p1 = new Point(hspacer, prev.y + h + vspacer); } h = images[i].getHeight(null); w = images[i].getWidth(null); g.setColor(Color.GRAY); g.fillRect(p1.x + 2, p1.y + 2, w, h); g.drawImage(images[i], p1.x, p1.y, null); g.setColor(Color.BLACK); g.drawString(Integer.toString(i + 1), p1.x + (w / 2), p1.y + h + 15); g.setColor(i!=currentPage ? Color.BLACK : Color.RED); g.drawRect(p1.x, p1.y, w, h); locations[i] = new Rectangle(p1, new Dimension(w, h)); prev = p1; view.setPreferredSize(new Dimension(100, p1.y + h + vspacer)); view.revalidate(); } } } } class ThumbWorker extends SwingWorker { private float dpi = 9.0f; public Object construct() { for (int i = 0; i < parser.getNumberOfPages(); i++) { PagePainter painter = parser.getPagePainter(i); images[i] = painter.getImage(dpi); thumbComplete(); } return null; } } class BasicMouseListener extends MouseAdapter { public void mouseClicked(MouseEvent e) { Point select = e.getPoint(); for (int i = 0; i < locations.length; i++) { if (locations[i] == null) break; if (locations[i].contains(select)) { pdfViewport.setPageNumber(i); break; } } } } class BasicMouseMotionListener extends MouseMotionAdapter { public void mouseMoved(MouseEvent e) { Point select = e.getPoint(); for (int i = 0; i < locations.length; i++) { if (locations[i] == null) break; if (locations[i].contains(select)) { e.getComponent().setCursor(new Cursor(Cursor.HAND_CURSOR)); break; } else { e.getComponent().setCursor(new Cursor(Cursor.DEFAULT_CURSOR)); } } } } public void writeAsTIFFComplete() { }}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -