abstractregionselector.java

来自「Java生成PDF Java生成PDF Java生成PDF」· Java 代码 · 共 131 行

JAVA
131
字号
// $Id: AbstractRegionSelector.java,v 1.3 2007/11/16 05:05:31 mike Exp $package org.faceless.pdf2.viewer2.feature;import org.faceless.pdf2.viewer2.*;import org.faceless.pdf2.*;import javax.swing.*;import java.awt.event.*;import java.awt.geom.*;import java.awt.*;/** * An abstract superclass for any widgets that require a region to be selected. Subclasses * should override the {@link #action(PagePanel, Point2D, Point2D)} method. * <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.8.5 */public abstract class AbstractRegionSelector extends ViewerWidget implements DocumentPanelListener, PagePanelInteractionListener{    private static final int CRAWLSPEED = 60, CRAWLLENGTH = 4;    private JComponent rubberbox;    private Point startpoint;    protected AbstractRegionSelector(String name) {        super(name);    }    public void action(ViewerEvent event) {        JButton button = (JButton)getComponent();        boolean active = !button.isSelected();        button.setSelected(active);        if (active) {            event.getDocumentPanel().getViewport().addPagePanelInteractionListener(this);        } else {            DocumentPanel[] panels = event.getViewer().getDocumentPanels();            for (int i=0;i<panels.length;i++) {                panels[i].getViewport().removePagePanelInteractionListener(this);            }        }    }    public void initialize(PDFViewer viewer) {        super.initialize(viewer);        viewer.addDocumentPanelListener(this);        ButtonGroup regiongroup = (ButtonGroup)viewer.getClientProperty("buttongroup.region");        if (regiongroup==null) {            regiongroup = new ButtonGroup();            viewer.putClientProperty("buttongroup.region", regiongroup);        }        regiongroup.add((AbstractButton)getComponent());    }    public void documentUpdated(DocumentPanelEvent event) {        JButton button = (JButton)getComponent();        boolean active = !button.isSelected();        if ((event.getType()=="viewportChanged" || event.getType()=="activated") && ((JButton)getComponent()).isSelected()) {            event.getDocumentPanel().getViewport().addPagePanelInteractionListener(this);        }    }    public void pageAction(PagePanelInteractionEvent event) {        if (((JButton)getComponent()).isSelected()) {            PagePanel panel = event.getPagePanel();            if (event.getType()=="mousePressed") {                rubberbox = new JPanel() {                    public void paintComponent(Graphics g) {                        paintRubberBandComponent(this, (Graphics2D)g);                        g.setColor(new Color(0,0,0,0));                        g.fillRect(0, 0, getWidth(), getHeight());                        BasicStroke stroke = new BasicStroke(1, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER, 15, new float[] { CRAWLLENGTH, CRAWLLENGTH }, (int)((System.currentTimeMillis()/CRAWLSPEED)%(CRAWLLENGTH*2)));                        g.setColor(Color.black);                        ((Graphics2D)g).setStroke(stroke);                        g.drawRect(0, 0, getWidth()-1, getHeight()-1);                    }                };                startpoint = event.getMouseEvent().getPoint();                rubberbox.setLocation(startpoint);                rubberbox.setOpaque(false);                rubberbox.setSize(0, 0);                panel.add(rubberbox);                new Thread() {                    public void run() {                        try {                            while (rubberbox!=null) {                                Thread.sleep(CRAWLSPEED);                                JComponent c = rubberbox;                                if (c!=null) c.repaint();                            }                        } catch (InterruptedException e) { }                    }                }.start();            } else if (event.getType()=="mouseDragged") {                Point p = event.getMouseEvent().getPoint();                rubberbox.setLocation(Math.min(p.x, startpoint.x), Math.min(p.y, startpoint.y));                rubberbox.setSize(Math.abs(p.x-startpoint.x), Math.abs(p.y-startpoint.y));            } else if (event.getType()=="mouseReleased") {                Point p = event.getMouseEvent().getPoint();                panel.remove(rubberbox);                panel.repaint();                action(panel, panel.getPDFPoint(startpoint.x, startpoint.y), panel.getPDFPoint(p.x, p.y));                startpoint = null;                rubberbox = null;            }        } else {            DocumentPanel[] panels = event.getPagePanel().getDocumentPanel().getViewer().getDocumentPanels();            for (int i=0;i<panels.length;i++) {                panels[i].getViewport().removePagePanelInteractionListener(this);            }        }    }    /**      * Paint the component while the "rubber band" box is being stretched.     * This method may be overriden if something is to be painted inside the     * box during this time.     * @param component the "rubber band" box being drawn     * @param g the Graphic2D object to draw on.     */    public void paintRubberBandComponent(JComponent component, Graphics2D g) {    }    /**     * Called when an area of the PDF has been selected.     * @param panel the PagePanel the selection was made on.     * @param start the start point of the selection, in PDF-units     * @param end the end point of the selection, in PDF-units     */    public void action(PagePanel panel, Point2D start, Point2D end) {    }}

⌨️ 快捷键说明

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