Klasse SwingReportViewer

Alle implementierten Schnittstellen:
ReportViewer, ViewerComponent, ImageObserver, MenuContainer, Serializable, Accessible

public class SwingReportViewer extends JPanel implements ReportViewer
The SwingReportViewer is the top level container for all Swing viewer elements. It is an example implementation of the com.inet.viewer.ReportViewer interface which by default has the SwingToolBar element at the top, collects the various SwingReportViews to be shown in a TabbedPane, and shows the SwingStatusBar at the bottom.

Note that the color for the space in which the report pages appear is taken from the UI color resource under the UI property ReportViewer.UIPROP_SCROLLPANE_BACKGROUND. If no property is found, Color.LIGHT_GRAY is taken by default.

A simple default SwingReportViewer can be created and shown in a JFrame with the following lines of code:

URLRenderData myConnection = new URLRenderData("http://<reportserver>:9000/?report=file:c:/report1.rpt");
myConnection.setPromptOnRefresh(true);
myConnection.setReportTitle("My Test Report");
SwingReportViewer viewer = new SwingReportViewer();
viewer.addNewReportView(myConnection);
frame.getContentPane().add(viewer);
frame.pack();
frame.setVisible(true);

Note that first, a RenderData object was created (in this case, a URLRenderData object). This RenderData object is passed to the viewer to have it create a ReportView, in either createReportView(RenderData) - which simply is a factory method which creates a new ReportView but does not add it to the Viewer - or in addNewReportView(RenderData) - which first creates a ReportView (with createReportView), and then adds the newly created ReportView to the viewer.

SwingReportViewer offers various possibilities for customizing your own Viewer by either overriding certain methods, or by setting certain options. Here are a few scenarios of possibilities of how the viewer can be customized:

Each ReportView in its own JFrame

It could be that you would like to not have a TabbedPane for various ReportViews, but rather would like to have a JFrame opened for each ReportView which is opened. To do this, you would use code something like the following (for each example, we assume that we have already instanced a RenderData object called "myConnection"):

SwingReportViewer viewer = new SwingReportViewer() {

   // Here we will override the default behavior of the Viewer.
   // For this, we'll keep track of the various Views in a HashMap:

   HashMap myMap = new HashMap();
   public void addReportView(ReportView view, boolean isClosable) {

       // We now override the default behavior of addReportView
       // which was to open new tabs for each new view.
       // Instead, we open a new frame, place the new report view
       // inside it, and remember it in combination with the frame
       // in our hash map.

       JFrame frame = new JFrame(view.getReportData().
                                       getReportTitle());

       // So that the viewer knows which ReportView is the
       // current report view (for toolbar actions, etc.), we'll
       // define a WindowFocusListener so that whenever a user
       // focuses on a report view window, it becomes the
       // current report view.

       WindowFocusListener l = new WindowFocusListener() {
           public void windowGainedFocus(WindowEvent e) {
               setCurrentReportView((ReportView)myMap.get(e.getWindow()));
           }
           public void windowLostFocus(WindowEvent e) {
           }
       };
       myMap.put(frame,view);

       // Now we simply add the view to the frame and show it:

       frame.addWindowFocusListener(l);
       frame.getContentPane().add(view.getComponent());
       frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
       frame.pack();
       frame.setVisible(true);
       setCurrentReportView(view);
   }
};

// This is now for initializing the viewer: We create a new
// ReportView and add it to the viewer - this will end up
// calling our overridden method and opening a new Frame.

viewer.addNewReportView(myConnection);

// We also want our toolbar to be in its own frame, so we
// extract it and place it in a JFrame:

JFrame toolbar = new JFrame("Toolbar");
toolbar.getContentPane().add(viewer.getToolBar().getComponent());
toolbar.pack();
toolbar.setVisible(true);

New ReportViews into the same JFrame

If we want each newly opened ReportView to be shown in the same frame, that is, to only show one ReportView at a time and to "navigate" through ReportViews, we do this similarly to the last example, except that only one Frame is created, and the ReportViews are simply swapped within this one Frame:

SwingReportViewer viewer = new SwingReportViewer() {

     // Here we will override the default behavior of the Viewer.

    public void addReportView(ReportView view, boolean isClosable) {

        // We now override the default behavior of addReportView
        // which was to open a new tab for each new view.
        // Instead, we remove all old views and replace them with the new view.

        closeAllReportViews();
        super.addReportView( view, isClosable );
    }
 };

 // This initializes the viewer: We create a new
 // ReportView and add it to the viewer

 viewer.addNewReportView(myConnection);

 JFrame viewerFrame = new JFrame("Viewer");
 viewerFrame.getContentPane().add(viewer);
 viewerFrame.pack();
 viewerFrame.setVisible(true);

Theoretically it would be possible to actually implement navigation backwards and forwards through ReportViews - one would simply have to store each ReportView in a history and run through the history backwards and forwards as needed.
Seit:
7.0
Siehe auch:
  • Felddetails

    • VERSION_MAJOR

      public static final int VERSION_MAJOR
      FOR INTERNAL USE ONLY
      Siehe auch:
    • VERSION_MINOR

      public static final int VERSION_MINOR
      FOR INTERNAL USE ONLY
      Siehe auch:
    • PRINTER_USE_DEFAULT_FORMAT_IF_SIMILAR

      public static final int PRINTER_USE_DEFAULT_FORMAT_IF_SIMILAR
      Uses the default format of the printer if it is A4 or Letter while the report format is the other size.
      Siehe auch:
    • PRINTER_USE_REPORT_FORMAT

      public static final int PRINTER_USE_REPORT_FORMAT
      Always uses the report's paper format, even if it is similar to the printer's paper format.
      Siehe auch:
  • Konstruktordetails

    • SwingReportViewer

      public SwingReportViewer()
      Creates an instance of the SwingReportViewer, initializing a set of Actions and a SwingToolBar.
      Seit:
      7.0
    • SwingReportViewer

      public SwingReportViewer(ViewerContext context)
      Creates an instance of the SwingReportViewer with the given ViewerContext for handling various actions
      Parameter:
      context - ViewerContext object which handles various user actions. Can be null, which causes the default SwingViewerContext to be used.
      Seit:
      9.0
  • Methodendetails

    • setViewerContext

      public void setViewerContext(ViewerContext context)
      Sets the ViewerContext for this viewer, used for reacting to and handling events which occur in the viewer.
      Angegeben von:
      setViewerContext in Schnittstelle ReportViewer
      Parameter:
      context - ViewerContext to use for this viewer. Can not be null.
      Seit:
      7.0
      Siehe auch:
    • getViewerContext

      public ViewerContext getViewerContext()
      Returns the current ViewerContext for this viewer, which is used for reacting to and handling events occurring in the viewer. By default, this will return an instance of SwingViewerContext.
      Angegeben von:
      getViewerContext in Schnittstelle ReportViewer
      Gibt zurück:
      ViewerContext used by this viewer
      Seit:
      7.0
      Siehe auch:
    • closeAllReportViews

      public void closeAllReportViews()
      This method permanently closes and removes all ReportViews currently in the ReportViewer. This will also close any currently open connections to the various RenderData objects to which the ReportViews are connected. Note that this causes the report views to be disposed of - trying to add one of them back to the viewer via ReportViewer.addReportView(ReportView, boolean) will result in an IllegalStateException. Instead simply create a new report view with the same RenderData.
      Angegeben von:
      closeAllReportViews in Schnittstelle ReportViewer
      Seit:
      7.0
    • closeReportView

      public void closeReportView(int index)
      Permanently closes and removes the ReportView at the given index, 0-based. That is, closeReportView(0) will close and remove the first ReportView added to the Viewer, closeReportView(1) the second, etc. This will also close any currently open connections to the ReportView's RenderData object. Note that this causes the report view to be disposed of - trying to add it back to the viewer via ReportViewer.addReportView(ReportView, boolean) will result in an IllegalStateException. Instead simply create a new report view with the same RenderData. If there is no ReportView at this index, this method will throw a ViewerException.
      Angegeben von:
      closeReportView in Schnittstelle ReportViewer
      Parameter:
      index - Index of ReportView to close and remove.
      Seit:
      7.0
    • closeReportView

      public void closeReportView(ReportView view)
      Permanently closes and disposes the ReportView given as the parameter and removes it from the ReportViewer. This will also close any currently open connections to the ReportView's RenderData object. Note that this causes the report view to be disposed of - trying to add it back to the viewer via ReportViewer.addReportView(ReportView, boolean) will result in an IllegalStateException. Instead simply create a new report view with the same RenderData.
      Angegeben von:
      closeReportView in Schnittstelle ReportViewer
      Parameter:
      view - ReportView to close and remove from the ReportViewer
      Seit:
      7.0
    • getToolBar

      public ToolBar getToolBar()
      Returns the current ToolBar - this tool bar belongs to the currently visible or selected ReportView object. This object is responsible for various user actions for navigating through the report, printing, etc.
      Angegeben von:
      getToolBar in Schnittstelle ReportViewer
      Gibt zurück:
      ToolBar of current ReportView
      Seit:
      7.0
    • addNewReportView

      public ReportView addNewReportView(RenderData data, boolean isClosable)
      Creates a new ReportView object, using the RenderData parameter as its source of report data. Also adds this newly created ReportView to the ReportViewer, therefore this view should not simply be added somewhere else without first removing it from the viewer. Note that as long as the viewer exists, this report view will be held in memory, unless it is removed via ReportViewer.closeReportView(int) or ReportViewer.closeAllReportViews().
      If a report with precisely the same properties has already been added, this will not create an identical second view, rather it will give focus to the view already opened. If you want to add two identical reports to the same viewer, simply add an identifying property to the report views, such as a time stamp.
      Angegeben von:
      addNewReportView in Schnittstelle ReportViewer
      Parameter:
      data - RenderData object specifying the source of report data
      isClosable - Whether the report view is to have a close button
      Gibt zurück:
      Newly created ReportView - this ReportView has now been added to a ReportViewer and should not simply be added somewhere else without first removing it from the viewer.
      Seit:
      7.4
      Siehe auch:
    • addReportView

      public void addReportView(ReportView repView, boolean isClosable)
      Adds a given ReportView to the ReportViewer - this ReportView need not be initialized at this point in time.
      Note that as long as the viewer exists, this report view will be held in memory, unless it is removed via ReportViewer.closeReportView(int) or ReportViewer.closeAllReportViews().
      Angegeben von:
      addReportView in Schnittstelle ReportViewer
      Parameter:
      repView - ReportView to add
      isClosable - Whether the report view is to have a close button
      Seit:
      7.4
      Siehe auch:
    • addNewReportView

      public ReportView addNewReportView(RenderData data)
      Creates a new ReportView object, using the RenderData parameter as its source of report data. Also adds this newly created ReportView to the ReportViewer.
      Note that as long as the viewer exists, this report view will be held in memory, unless it is removed via ReportViewer.closeReportView(int) or ReportViewer.closeAllReportViews(). In this case, it can not be added back to the Viewer via this method. Instead it must be recreated with the RenderData.
      Note also that the report view will not have a close button if it is the first report view added to the viewer, otherwise it will. If you'd like to customize this behavior, use the method ReportViewer.addNewReportView(RenderData, boolean) instead, where you can manually set whether or not the view is to have a close button.
      If a report with precisely the same properties has already been added, this will not create an identical second view, rather it will give focus to the view already opened. If you want to add two identical reports to the same viewer, simply add an identifying property to the report views, such as a time stamp.
      Angegeben von:
      addNewReportView in Schnittstelle ReportViewer
      Parameter:
      data - RenderData object specifying the source of report data
      Gibt zurück:
      Newly created ReportView - this ReportView has now been added to a ReportViewer and should not simply be added somewhere else without first removing it from the viewer.
      Seit:
      7.0
      Siehe auch:
    • createReportView

      public ReportView createReportView(RenderData data)
      Creates a report view and initializes it with the data source "data".
      Parameter:
      data - RenderData object for the report data
      Gibt zurück:
      Newly created ReportView.
      Seit:
      7.0
    • addReportView

      public void addReportView(ReportView repView)
      Adds a given ReportView to the ReportViewer - this ReportView need not be initialized at this point in time.
      Note that as long as the viewer exists, this report view will be held in memory, unless it is removed via ReportViewer.closeReportView(int) or ReportViewer.closeAllReportViews(). In this case, it can not be added back to the viewer via this method. Instead it must be recreated with the RenderData.
      Note also that the report view will not have a close button if it is the first report view added to the viewer, otherwise it will. If you'd like to customize this behavior, use the method ReportViewer.addReportView(ReportView, boolean) instead, where you can manually set whether or not the view is to have a close button.
      Angegeben von:
      addReportView in Schnittstelle ReportViewer
      Parameter:
      repView - ReportView to add
      Seit:
      7.0
      Siehe auch:
    • removeNotify

      public void removeNotify()
      This method overrides "removeNotify" in JComponent, and unregisters the listeners for the SwingReportViewer. Do not call this method yourself, it will be called automatically when the viewer is removed from its container.
      Setzt außer Kraft:
      removeNotify in Klasse JComponent
      Seit:
      7.0
      Siehe auch:
    • addNotify

      public void addNotify()
      This method overrides "addNotify" in JComponent, and registers the needed listeners for the SwingReportViewer. Do not call this method yourself, it will be called automatically when the viewer is placed into a container.
      Setzt außer Kraft:
      addNotify in Klasse JComponent
      Löst aus:
      ViewerException - If you attempt to place this into a component whose top window is not a Swing component. getRootPane() must return a component.
      Seit:
      7.0
      Siehe auch:
    • getCurrentReportView

      public ReportView getCurrentReportView()
      Returns the currently visible or selected ReportView object. Note that this will return null if no ReportView is currently visible or selected.
      Angegeben von:
      getCurrentReportView in Schnittstelle ReportViewer
      Gibt zurück:
      Currently active ReportView, or null if none is currently active
      Seit:
      7.0
    • setCurrentReportView

      public void setCurrentReportView(ReportView rv)
      Sets which ReportView is currently selected and to be affected by any toolbar actions, etc. Any time the toolbar or group view needs to fire an action, it asks the viewer for the current report view via ReportViewer.getCurrentReportView(). This method makes sure that the correct report view is set as "current".
      Note that this method also notifies each ReportViewChangeListener of a change in the currently selected report view.
      Note also that "null" is allowed here which causes no view at all to be viewed as the currently selected report view.
      Angegeben von:
      setCurrentReportView in Schnittstelle ReportViewer
      Parameter:
      rv - ReportView to give focus to and to set as "current" report view.
      Seit:
      7.0
      Siehe auch:
    • setHasGroupTree

      public void setHasGroupTree(boolean hasGroupTree)
      Sets all report views to whether or not they are to show a group tree. If this is false, the report views are not to show any group tree, regardless of whether or not their reports have groups.
      Angegeben von:
      setHasGroupTree in Schnittstelle ReportViewer
      Parameter:
      hasGroupTree - Are all report views to show a group tree?
      Seit:
      7.0
    • hasGroupTree

      public boolean hasGroupTree()
      Returns whether the global "hasGroupTree" setting is on or off (by default it is on). Note that there can always be local exceptions to this rule.
      Angegeben von:
      hasGroupTree in Schnittstelle ReportViewer
      Gibt zurück:
      Global "hasGroupTree" setting
      Seit:
      7.0
    • setHasStatusBar

      public void setHasStatusBar(boolean hasStatusBar)
      Sets for all report views whether or not they are to show a status bar. If this is false, the report views are not to show a status bar.
      Angegeben von:
      setHasStatusBar in Schnittstelle ReportViewer
      Parameter:
      hasStatusBar - Are all report views to show a status bar?
      Seit:
      7.0
    • hasStatusBar

      public boolean hasStatusBar()
      Returns whether the global setting of "hasStatusBar" is on or off (by default it is on).
      Angegeben von:
      hasStatusBar in Schnittstelle ReportViewer
      Gibt zurück:
      Global "hasStatusBar" setting
      Seit:
      7.0
    • getMajorVersion

      public static int getMajorVersion()
      Returns the number of the "major version" of this SwingReportViewer, that is, for version 7.5, this would return "7".
      Gibt zurück:
      Number of "major version" of this SwingReportViewer
      Seit:
      7.0
    • getMinorVersion

      public static int getMinorVersion()
      Returns the number of the "minor version" of this SwingReportViewer, that is, for version 7.5, this would return "5".
      Gibt zurück:
      Number of "minor version" of this SwingReportViewer
      Seit:
      7.0
    • getVersionSuffix

      public static String getVersionSuffix()
      FOR INTERNAL USE ONLY Returns the suffix for the version number.
      Gibt zurück:
      version suffix
      Seit:
      10.0
    • getVersion

      public static String getVersion()
      Returns the current version of the SwingReportViewer as a String representation, e.g. "7.5".
      Gibt zurück:
      Current version of the SwingReportViewer
      Seit:
      7.0
    • getActionPool

      public ActionPool getActionPool()
      Returns the SwingViewer report actions connected to this viewer. These can be customized and changed as needed.
      Gibt zurück:
      SwingViewer report actions connected to this viewer.
      Seit:
      7.0
    • getLastError

      public Throwable getLastError()
      Returns the last error which occurred in the viewer. Returns null if no error has occurred at all.
      Gibt zurück:
      Last error occurred in the viewer, or null if no error has occurred.
      Seit:
      7.0
    • getComponent

      public Component getComponent()
      All public graphical components of the viewer must implement this method, which returns the actual AWT component so that it can be added to containers, etc.
      For example, if you have a "ReportViewer" and would like to add it to your own JFrame, simply call: myFrame.add(viewer.getComponent())
      Angegeben von:
      getComponent in Schnittstelle ViewerComponent
      Gibt zurück:
      Actual AWT component of this object.
      Seit:
      7.0
    • addReportViewChangeListener

      public void addReportViewChangeListener(ReportViewChangeListener rvcl)
      Adds an ReportViewChangeListener to the ReportView.
      Angegeben von:
      addReportViewChangeListener in Schnittstelle ReportViewer
      Parameter:
      rvcl - the ReportViewChangeListener to be added
      Seit:
      7.0
    • removeReportViewChangeListener

      public void removeReportViewChangeListener(ReportViewChangeListener rvcl)
      Removes an ReportViewChangeListener from the ReportView.
      Angegeben von:
      removeReportViewChangeListener in Schnittstelle ReportViewer
      Parameter:
      rvcl - the listener to be removed
      Seit:
      7.0
    • getLoggingStream

      public static PrintStream getLoggingStream()
      Returns the PrintStream used by the viewer for log outputs. This is null if logging is deactivated. By default, this should return the System.out stream.
      Gibt zurück:
      PrintStream used for log outputs.
      Seit:
      7.8.01
    • setLoggingStream

      public static void setLoggingStream(PrintStream stream)
      Sets the stream to be used for log outputs. Set this stream to null in order to deactivate log outputs completely. By default, the log stream is set to System.out.
      Parameter:
      stream - PrintStream the viewer is to log to.
      Seit:
      7.8.01
    • getReportView

      public ReportView getReportView(int i)
      Returns the report view at the given index. Note this report view need not be the current report view or even visible. The maximum allowed index is getReportViewCount()-1, the minimum allowed is 0.
      Angegeben von:
      getReportView in Schnittstelle ReportViewer
      Parameter:
      i - Index of report view to fetch.
      Gibt zurück:
      ReportView at the index given
      Seit:
      7.0
    • getReportViewCount

      public int getReportViewCount()
      Returns the number of ReportViews registered and added to this viewer. The return value -1 is the maximum allowed index for ReportViewer.getReportView(int).
      Angegeben von:
      getReportViewCount in Schnittstelle ReportViewer
      Gibt zurück:
      The number of ReportViews held by the ReportViewer
      Seit:
      7.0
    • addStateChangeListener

      public void addStateChangeListener(PropertyChangeListener l)
      Adds a PropertyChangeListener to the listener list. The listener will be informed about status changes of all progresses and messages changes in the StatusBar.
      Angegeben von:
      addStateChangeListener in Schnittstelle ReportViewer
      Parameter:
      l - PropertyChangeListener to add to the list of listeners
      Seit:
      7.0
    • removeStateChangeListener

      public void removeStateChangeListener(PropertyChangeListener l)
      Removes a PropertyChangeListener from the list of listeners.
      Angegeben von:
      removeStateChangeListener in Schnittstelle ReportViewer
      Parameter:
      l - PropertyChangeListener to remove from the list of listeners.
      Seit:
      7.0
    • getProgressPool

      public ProgressPool getProgressPool()
      Returns the ProgressPool of the viewer. The ProgressPool handles all progresses of the viewer. You can add listeners to the ProgressPool to watch status changes of the progresses.
      Angegeben von:
      getProgressPool in Schnittstelle ReportViewer
      Gibt zurück:
      Returns the ProgressPool of the viewer.
      Seit:
      7.0
    • getDefaultExportDirectory

      public String getDefaultExportDirectory()
      Returns the default directory in that the Java viewer will save the exported files.
      Gibt zurück:
      Default directory used to save the exported files
      Seit:
      7.0
    • setDefaultExportDirectory

      public void setDefaultExportDirectory(String directory)
      Sets the default directory in that the Java viewer will save the exported files. The directory can be changed in the export dialog during export.
      Parameter:
      directory - Default directory used to save the exported files
      Seit:
      7.0
    • setCustomPromptEditor

      public void setCustomPromptEditor(String promptName, int valueType, CustomPromptEditor editor)
      Registers the given CustomPromptEditor for prompts with the given name and value type, case-insensitive. Setting null as the editor unregisters any CustomPromptEditor for the given name and value type. An existing CustomPromptEditor for the given name and value type will be replaced with the one set with this method. Depending on the value type of the prompt, your custom prompt editor should return one of the following types:

      • If a multiple prompt, a vector containing one or more single values.
      • If one of the values is a range, it should be a RangePromptValue.

        For single value prompts:

        • String for value type PromptData#STRING
        • Double for value type PromptData#NUMBER and PromptData#CURRENCY
        • Boolean for value type PromptData#BOOLEAN
        • Date for value type PromptData#DATE and PromptData#DATETIME
        • Time for value type PromptData#TIME
        • byte[] for value type PromptData#BINARY
      Angegeben von:
      setCustomPromptEditor in Schnittstelle ReportViewer
      Parameter:
      promptName - name of prompt to register custom prompt editor for, may not be null
      valueType - value type of the promptName. Use the constants form the class PromptData for the types.
      editor - custom prompt editor for prompting certain prompts with your own components.
      Seit:
      9.0
    • setPrinterDefaultFormatHandling

      public void setPrinterDefaultFormatHandling(int printerDefaultFormatHandling)
      Sets the printer default format handling to use. Allowed values are:
      • PRINTER_USE_DEFAULT_FORMAT_IF_SIMILAR (default setting): If the printer default format is A4 while the report page format is Letter, or vice versa, map the paper format to the printer default setting. Note that this may cause your report to be slightly scaled so that it fits the page format of the client's printer.
      • PRINTER_USE_REPORT_FORMAT: Forces the report paper format setting to be chosen by default when printing. Note that this can cause parts of your report to be truncated if the printer is not able to print in the format in your report.
      Parameter:
      printerDefaultFormatHandling - printer default format handling
      Löst aus:
      IllegalArgumentException - if the given parameter is none of the constants allowed for this value.
      Seit:
      8.2
      Siehe auch:
    • getPrinterDefaultFormatHandling

      public int getPrinterDefaultFormatHandling()
      Returns the printer default format handling. See setPrinterDefaultFormatHandling(int) for further information.
      Gibt zurück:
      printer default format handling
      Seit:
      8.2
      Siehe auch:
    • getDefaultSetting

      public DefaultSetting getDefaultSetting(DefaultSetting.Key key)
      Returns the setting of the property defined by the key, or null if no value is set.
      Parameter:
      key - key specifying which setting to return
      Gibt zurück:
      value of the setting, or null if the setting has no value set.
      Seit:
      9.0
    • setDefaultSetting

      public void setDefaultSetting(DefaultSetting.Key key, DefaultSetting value)
      Applies a setting defined by the given key-value pair.
      Parameter:
      key - key specifying which setting to apply
      value - value of the setting to apply
      Seit:
      9.0