Auch wenn die Funktionalitäten der jadice document platform weit über das einfache Anzeigen von Dokumenten hinausgehen, ist die Darstellung am Bildschirm doch einer der häufigsten Einsatzzwecke. Die folgenden Abschnitte gehen auf die zu diesem Zweck existierenden Klassen ein. Der in „Das Dokumentenmodell“ erläuterte Dokumentbegriff wird als bekannt vorausgesetzt. Nähere Details zum Umgang mit Dokumenten und Seiten folgen in „Dokumente in jadice“ und „Seiten in jadice“
Die folgenden Klassen existieren zur Anzeige von Dokumentinhalten:
ViewComponent-
Die
ViewComponentstellt als abstrakte Basisklasse die Querschnittsfunktionalität ihrer beiden Realisierungen,PageViewundThumbnailView, zur Verfügung. Hauptaufgabe einerViewComponentist die Anzeige von Dokumentinhalten. Zu diesem Zweck hält sie eine Dokumentreferenz vor. Die Inhalte des referenzierten Dokuments werden seitenbasiert angezeigt. PageView-
Die
PageViewist die zentrale Anzeigekomponente innerhalb der jadice document platform. Als konkrete Realisierung derViewComponentübernimmt sie die Verwaltung, Handhabung und Darstellung von Dokumenten und Seiten. Ob eine oder mehrere Seiten gleichzeitig angezeigt werden und wie im letzteren Fall deren Anordnung erfolgt, wird durch das gesetzte Seitenlayout bestimmt (Details unter „Seitenlayouts derPageView“). ThumbnailView-
Die
ThumbnailViewdient dazu, sämtliche Seiten eines Dokuments verkleinert in einer Übersicht darzustellen. Diese kann auch zur Navigation innerhalb des Dokuments genutzt werden. Die im Viewer angezeigte Seite, ebenso wie alle selektierten Miniaturen, sind farblich hevorgehoben. Zusätzlich besteht die Möglichkeit, Seiten des Dokuments mit Hilfe der Maus umzusortieren. Diese Änderung der Reihenfolge wird automatisch in anderenViewComponents, die dasselbe Dokument anzeigen, widergespiegelt.[11]
Die ViewComponent bietet ein Konzept, mit dem – über die reine Anzeige von
Dokumenten hinausgehend – dem Nutzer zusätzliche Interaktionsmöglichkeiten
gegeben werden können. Um dies zu erreichen können selbst definierte Werkzeuge
(Instanzen von Tool) an eine ViewComponent angedockt werden. Diese
erhalten Input-Events und können mit der dargestellten Seite interagieren. Zudem
können sie Inhalte über dem eigentlichen Dokument rendern und Beiträge für das
Kontextmenü leisten.
Weitere Informationen zur Verwendung und den Möglichkeiten der Tool-API finden sich in „Tools“.
Sowohl PageView als auch ThumbnailView bieten für den Umgang mit
Dokumenten folgende Methoden an:
getDocument()-
Diese Methode liefert eine Referenz auf das aktuell angezeigte Dokument. Der Aufruf dieser Methode kann jederzeit unabhängig vom Swing Event Dispatch Thread stattfinden.
setDocument(...)-
Diese Methode ändert das anzuzeigende Dokument. Der Aufruf dieser Methode muss zwingend auf dem Swing Event Dispatch Thread stattfinden.
cleanup()-
Diese Methode entfernt das Dokument. Der Aufruf dieser Methode kann jederzeit unabhängig von Swing Event Dispatch Thread stattfinden.
Instanzen von PageView oder ThumbnailView können immer genau ein
Dokument darstellen. Dieses kann ihnen unabhängig von seinem Ladezustand
übergeben werden. Änderungen am Dokument erkennen sie selbstständig und führen
entsprechende Updates der Anzeige durch.
Registrierte Listener, zum Beispiel die integrierende Anwendung, werden über
wichtige Änderungen an den Komponenten beziehungsweise der Darstellung des
Dokuments informiert. Dies geschieht unter Verwendung von
PropertyChangeEvents beziehungsweise
PropertyChangeListeners.[12] Interessenten melden sich als
PropertyChangeListener qualifiziert (genau für eine
definierte Eigenschaft) oder unqualifiziert (für alle Eigenschaften) bei der
jeweiligen Komponente an. Zur konkreten Identifizierung der betreffenden
Property sind Eigenschaftsnamen in PageView beziehungsweise in
ThumbnailView als öffentliche Konstanten deklariert.
Als JComponent kann die PageView direkt in eine
Swing-Komponentenhierarchie eingebettet werden. Im Regelfall empfiehlt es sich
jedoch, stattdessen den komfortableren BasicViewer zu verwenden. Dieser
bietet das infrastrukturelle Umfeld für eine PageView. Als
JComponent beziehungsweise JavaBean ist er einfach in
eigene Architekturen und Layouts einbettbar. Er kombiniert die Bildanzeigefläche
einer PageView mit zugehörigen Scrollbars. Für Swing-basierte Applikationen
ist der BasicViewer im Normalfall einem direkten Einsatz der PageView
vorzuziehen.
Ähnliches gilt für den Fall der ThumbnailView. Diese ist ebenfalls eine
JComponent und wird selten direkt verwendet.
Stattdessen existiert die Klasse PageSorter, die eine ThumbnailView
umhüllt und mit Scrollbars versieht. Die Demo-Klasse SorterFrame zeigt die
Verwendung des PageSorter in einem separaten
JFrame.
Alternativ dazu kann eine ThumbnailView als GUI-Element
über einer PageView eingeblendet werden. Diese Funktionalität wird durch das
Werkzeug LightboxThumbnailTool angeboten. Es kann über die in „Tools“ beschriebene Vorgehensweise auf einer PageView
registriert werden.
Seitenlayouts der PageView
Die Klasse PageView ermöglicht das Darstellen von Dokumentseiten. Bei
Dokumenten, die mehr als eine Seite enthalten, bestimmt ein Seitenlayout
darüber, wie viele Seiten gleichzeitig sichtbar sind, und wie diese angeordnet
werden. Die zur Verfügung stehenden Varianten werden durch die Konstanten in
PageView.Layout vorgegeben. Im Einzelnen handelt es sich dabei um die folgenden:
PageView.Layout.PAGE-
Darstellung von Einzelseiten.
PageView.Layout.CONTINUOUS_PAGE-
Fortlaufende Darstellung einzelner Seiten untereinander.
PageView.Layout.SPREAD-
Darstellung von Doppelseiten. Die erste Seite wird als rechte Seite dargestellt.
PageView.Layout.CONTINUOUS_SPREAD-
Fortlaufende Darstellung von Doppelseiten untereinander. Die erste Seite wird als rechte Seite dargestellt.
PageView.Layout.GRID-
Fortlaufende Darstellung sämtlicher Seiten in einer Gitteransicht. Es werden so viele Seiten nebeneinander platziert, wie es Zoomfaktor und Breite der Darstellungsfläche erlauben.
Die Seitenlayouts lassen sich Kategorisieren nach der Frage, ob eine fortlaufende Darstellung aller Dokumentseiten erfolgt, oder lediglich eine Maximalzahl von Seiten gleichzeitig Dargestellt wird (Einzel-/Doppelseite). Bei fortlaufenden Seitenlayouts können sämtliche Seiten durch Scrollen erreicht werden, während im anderen Fall ein expliziter Seitenwechsel notwendig ist.[13]
[11] Ob die Funktionalität zur Änderung der Reihenfolge von Seiten tatsächlich zur Verfügung steht, hängt davon ab ob die geltenden Berechtigungen dies zulassen und ob die entsprechenden Drag&Drop Handler konfiguriert sind. Weitere Informationen finden sich unter „Berechtigungskonzept“ und „Drag&Drop“.
[12] Siehe dazu auch PropertyChangeEvent und PropertyChangeSupport in der Java 2 Platform API Specification
[13] Falls auch bei nicht fortlaufenden Seitenlayouts ein automatischer
Seitenwechsel gewünscht ist, kann zu diesem Zweck das
KeyboardNavigationTool eingebunden werden. Details dazu finden sich
unter „Navigations-Tools“.

