⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 thumbspanel.java

📁 Java生成PDF Java生成PDF Java生成PDF
💻 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 + -