formradiobuttonwidgetfactory.java
来自「Java生成PDF Java生成PDF Java生成PDF」· Java 代码 · 共 126 行
JAVA
126 行
// $Id: FormRadioButtonWidgetFactory.java,v 1.12 2007/11/12 05:29:58 mike Exp $package org.faceless.pdf2.viewer2.feature;import org.faceless.pdf2.viewer2.*;import org.faceless.pdf2.*;import org.faceless.pdf2.Event;import javax.swing.*;import java.awt.event.*;import java.awt.*;/** * Create annotations to handle {@link WidgetAnnotation} objects belonging to * {@link FormRadioButton} and {@link FormCheckbox} objects. * The name of this feature is "FormRadioButtonWidgetFactory". * <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 */public class FormRadioButtonWidgetFactory extends AnnotationComponentFactory{ private static FormRadioButtonWidgetFactory instance; /** * Return the FormRadioButtonWidgetFactory */ public static FormRadioButtonWidgetFactory getInstance() { if (instance==null) instance = new FormRadioButtonWidgetFactory(); return instance; } private FormRadioButtonWidgetFactory() { super("FormRadioButtonWidgetFactory"); } public boolean matches(PDFAnnotation annot) { if (annot instanceof WidgetAnnotation) { FormElement field = ((WidgetAnnotation)annot).getField(); return field instanceof FormRadioButton || field instanceof FormCheckbox; } else { return false; } } public JComponent createComponent(final PagePanel pagepanel, PDFAnnotation annot) { final WidgetAnnotation widget = (WidgetAnnotation)annot; final DocumentPanel docpanel = pagepanel.getDocumentPanel(); final FormElement field = widget.getField(); final JComponent comp = new JPanel() { public void paintComponent(Graphics g) { AnnotationComponentFactory.paintComponent(this, "N", g); if (isFocusOwner()) { ((Graphics2D)g).setStroke(new BasicStroke(1, 0, 0, 1, new float[] { 1, 1 }, 0)); g.setColor(Color.gray); g.drawRect(0, 0, getWidth()-1, getHeight()-1); } } }; comp.setOpaque(false); if (!widget.getField().isReadOnly()) { comp.setToolTipText(widget.getField().getDescription()); Listener listener = new Listener(comp, widget, docpanel); comp.addMouseListener(listener); comp.addFocusListener(listener); comp.addKeyListener(listener); } FormTextWidgetFactory.createOtherChange(docpanel, field); return comp; } class Listener implements FocusListener, MouseListener, KeyListener { private final JComponent comp; private final FormElement field; private final WidgetAnnotation widget; private final DocumentPanel docpanel; Listener(JComponent comp, WidgetAnnotation widget, DocumentPanel docpanel) { this.comp = comp; this.widget = widget; this.field = widget.getField(); this.docpanel = docpanel; } public void mouseEntered(MouseEvent event) { comp.setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR)); docpanel.getJSManager().runEventFieldMouseEnter(docpanel, widget, event); } public void mouseExited(MouseEvent event) { comp.setCursor(Cursor.getDefaultCursor()); docpanel.getJSManager().runEventFieldMouseExit(docpanel, widget, event); } public void mousePressed(MouseEvent event) { comp.grabFocus(); docpanel.getJSManager().runEventFieldMouseDown(docpanel, widget, event); } public void mouseReleased(MouseEvent event) { docpanel.getJSManager().runEventFieldMouseUp(docpanel, widget, event); } public void mouseClicked(MouseEvent event) { if (field instanceof FormCheckbox) { ((FormCheckbox)field).setValue(field.getValue()==null ? widget.getValue() : null); } else { ((FormRadioButton)field).setValue(widget.getValue()); } FormTextWidgetFactory.runOtherChange(docpanel, widget); field.rebuild(); docpanel.redraw(field); } public void focusGained(FocusEvent event) { comp.repaint(); docpanel.getJSManager().runEventFieldFocus(docpanel, widget, false, false); } public void focusLost(FocusEvent event) { comp.repaint(); docpanel.getJSManager().runEventFieldBlur(docpanel, widget, false, false); } public void keyPressed(KeyEvent e) { } public void keyTyped(KeyEvent e) { } public void keyReleased(KeyEvent e) { int code = e.getKeyCode(); if (code==e.VK_SPACE) { mouseClicked(null); } } }}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?