/* * JasperReports - Free Java Reporting Library. * Copyright (C) 2001 - 2009 Jaspersoft Corporation. All rights reserved. * http://www.jaspersoft.com * * Unless you have purchased a commercial license agreement from Jaspersoft, * the following license terms apply: * * This program is part of JasperReports. * * JasperReports is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * JasperReports is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with JasperReports. If not, see <http://www.gnu.org/licenses/>. */ package net.sf.jasperreports.swing; import java.awt.event.KeyListener; import java.io.File; import java.lang.reflect.Constructor; import java.text.DecimalFormat; import java.text.ParseException; import java.util.ArrayList; import java.util.Arrays; import java.util.List; import java.util.Locale; import java.util.ResourceBundle; import javax.swing.DefaultComboBoxModel; import javax.swing.JFileChooser; import javax.swing.JOptionPane; import javax.swing.JPanel; import javax.swing.filechooser.FileFilter; import net.sf.jasperreports.engine.JRConstants; import net.sf.jasperreports.engine.JRException; import net.sf.jasperreports.engine.JasperPrintManager; import net.sf.jasperreports.engine.util.JRClassLoader; import net.sf.jasperreports.view.JRSaveContributor; import net.sf.jasperreports.view.save.JRPrintSaveContributor; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; /** * @author Teodor Danciu (teodord@users.sourceforge.net) * @version $Id: JRViewerToolbar.java 3684 2010-04-06 09:27:45Z shertage $ */ public class JRViewerToolbar extends JPanel implements JRViewerListener { private static final Log log = LogFactory.getLog(JRViewerToolbar.class); private static final long serialVersionUID = JRConstants.SERIAL_VERSION_UID; protected final JRViewerController viewerContext; protected final float MIN_ZOOM = 0.5f; protected final float MAX_ZOOM = 10f; protected int zooms[] = {50, 75, 100, 125, 150, 175, 200, 250, 400, 800}; protected int defaultZoomIndex = 2; protected List saveContributors = new ArrayList(); protected File lastFolder = null; protected JRSaveContributor lastSaveContributor = null; protected DecimalFormat zoomDecimalFormat = new DecimalFormat("#.##"); protected javax.swing.JToggleButton btnActualSize; protected javax.swing.JButton btnFirst; protected javax.swing.JToggleButton btnFitPage; protected javax.swing.JToggleButton btnFitWidth; protected javax.swing.JButton btnLast; protected javax.swing.JButton btnNext; protected javax.swing.JButton btnPrevious; protected javax.swing.JButton btnPrint; protected javax.swing.JButton btnReload; protected javax.swing.JButton btnSave; protected javax.swing.JButton btnZoomIn; protected javax.swing.JButton btnZoomOut; protected javax.swing.JComboBox cmbZoom; protected javax.swing.JPanel pnlSep01; protected javax.swing.JPanel pnlSep02; protected javax.swing.JPanel pnlSep03; protected javax.swing.JTextField txtGoTo; public JRViewerToolbar(JRViewerController viewerContext) { this.viewerContext = viewerContext; this.viewerContext.addListener(this); initComponents(); initSaveContributors(); } private void initComponents() { btnSave = new javax.swing.JButton(); btnPrint = new javax.swing.JButton(); btnReload = new javax.swing.JButton(); pnlSep01 = new javax.swing.JPanel(); btnFirst = new javax.swing.JButton(); btnPrevious = new javax.swing.JButton(); btnNext = new javax.swing.JButton(); btnLast = new javax.swing.JButton(); txtGoTo = new javax.swing.JTextField(); pnlSep02 = new javax.swing.JPanel(); btnActualSize = new javax.swing.JToggleButton(); btnFitPage = new javax.swing.JToggleButton(); btnFitWidth = new javax.swing.JToggleButton(); pnlSep03 = new javax.swing.JPanel(); btnZoomIn = new javax.swing.JButton(); btnZoomOut = new javax.swing.JButton(); cmbZoom = new javax.swing.JComboBox(); DefaultComboBoxModel model = new DefaultComboBoxModel(); for(int i = 0; i < zooms.length; i++) { model.addElement("" + zooms[i] + "%"); } cmbZoom.setModel(model); setLayout(new java.awt.FlowLayout(java.awt.FlowLayout.LEFT, 0, 2)); btnSave.setIcon(new javax.swing.ImageIcon(getClass().getResource("/net/sf/jasperreports/view/images/save.GIF"))); btnSave.setToolTipText(viewerContext.getBundleString("save")); btnSave.setMargin(new java.awt.Insets(2, 2, 2, 2)); btnSave.setMaximumSize(new java.awt.Dimension(23, 23)); btnSave.setMinimumSize(new java.awt.Dimension(23, 23)); btnSave.setPreferredSize(new java.awt.Dimension(23, 23)); btnSave.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { btnSaveActionPerformed(evt); } }); add(btnSave); btnPrint.setIcon(new javax.swing.ImageIcon(getClass().getResource("/net/sf/jasperreports/view/images/print.GIF"))); btnPrint.setToolTipText(viewerContext.getBundleString("print")); btnPrint.setMargin(new java.awt.Insets(2, 2, 2, 2)); btnPrint.setMaximumSize(new java.awt.Dimension(23, 23)); btnPrint.setMinimumSize(new java.awt.Dimension(23, 23)); btnPrint.setPreferredSize(new java.awt.Dimension(23, 23)); btnPrint.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { btnPrintActionPerformed(evt); } }); add(btnPrint); btnReload.setIcon(new javax.swing.ImageIcon(getClass().getResource("/net/sf/jasperreports/view/images/reload.GIF"))); btnReload.setToolTipText(viewerContext.getBundleString("reload")); btnReload.setMargin(new java.awt.Insets(2, 2, 2, 2)); btnReload.setMaximumSize(new java.awt.Dimension(23, 23)); btnReload.setMinimumSize(new java.awt.Dimension(23, 23)); btnReload.setPreferredSize(new java.awt.Dimension(23, 23)); btnReload.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { btnReloadActionPerformed(evt); } }); add(btnReload); pnlSep01.setMaximumSize(new java.awt.Dimension(10, 10)); add(pnlSep01); btnFirst.setIcon(new javax.swing.ImageIcon(getClass().getResource("/net/sf/jasperreports/view/images/first.GIF"))); btnFirst.setToolTipText(viewerContext.getBundleString("first.page")); btnFirst.setMargin(new java.awt.Insets(2, 2, 2, 2)); btnFirst.setMaximumSize(new java.awt.Dimension(23, 23)); btnFirst.setMinimumSize(new java.awt.Dimension(23, 23)); btnFirst.setPreferredSize(new java.awt.Dimension(23, 23)); btnFirst.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { btnFirstActionPerformed(evt); } }); add(btnFirst); btnPrevious.setIcon(new javax.swing.ImageIcon(getClass().getResource("/net/sf/jasperreports/view/images/previous.GIF"))); btnPrevious.setToolTipText(viewerContext.getBundleString("previous.page")); btnPrevious.setMargin(new java.awt.Insets(2, 2, 2, 2)); btnPrevious.setMaximumSize(new java.awt.Dimension(23, 23)); btnPrevious.setMinimumSize(new java.awt.Dimension(23, 23)); btnPrevious.setPreferredSize(new java.awt.Dimension(23, 23)); btnPrevious.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { btnPreviousActionPerformed(evt); } }); add(btnPrevious); btnNext.setIcon(new javax.swing.ImageIcon(getClass().getResource("/net/sf/jasperreports/view/images/next.GIF"))); btnNext.setToolTipText(viewerContext.getBundleString("next.page")); btnNext.setMargin(new java.awt.Insets(2, 2, 2, 2)); btnNext.setMaximumSize(new java.awt.Dimension(23, 23)); btnNext.setMinimumSize(new java.awt.Dimension(23, 23)); btnNext.setPreferredSize(new java.awt.Dimension(23, 23)); btnNext.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { btnNextActionPerformed(evt); } }); add(btnNext); btnLast.setIcon(new javax.swing.ImageIcon(getClass().getResource("/net/sf/jasperreports/view/images/last.GIF"))); btnLast.setToolTipText(viewerContext.getBundleString("last.page")); btnLast.setMargin(new java.awt.Insets(2, 2, 2, 2)); btnLast.setMaximumSize(new java.awt.Dimension(23, 23)); btnLast.setMinimumSize(new java.awt.Dimension(23, 23)); btnLast.setPreferredSize(new java.awt.Dimension(23, 23)); btnLast.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { btnLastActionPerformed(evt); } }); add(btnLast); txtGoTo.setToolTipText(viewerContext.getBundleString("go.to.page")); txtGoTo.setMaximumSize(new java.awt.Dimension(40, 23)); txtGoTo.setMinimumSize(new java.awt.Dimension(40, 23)); txtGoTo.setPreferredSize(new java.awt.Dimension(40, 23)); txtGoTo.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { txtGoToActionPerformed(evt); } }); add(txtGoTo); pnlSep02.setMaximumSize(new java.awt.Dimension(10, 10)); add(pnlSep02); btnActualSize.setIcon(new javax.swing.ImageIcon(getClass().getResource("/net/sf/jasperreports/view/images/actualsize.GIF"))); btnActualSize.setToolTipText(viewerContext.getBundleString("actual.size")); btnActualSize.setMargin(new java.awt.Insets(2, 2, 2, 2)); btnActualSize.setMaximumSize(new java.awt.Dimension(23, 23)); btnActualSize.setMinimumSize(new java.awt.Dimension(23, 23)); btnActualSize.setPreferredSize(new java.awt.Dimension(23, 23)); btnActualSize.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { btnActualSizeActionPerformed(evt); } }); add(btnActualSize); btnFitPage.setIcon(new javax.swing.ImageIcon(getClass().getResource("/net/sf/jasperreports/view/images/fitpage.GIF"))); btnFitPage.setToolTipText(viewerContext.getBundleString("fit.page")); btnFitPage.setMargin(new java.awt.Insets(2, 2, 2, 2)); btnFitPage.setMaximumSize(new java.awt.Dimension(23, 23)); btnFitPage.setMinimumSize(new java.awt.Dimension(23, 23)); btnFitPage.setPreferredSize(new java.awt.Dimension(23, 23)); btnFitPage.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { btnFitPageActionPerformed(evt); } }); add(btnFitPage); btnFitWidth.setIcon(new javax.swing.ImageIcon(getClass().getResource("/net/sf/jasperreports/view/images/fitwidth.GIF"))); btnFitWidth.setToolTipText(viewerContext.getBundleString("fit.width")); btnFitWidth.setMargin(new java.awt.Insets(2, 2, 2, 2)); btnFitWidth.setMaximumSize(new java.awt.Dimension(23, 23)); btnFitWidth.setMinimumSize(new java.awt.Dimension(23, 23)); btnFitWidth.setPreferredSize(new java.awt.Dimension(23, 23)); btnFitWidth.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { btnFitWidthActionPerformed(evt); } }); add(btnFitWidth); pnlSep03.setMaximumSize(new java.awt.Dimension(10, 10)); add(pnlSep03); btnZoomIn.setIcon(new javax.swing.ImageIcon(getClass().getResource("/net/sf/jasperreports/view/images/zoomin.GIF"))); btnZoomIn.setToolTipText(viewerContext.getBundleString("zoom.in")); btnZoomIn.setMargin(new java.awt.Insets(2, 2, 2, 2)); btnZoomIn.setMaximumSize(new java.awt.Dimension(23, 23)); btnZoomIn.setMinimumSize(new java.awt.Dimension(23, 23)); btnZoomIn.setPreferredSize(new java.awt.Dimension(23, 23)); btnZoomIn.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { btnZoomInActionPerformed(evt); } }); add(btnZoomIn); btnZoomOut.setIcon(new javax.swing.ImageIcon(getClass().getResource("/net/sf/jasperreports/view/images/zoomout.GIF"))); btnZoomOut.setToolTipText(viewerContext.getBundleString("zoom.out")); btnZoomOut.setMargin(new java.awt.Insets(2, 2, 2, 2)); btnZoomOut.setMaximumSize(new java.awt.Dimension(23, 23)); btnZoomOut.setMinimumSize(new java.awt.Dimension(23, 23)); btnZoomOut.setPreferredSize(new java.awt.Dimension(23, 23)); btnZoomOut.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { btnZoomOutActionPerformed(evt); } }); add(btnZoomOut); cmbZoom.setEditable(true); cmbZoom.setToolTipText(viewerContext.getBundleString("zoom.ratio")); cmbZoom.setMaximumSize(new java.awt.Dimension(80, 23)); cmbZoom.setMinimumSize(new java.awt.Dimension(80, 23)); cmbZoom.setPreferredSize(new java.awt.Dimension(80, 23)); cmbZoom.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { cmbZoomActionPerformed(evt); } }); cmbZoom.addItemListener(new java.awt.event.ItemListener() { public void itemStateChanged(java.awt.event.ItemEvent evt) { cmbZoomItemStateChanged(evt); } }); add(cmbZoom); } public void init() { cmbZoom.setSelectedIndex(defaultZoomIndex); } public void addComponentKeyListener(KeyListener listener) { btnSave.addKeyListener(listener); btnPrint.addKeyListener(listener); btnReload.addKeyListener(listener); btnFirst.addKeyListener(listener); btnPrevious.addKeyListener(listener); btnNext.addKeyListener(listener); btnLast.addKeyListener(listener); txtGoTo.addKeyListener(listener); btnActualSize.addKeyListener(listener); btnFitPage.addKeyListener(listener); btnFitWidth.addKeyListener(listener); btnZoomIn.addKeyListener(listener); btnZoomOut.addKeyListener(listener); cmbZoom.addKeyListener(listener); } void btnSaveActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnSaveActionPerformed // Add your handling code here: JFileChooser fileChooser = new JFileChooser(); fileChooser.setLocale(this.getLocale()); fileChooser.updateUI(); for(int i = 0; i < saveContributors.size(); i++) { fileChooser.addChoosableFileFilter((JRSaveContributor)saveContributors.get(i)); } if (saveContributors.contains(lastSaveContributor)) { fileChooser.setFileFilter(lastSaveContributor); } else if (saveContributors.size() > 0) { fileChooser.setFileFilter((JRSaveContributor)saveContributors.get(0)); } if (lastFolder != null) { fileChooser.setCurrentDirectory(lastFolder); } int retValue = fileChooser.showSaveDialog(this); if (retValue == JFileChooser.APPROVE_OPTION) { FileFilter fileFilter = fileChooser.getFileFilter(); File file = fileChooser.getSelectedFile(); lastFolder = file.getParentFile(); JRSaveContributor contributor = null; if (fileFilter instanceof JRSaveContributor) { contributor = (JRSaveContributor)fileFilter; } else { int i = 0; while(contributor == null && i < saveContributors.size()) { contributor = (JRSaveContributor)saveContributors.get(i++); if (!contributor.accept(file)) { contributor = null; } } if (contributor == null) { contributor = new JRPrintSaveContributor(getLocale(), viewerContext.getResourceBundle()); } } lastSaveContributor = contributor; try { contributor.save(viewerContext.getJasperPrint(), file); } catch (JRException e) { if (log.isErrorEnabled()) { log.error("Save error.", e); } JOptionPane.showMessageDialog(this, viewerContext.getBundleString("error.saving")); } } }//GEN-LAST:event_btnSaveActionPerformed void btnPrintActionPerformed(java.awt.event.ActionEvent evt)//GEN-FIRST:event_btnPrintActionPerformed {//GEN-HEADEREND:event_btnPrintActionPerformed // Add your handling code here: Thread thread = new Thread( new Runnable() { public void run() { try { btnPrint.setEnabled(false); JasperPrintManager.printReport(viewerContext.getJasperPrint(), true); } catch (Exception ex) { if (log.isErrorEnabled()) { log.error("Print error.", ex); } JOptionPane.showMessageDialog(JRViewerToolbar.this, viewerContext.getBundleString("error.printing")); } finally { btnPrint.setEnabled(true); } } } ); thread.start(); }//GEN-LAST:event_btnPrintActionPerformed void btnReloadActionPerformed(java.awt.event.ActionEvent evt)//GEN-FIRST:event_btnReloadActionPerformed {//GEN-HEADEREND:event_btnReloadActionPerformed // Add your handling code here: viewerContext.reload(); }//GEN-LAST:event_btnReloadActionPerformed void btnFirstActionPerformed(java.awt.event.ActionEvent evt)//GEN-FIRST:event_btnFirstActionPerformed {//GEN-HEADEREND:event_btnFirstActionPerformed // Add your handling code here: viewerContext.setPageIndex(0); viewerContext.refreshPage(); }//GEN-LAST:event_btnFirstActionPerformed void btnPreviousActionPerformed(java.awt.event.ActionEvent evt)//GEN-FIRST:event_btnPreviousActionPerformed {//GEN-HEADEREND:event_btnPreviousActionPerformed // Add your handling code here: viewerContext.setPageIndex(viewerContext.getPageIndex() - 1); viewerContext.refreshPage(); }//GEN-LAST:event_btnPreviousActionPerformed void btnNextActionPerformed(java.awt.event.ActionEvent evt)//GEN-FIRST:event_btnNextActionPerformed {//GEN-HEADEREND:event_btnNextActionPerformed // Add your handling code here: viewerContext.setPageIndex(viewerContext.getPageIndex() + 1); viewerContext.refreshPage(); }//GEN-LAST:event_btnNextActionPerformed void btnLastActionPerformed(java.awt.event.ActionEvent evt)//GEN-FIRST:event_btnLastActionPerformed {//GEN-HEADEREND:event_btnLastActionPerformed // Add your handling code here: viewerContext.setPageIndex(viewerContext.getPageCount() - 1); viewerContext.refreshPage(); }//GEN-LAST:event_btnLastActionPerformed void txtGoToActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_txtGoToActionPerformed try { int pageNumber = Integer.parseInt(txtGoTo.getText()); if ( pageNumber != viewerContext.getPageIndex() + 1 && pageNumber > 0 && pageNumber <= viewerContext.getPageCount() ) { viewerContext.setPageIndex(pageNumber - 1); viewerContext.refreshPage(); } } catch(NumberFormatException e) { } }//GEN-LAST:event_txtGoToActionPerformed void btnActualSizeActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnActualSizeActionPerformed // Add your handling code here: if (btnActualSize.isSelected()) { btnFitPage.setSelected(false); btnFitWidth.setSelected(false); cmbZoom.setSelectedIndex(-1); viewerContext.setZoomRatio(1); btnActualSize.setSelected(true); } }//GEN-LAST:event_btnActualSizeActionPerformed void btnFitPageActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnFitPageActionPerformed // Add your handling code here: if (btnFitPage.isSelected()) { btnActualSize.setSelected(false); btnFitWidth.setSelected(false); cmbZoom.setSelectedIndex(-1); viewerContext.fitPage(); btnFitPage.setSelected(true); } }//GEN-LAST:event_btnFitPageActionPerformed void btnFitWidthActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnFitWidthActionPerformed // Add your handling code here: if (btnFitWidth.isSelected()) { btnActualSize.setSelected(false); btnFitPage.setSelected(false); cmbZoom.setSelectedIndex(-1); viewerContext.fitWidth(); btnFitWidth.setSelected(true); } }//GEN-LAST:event_btnFitWidthActionPerformed void btnZoomInActionPerformed(java.awt.event.ActionEvent evt)//GEN-FIRST:event_btnZoomInActionPerformed {//GEN-HEADEREND:event_btnZoomInActionPerformed // Add your handling code here: btnActualSize.setSelected(false); btnFitPage.setSelected(false); btnFitWidth.setSelected(false); int newZoomInt = (int)(100 * getZoomRatio()); int index = Arrays.binarySearch(zooms, newZoomInt); if (index < 0) { viewerContext.setZoomRatio(zooms[- index - 1] / 100f); } else if (index < cmbZoom.getModel().getSize() - 1) { viewerContext.setZoomRatio(zooms[index + 1] / 100f); } }//GEN-LAST:event_btnZoomInActionPerformed protected float getZoomRatio() { float newZoom = viewerContext.getZoom(); try { newZoom = zoomDecimalFormat.parse( String.valueOf(cmbZoom.getEditor().getItem()) ).floatValue() / 100f; } catch(ParseException e) { } return newZoom; } void btnZoomOutActionPerformed(java.awt.event.ActionEvent evt)//GEN-FIRST:event_btnZoomOutActionPerformed {//GEN-HEADEREND:event_btnZoomOutActionPerformed // Add your handling code here: btnActualSize.setSelected(false); btnFitPage.setSelected(false); btnFitWidth.setSelected(false); int newZoomInt = (int)(100 * getZoomRatio()); int index = Arrays.binarySearch(zooms, newZoomInt); if (index > 0) { viewerContext.setZoomRatio(zooms[index - 1] / 100f); } else if (index < -1) { viewerContext.setZoomRatio(zooms[- index - 2] / 100f); } }//GEN-LAST:event_btnZoomOutActionPerformed void cmbZoomActionPerformed(java.awt.event.ActionEvent evt)//GEN-FIRST:event_cmbZoomActionPerformed {//GEN-HEADEREND:event_cmbZoomActionPerformed // Add your handling code here: float newZoom = getZoomRatio(); if (newZoom < MIN_ZOOM) { newZoom = MIN_ZOOM; } if (newZoom > MAX_ZOOM) { newZoom = MAX_ZOOM; } viewerContext.setZoomRatio(newZoom); }//GEN-LAST:event_cmbZoomActionPerformed void cmbZoomItemStateChanged(java.awt.event.ItemEvent evt) {//GEN-FIRST:event_cmbZoomItemStateChanged // Add your handling code here: btnActualSize.setSelected(false); btnFitPage.setSelected(false); btnFitWidth.setSelected(false); }//GEN-LAST:event_cmbZoomItemStateChanged /** * */ public void addSaveContributor(JRSaveContributor contributor) { saveContributors.add(contributor); } /** * */ public void removeSaveContributor(JRSaveContributor contributor) { saveContributors.remove(contributor); } /** * */ public JRSaveContributor[] getSaveContributors() { return (JRSaveContributor[])saveContributors.toArray(new JRSaveContributor[saveContributors.size()]); } /** * Replaces the save contributors with the ones provided as parameter. */ public void setSaveContributors(JRSaveContributor[] saveContributors) { this.saveContributors = new ArrayList(); if (saveContributors != null) { this.saveContributors.addAll(Arrays.asList(saveContributors)); } } /** * */ protected void initSaveContributors() { final String[] DEFAULT_CONTRIBUTORS = { "net.sf.jasperreports.view.save.JRPrintSaveContributor", "net.sf.jasperreports.view.save.JRPdfSaveContributor", "net.sf.jasperreports.view.save.JRRtfSaveContributor", "net.sf.jasperreports.view.save.JROdtSaveContributor", "net.sf.jasperreports.view.save.JRDocxSaveContributor", "net.sf.jasperreports.view.save.JRHtmlSaveContributor", "net.sf.jasperreports.view.save.JRSingleSheetXlsSaveContributor", "net.sf.jasperreports.view.save.JRMultipleSheetsXlsSaveContributor", "net.sf.jasperreports.view.save.JRCsvSaveContributor", "net.sf.jasperreports.view.save.JRXmlSaveContributor", "net.sf.jasperreports.view.save.JREmbeddedImagesXmlSaveContributor" }; for(int i = 0; i < DEFAULT_CONTRIBUTORS.length; i++) { try { Class saveContribClass = JRClassLoader.loadClassForName(DEFAULT_CONTRIBUTORS[i]); Constructor constructor = saveContribClass.getConstructor(new Class[]{Locale.class, ResourceBundle.class}); JRSaveContributor saveContrib = (JRSaveContributor)constructor.newInstance(new Object[]{getLocale(), viewerContext.getResourceBundle()}); saveContributors.add(saveContrib); } catch (Exception e) { } } } protected void reportLoaded() { btnReload.setEnabled(viewerContext.isReloadSupported()); } protected void refreshPage() { if (!viewerContext.hasPages()) { btnSave.setEnabled(false); btnPrint.setEnabled(false); btnActualSize.setEnabled(false); btnFitPage.setEnabled(false); btnFitWidth.setEnabled(false); btnZoomIn.setEnabled(false); btnZoomOut.setEnabled(false); cmbZoom.setEnabled(false); return; } btnSave.setEnabled(true); btnPrint.setEnabled(true); btnActualSize.setEnabled(true); btnFitPage.setEnabled(true); btnFitWidth.setEnabled(true); btnZoomIn.setEnabled(viewerContext.getZoom() < MAX_ZOOM); btnZoomOut.setEnabled(viewerContext.getZoom() > MIN_ZOOM); cmbZoom.setEnabled(true); } protected void pageChanged() { if (viewerContext.hasPages()) { int pageIndex = viewerContext.getPageIndex(); btnFirst.setEnabled( (pageIndex > 0) ); btnPrevious.setEnabled( (pageIndex > 0) ); boolean notLast = pageIndex < viewerContext.getPageCount() - 1; btnNext.setEnabled(notLast); btnLast.setEnabled(notLast); txtGoTo.setEnabled(btnFirst.isEnabled() || btnLast.isEnabled()); txtGoTo.setText("" + (pageIndex + 1)); } else { btnFirst.setEnabled(false); btnPrevious.setEnabled(false); btnNext.setEnabled(false); btnLast.setEnabled(false); txtGoTo.setEnabled(false); txtGoTo.setText(""); } } protected void zoomChanged() { cmbZoom.getEditor().setItem(zoomDecimalFormat.format(viewerContext.getZoom() * 100) + "%"); } public boolean isFitPage() { return btnFitPage.isSelected(); } public boolean isFitWidth() { return btnFitPage.isSelected(); } public void setFitWidth() { btnFitWidth.setSelected(true); } protected void fitPage() { btnFitPage.setSelected(true); } protected void fitWidth() { btnFitWidth.setSelected(true); } public void viewerEvent(JRViewerEvent event) { switch (event.getCode()) { case JRViewerEvent.EVENT_FIT_PAGE: fitPage(); break; case JRViewerEvent.EVENT_FIT_WIDTH: fitWidth(); break; case JRViewerEvent.EVENT_PAGE_CHANGED: pageChanged(); break; case JRViewerEvent.EVENT_REFRESH_PAGE: refreshPage(); break; case JRViewerEvent.EVENT_ZOOM_CHANGED: zoomChanged(); break; case JRViewerEvent.EVENT_REPORT_LOADED: reportLoaded(); break; } } }