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

📄 outlinepanel.java

📁 Java生成PDF Java生成PDF Java生成PDF
💻 JAVA
字号:
// $Id: OutlinePanel.java,v 1.31 2007/05/21 15:02:19 mike Exp $package org.faceless.pdf2.viewer;import org.faceless.pdf2.PDF;import org.faceless.pdf2.PDFBookmark;import org.faceless.pdf2.PDFAction;import org.faceless.pdf2.PDFPage;import javax.swing.*;import javax.swing.tree.DefaultMutableTreeNode;import javax.swing.tree.TreeSelectionModel;import javax.swing.tree.DefaultTreeCellRenderer;import javax.swing.Timer;import javax.swing.event.TreeSelectionListener;import javax.swing.event.TreeSelectionEvent;import java.awt.*;import java.awt.event.*;import java.util.List;import java.util.Iterator;/** * Class representing the "Outline" or "Bookmark" 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 OutlinePanel extends JPanel implements TreeSelectionListener{    private JTree outline;    private DefaultMutableTreeNode root;    private JScrollPane scrollPane;    private PDFViewport pdfViewport;    OutlinePanel(PDFViewport pdfViewport) {        super();        this.pdfViewport = pdfViewport;        setLayout(new BorderLayout());        scrollPane = new JScrollPane();        add(scrollPane, BorderLayout.CENTER);    }    public void setDocument(final PDF document) {        root = new DefaultMutableTreeNode("Bookmarks");        outline = new JTree(root);        outline.setFont(new Font("SansSerif", Font.PLAIN, 12));        DefaultTreeCellRenderer renderer = new DefaultTreeCellRenderer();        renderer.setLeafIcon(PDFViewer.BFO16);        renderer.setOpenIcon(PDFViewer.BFO16);        renderer.setClosedIcon(PDFViewer.BFO16);        outline.setCellRenderer(renderer);        outline.setEditable(false);        outline.getSelectionModel().setSelectionMode(TreeSelectionModel.SINGLE_TREE_SELECTION);        outline.addTreeSelectionListener(this);        MouseMotionListener ml = new MouseMotionAdapter() {            public void mouseMoved(MouseEvent e) {                int selRow = outline.getRowForLocation(e.getX(), e.getY());                if (selRow != -1) {                    setCursor(new Cursor(Cursor.HAND_CURSOR));                } else {                    setCursor(new Cursor(Cursor.DEFAULT_CURSOR));                }            }        };        outline.addMouseMotionListener(ml);        Timer timer = new Timer(1000, new ActionListener() {            public void actionPerformed(ActionEvent evt) {                if (document != null) {                    List bookmarks = document.getBookmarks();                    if (bookmarks.size() != 0) {        // check if outline exists                        scrollPane.setVisible(true);                        loadOutline(bookmarks, root);                        scrollPane.setViewportView(outline);                        outline.expandRow(0);                    } else {                        scrollPane.setVisible(false);                        scrollPane.setViewportView(null);                        root = null;                        outline = null;                    }                }            }        });        timer.setRepeats(false);        timer.start();    }    private void loadOutline(List bookmarks, DefaultMutableTreeNode root) {        for (Iterator iterator = bookmarks.iterator();iterator.hasNext();) {            PDFBookmark bookmark = (PDFBookmark) iterator.next();            PDFTreeNode node = new PDFTreeNode(bookmark);            root.add(node);            List children = bookmark.getBookmarks();            if (children != null) {                node.setAllowsChildren(true);                loadOutline(children, node);            }        }    }    public void pageChanged(int pagenum) {        repaint();    }    public void valueChanged(TreeSelectionEvent e) {        Object object = outline.getLastSelectedPathComponent();        if (!(object instanceof PDFTreeNode)) return;        PDFTreeNode node = (PDFTreeNode) object;        PDFAction action = node.getAction();        if (action != null) {            pdfViewport.runAction(action);        }    }    class PDFTreeNode extends DefaultMutableTreeNode {        PDFBookmark bookmark;        PDFTreeNode(PDFBookmark bookmark) {            super(bookmark);            this.bookmark = bookmark;        }        public PDFAction getAction() {            return bookmark.getAction();        }        public String toString() {            return bookmark.getName();        }    }}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -