📄 outlinepanel.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 + -