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
ViewComponent
stellt als abstrakte Basisklasse die Querschnittsfunktionalität ihrer beiden Realisierungen,PageView
undThumbnailView
, zur Verfügung. Hauptaufgabe einerViewComponent
ist die Anzeige von Dokumentinhalten. Zu diesem Zweck hält sie eine Dokumentreferenz vor. Die Inhalte des referenzierten Dokuments werden seitenbasiert angezeigt.PageView
Die
PageView
ist 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
ThumbnailView
dient 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 anderenViewComponent
s, die dasselbe Dokument anzeigen, widergespiegelt.[10]
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
PropertyChangeEvent
s beziehungsweise
PropertyChangeListener
s.[11] 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.[12]
[10] 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“.
[11] Siehe dazu auch PropertyChangeEvent und PropertyChangeSupport in der Java 2 Platform API Specification
[12] 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“.