Wenn ein Standarddialog für ein spezielles Plug-in zu einfach strukturiert ist, können Sie mit Hilfe der Klasse Dialog einen eigenen Dialog erstellen. Es wurde bereits dargestellt, wie das Tool für Readme-Dateien ein Aktionsset durch die Aktion "Browser für Readme-Datei öffnen" ergänzt hat. Dieses Aktionsset wird in der Symbolleiste der Workbench sowie im Menü Fenster > Editor für Readme-Dateien angezeigt.
An dieser Stelle soll nun die Implementierung dieser Aktion in der Klasse WindowActionDelegate dieses Tools erläutert werden.
public void run(IAction action) { SectionsDialog dialog = new SectionsDialog(window.getShell(), ReadmeModelFactory.getInstance().getSections(selection)); dialog.open(); }
Die Klasse "WindowActionDelegate" für das Aktionsset verwendet die aktuelle Auswahl in der Ressourcensicht "Navigator" (die Datei .readme), um eine Liste der Abschnitte in der Readme-Datei abzurufen. Diese Liste und die Shell des Workbench-Fensters werden an die Klasse SectionsDialog übergeben.
Wenn der Benutzer die Aktion auswählt, wird die Klasse SectionsDialog geöffnet.
Die Klasse SectionsDialog wird im Plug-in des Tools für Readme-Dateien implementiert, indem die Klasse Dialog als Unterklasse in das Paket org.eclipse.jface.dialogs aufgenommen wird.
Die Klasse Dialog stellt eine Basisunterstützung für die Erstellung eines Dialog-Shell-Fensters, die Erstellung der allgemeinen Dialogschaltflächen und das Starten des Dialogs zur Verfügung. Die Unterklassen sind für die Verarbeitung des eigentlichen Dialoginhalts zuständig:
Die Klasse SectionsDialog erstellt eine SWT-Liste, um die Liste der Abschnitte anzuzeigen. Sie verwendet eine JFace-Anzeigefunktion, um die Liste mit Inhalt zu füllen. (Die JFace-Anzeigefunktionen werden unter Anzeigefunktionen näher erläutert.) Bitte beachten Sie, dass der Dialog keine der Schaltflächen für den Dialog erstellen muss, da dies durch die Superklasse vorgenommen wird.
protected Control createDialogArea(Composite parent) { Composite composite = (Composite)super.createDialogArea(parent); List list = new List(composite, SWT.BORDER); ... ListViewer viewer = new ListViewer(list); ... return composite; }
protected void configureShell(Shell newShell) {
super.configureShell(newShell);
newShell.setText(MessageUtil.getString("Readme Sections"));
...
}
Dialoge können nach Bedarf einfach oder komplex gestaltet werden. Bei der Implementierung eines Dialogs dient der Großteil des Dialogcodes dazu, die SWT-Steuerelemente zu erstellen, die den Inhaltsbereich darstellen, und alle erforderlichen Ereignisse zu verarbeiten, während der Dialog geöffnet ist. Sobald der Benutzer eine Schaltfläche auswählt, kann der Dialog den Status der einzelnen Steuerelemente (oder Anzeigefunktionen) abfragen, aus denen er besteht, um die erforderliche Aktion zu ermitteln.