📄 pdfscrollpane.java
字号:
// $Id: PDFScrollPane.java,v 1.18 2006/09/28 14:38:07 mike Exp $package org.faceless.pdf2.viewer;import org.faceless.pdf2.PDF;import javax.swing.*;import java.awt.*;import java.awt.event.*;/** * <p> * The <code>PDFScrollPane</code> provides a scrollable view of a PDF document. * A <code>PDFScrollPane</code> manages a viewport, horizontal and vertical scroll bars. * Note that <code>PDFScrollPane</code> can only contain {@link PDF} objects. * </p><p> * Initially <code>PDFScrollPane</code>'s viewport is empty - here is an example of how * to initialise the <code>PDFViewport</code> to display {@link PDF} objects.</p> * </p><pre class=example> * PDF pdf = loadMyPDF(); // Create your PDF somehow (probably from a PDFReader) * PDFScrollPane scrollpane = new PDFScrollPane(); * PDFViewport viewport = scrollpane.getViewport(); * viewport.setDocument(pdf); * </pre> * <p>This PDF scrollable view can be incorporated in to any Swing application.</p> * <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> * * @since 2.5 */public class PDFScrollPane extends JPanel implements PDFViewport.ViewportObserver{ private JScrollBar sbv, sbh; // Vertical/Horizontal scrollbars private PDFViewport view; /** * Creates a new, empty PDF scroll pane. */ public PDFScrollPane() { this(new PDFViewport()); } /** * Creates a new, empty PDF scroll pane with the * specified {@link PDFViewport}. * @param viewport the viewport to use in this scrollpane * @since 2.7.3 */ public PDFScrollPane(PDFViewport viewport) { super(); setDoubleBuffered(true); addComponentListener(new PDFPaneListener()); sbv = new JScrollBar(JScrollBar.VERTICAL); sbh = new JScrollBar(JScrollBar.HORIZONTAL); addMouseWheelListener(new VerticalWheelListener()); sbh.setMinimum(0); sbh.setBlockIncrement(15); sbh.setUnitIncrement(15); sbh.addAdjustmentListener(new HorizontalListener()); sbv.setMinimum(0); sbv.setBlockIncrement(15); sbv.setUnitIncrement(15); sbv.addAdjustmentListener(new VerticalListener()); setLayout(new BorderLayout()); sbv.setVisible(true); sbh.setVisible(true); this.view = viewport; view.addObserver(this); add(view, BorderLayout.CENTER); add(sbv, BorderLayout.EAST); add(sbh, BorderLayout.SOUTH); } public void viewportChanged(double x, double y) { final int sx = (int)x; final int sy = (int)y; Runnable UpdateBars = new Runnable() { public void run() { sbh.setMaximum(view.getPageWidth()); sbv.setMaximum(view.getPageHeight()); sbh.setValue(sx); sbv.setValue(sy); sbh.setVisibleAmount((int)view.getVisibleWidth()); sbv.setVisibleAmount((int)view.getVisibleHeight()); } }; SwingUtilities.invokeLater(UpdateBars); } /** * Returns the current {@link PDFViewport}. * * @return the viewport property */ public PDFViewport getViewport() { return view; } class VerticalListener implements AdjustmentListener { public void adjustmentValueChanged(AdjustmentEvent e) { view.setViewPosition(sbh.getValue(), sbv.getValue()); } } class HorizontalListener implements AdjustmentListener { public void adjustmentValueChanged(AdjustmentEvent e) { view.setViewPosition(sbh.getValue(), sbv.getValue()); } } class PDFPaneListener extends ComponentAdapter { public void componentResized(ComponentEvent e) { int sx = (int)Math.min(view.getMaxScrollX(), sbh.getValue()); int sy = (int)Math.min(view.getMaxScrollY(), sbv.getValue()); sbh.setValue(sx); sbv.setValue(sy); view.setViewPosition(sbh.getValue(), sbv.getValue()); Runnable UpdateBars = new Runnable() { public void run() { sbh.setVisibleAmount((int)view.getVisibleWidth()); sbv.setVisibleAmount((int)view.getVisibleHeight()); } }; SwingUtilities.invokeLater(UpdateBars); } } class VerticalWheelListener implements MouseWheelListener { public void mouseWheelMoved(MouseWheelEvent e) { if (e.getScrollType() == MouseWheelEvent.WHEEL_UNIT_SCROLL) { int totalScrollAmount = e.getUnitsToScroll() * sbv.getUnitIncrement(); sbv.setValue(sbv.getValue() + totalScrollAmount); } } } public void writeAsTIFFComplete() { }}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -