|
Letzte
Bearbeitung dieses Dokuments: |
Voraussetzungen für das Verständnis dieses Dokuments:Grundkenntnisse in der Programmierung von Java (Klassen, Methoden, Schleifen) oder anderer Objekt-Orientierter Programmiersprachen (z.B. C++, Modula-2, Pascal). Tutorial Datenbank-Ladeprogramm mit Graphischer Benutzeroberfläche (Java_Intro_02) durchgearbeitet. |
Ungefährer Zeitbedarf zum Durcharbeiten dieses Dokuments:Arbeitszeit:
|
In diesem Dokument wird begonnen, das Task-Frame für die Verwaltung von Projekt-Code und Sprache zu implementieren.
Allgemein gesprochen ist ein Task-Frame ist ein Fenster, das durch Auswahl des entsprechenden Codes im Start-Frame (CommandCenter) geöffnet wird und zur Bearbeitung von Geschäftsfällen dient.
Voriger Schritt: JavaScout ProjectAssist, Start-Frame Grundlagen (Java_Fatclient_01) – Auswählen der Geschäftsanwendung
Vorbemerkung
Vorbedingungen
Klasse
für das Task-Frame für die Verwaltung von Projekt und
Sprache eröffnen
Spezieller
Code für das Task-Frame
*
Von Basisklasse erben
*
'Constructor' mit Start-Frame als Parameter
*
Methoden die vor, nach und zum Anzeigen des Fensters ausgeführt
werden
* Möglicher
Zwischentest
*
Spezielle GUI-Elemente für die Geschäftsanwendung
entwerfen
*
Variablen für die GUI-Elemente definieren
*
Überschreiben der Methode get_pnl_DetailFields
*
Methode zum Zuordnen der sprachabhängigen Texte zu den
GUI-Elementen aufrufen
Datei
mit der XML-Struktur mit den sprachabhängigen Texten
erweitern
Zusätzlicher
Code in der Klasse
JS_ProjAssist_CommandCenter__ActionHandler
Test
Gesamter
Code am Ende des Schrittes
* Klasse
JS_ProjAssist_Project
Weitere
Schritte und verwandte Dokumentation
Nächster Schritt: DataBase-Access (DBA) Klasse für DB-Tabelle 'ProjLang'
Obwohl
Eclipse in 'deutscher Version' installiert werden kann, sind
die Abbildungen in diesem Dokument mit der 'english Version'
erstellt. |
Tutorial
Datenbank-Ladeprogramm
mit Graphischer Benutzeroberfläche (Java_Intro_02)
durchgearbeitet
– und dessen Vorbedingungen auch.
Die Codierung der
GUI-Elemente wurde ausführlich in Schritt
2: Benutzeroberfläche (GUI) codieren dieses Tutorials
behandelt.
Voriger Schritt JavaScout ProjectAssist, Start-Frame Grundlagen (Java_Fatclient_01) – Auswählen der Geschäftsanwendung abgeschlossen.
Klasse
für das Task-Frame zur Verwaltung von Projekt und Sprache
eröffnen
Um eine neue Java-Klasse zu eröffnen wird mit der rechten Maustaste das bereits existierende Java-Package (js_projassist.client) angeklickt und aus dem Kontext-Menu >New>Class ausgewählt. |
|
Im darauf hin erscheinenden Fenster (New Java Class) wird
Die anderen bereits vorgegebenen Werte werden nicht verändert. Durch Anklicken der Schaltfläche [ Finish ] wird die Datei für den Quell-Code der Klasse angelegt. |
Spezieller
Code für das Task-Frame
Der
Code für das Task-Frame besteht zu großen Teilen aus
Algorithmen, die bereits in früheren Tutorials ausführlich
erklärt wurden.
Methoden,
die vor dem, nach dem und zum Aufbau der Benutzeroberfläche
ausgeführt werden sind gleich oder sehr ähnlich jenen, die
bereits in
JavaScout
ProjectAssist, Start-Frame Grundlagen (Java_Fatclient_01) –
Klasse für das StartFrame eröffnen
erklärt
wurden.
Das
Erstellen von GUI-Elementen für die Eingabe wurde bereits im
Einführungs-Tutorial
Datenbank-Ladeprogramm
mit Graphischer Benutzeroberfläche (Java_Intro_02) –
Schritt 2: Benutzeroberfläche codieren
beschrieben.
Im
folgenden werden nur die Änderungen gegenüber bereits
einmal erklärten Algorithmen und neue Algorithmen ausführlich
erklärt.
Eine komplette Liste des in diesem Schritt erstellen
Codes finden Sie unter KompletterCode
am Ende dieses Schrittes
.
Von
Basisklasse erben
package
js_projassist.client;
/*
*
Package mit der Basisklasse für das TaskFrame. */import
js_base.frame.*;
/*
*/
public
class
JS_ProjAssist_Project
extends
JSBS_TaskFrame
{
/*
Variablen,
Methoden und GUI-Elemente die für alle Klassen, mit denen
Fenster für die Abwicklung von Geschäftsfällen
dargestellt werden, sind in der Basisklasse JSBS_TaskFrame
definiert.
Mit den obigen Anweisungen wird die Bibliothek, in der
diese Klasse enthalten ist, importiert und von dieser Klasse
'geerbt'.
'Constructor'
mit Start-Frame als Parameter
public
class
JS_ProjAssist_Project
extends
JSBS_TaskFrame
{
/*
* Constructor der Klasse.
* Code darin
wird aufgerufen wenn ein Objekt dieser Klasse erstellt wird.
* Als
Parameter wird das StartFrame (CommandCenter) übernommen;
* das
StartFrame enthält alle Einstellungen, die für die gesamte
Anwendung gelten
* und die Verbindung zu Datenbank oder
Java-Application-Server (JAS). */
public
JS_ProjAssist_Project(JS_ProjAssist_CommandCenter
parmCC)
{
/*
* Aufruf des Constructors der Basisklasse
(JSBS_TaskFrame).
* Darin werden die Klasse des
StartFrames und eventuell Werte einzelner Variablen
* in
lokale Variablen übertragen. */
super
(parmCC);
/*
* Aufrufen
der Methoden mit den individuellen Initialisierungen für diese
Klasse.
*/
initialize_before_frame();
initialize_frame();
initialize_after_frame();
}/*
* Methode
mit den Initialisierungen die notwendig sind bevor das Frame
(Window)
* angezeigt wird. */
private
void
initialize_before_frame()
{
Der
'Constructor' ist eine spezielle Methode, die aufgerufen wird wenn
ein Objekt dieser Klasse erstellt (konstruiert) wird.
An diese
Methode wird das Start-Frame (CommandCenter) als Parameter
übergeben.
Durch den Aufruf des 'Constructor's der geerbten
Klasse (super
(parmCC)
)
werden Werte aus dem Start-Frame (vor allem für die Verbindung
uir Datenbank oder dem Java-Application-Server / JAS) übernommen.
Nach
dem Ausführen des 'Constructor's der geerbten Klasse werden
Methoden aufgerufen, in die später Code eingefügt wird, der
vor dem Anzeigen des Fensters, zum Anzeigen des Fensters und nach dem
Anzeigen des Fensters ausgeführt wird.
Methoden
die vor, nach und zum Anzeigen des Fensters ausgeführt werden
initialize_frame();
initialize_after_frame();
}/*
* Methode
mit den Initialisierungen die notwendig sind bevor das Frame
(Window)
* angezeigt wird. */
private
void
initialize_before_frame()
{
}/*
* Methode
mit der das Frame (Window) angezeigt wird. */
private
void
initialize_frame()
{
/* Frame
(Window) sichtbar machen (anzeigen).
*/
setVisible(true
);
/* Anfangsgröße
festlegen. */
setSize(800,
600);/* Grund-Panel
mit den weiteren GUI-Elementen anzeigen.
* Die
GUI-Elemente und deren Anordnung sind in der geerbten Klasse
* (JSBS_StartFrame) festgelegt.
*/
setContentPane(get_pnl_Main());
}/*
* Methode
mit den Initialisierungen die notwendig sind nachdem das Frame
(Window)
* angezeigt wird. */
private
void
initialize_after_frame()
{
}}
Zum
jetzigen Zeitpunkt werden vor und nach dem Anzeigen des Fensters
keine Verarbeitungen ausgeführt.
In
der Methode
private
void
initialize_frame()
ist
der Code enthalten, der das 'Frame' (Fenster) sichtbar macht.
Zum
jetzigen Zeitpunkt sind noch keine zusätzlichen GUI-Elemente
definiert; das Layout des Fensters (Anordnung der GUI-Elemente) wird
von der geerbten Klasse (JSBS_TaskFrame)
übernommen.
Durch die Anweisung
setContentPane(get_pnl_Main())
wird
der 'Startpunkt der Hierarchie' (
pnl_Main
)
der GUI-Elemente definiert.
Möglicher
Zwischentest
Ab
jetzt ist es möglich, ein (bescheidenes) Zwischenergebnis zu
sehen.
Dazu ist es notwendig, die unter Zusätzlicher
Code in der Klasse
JS_ProjAssist_CommandCenter__ActionHandler
beschriebenen
Erweiterungen jetzt auszuführen.
|
Spezielle
GUI-Elemente für die Geschäftsanwendung entwerfen
Zum
Platzieren der GUI-Elemente steht ein Entwurfsblatt
als pdf-Datei zur Verfügung.
Sollten Sie pdf-Dateien
nicht anzeigen können, ist dieses Entwurfblatt auch im Dokument
Poster
für das GUI-Layout der Basisklasse JSBS_TaskFrame
enthalten.
|
Variablen
für die GUI-Elemente definieren
Wie
GUI-Elemente innerhalb eine Java-Programms definiert werden, wurde
bereits unter
Tutorial:
Datenbank-Ladeprogramm mit Graphischer Benutzeroberfläche
(Java_Intro_02) – GUI codieren
>
Code
für die Anzeige der GUI
ausführlich
beschrieben.
public
class
JS_ProjAssist_Project
extends
JSBS_TaskFrame
{
/*
* GUI-Elemente die für diesen Task-Frame
spezifisch sind. */
protected
JLabel
lbl_ProjectCode
;
protected
JTextField
txt_ProjectCode
;
protected
JLabel
lbl_LanguageCode
;
protected
JTextField
txt_LanguageCode
;
protected
JLabel
lbl_TargetDirectoryName
;
protected
JTextField
txt_TargetDirectoryName
;
protected
JButton
btn_TargetDirectorySelection
;
/*
* Constructor der Klasse.
* Code darin
wird aufgerufen wenn ein Objekt dieser Klasse erstellt wird.
Die
GUI-Elemente für die Geschäftsabwicklung werden definiert
und über eigene Methoden 'konstruiert'.
private
void
initialize_after_frame()
{
}/*
* ******************************
* Methoden
zum 'Construct' (Initialisierung) der einzelnen GUI-Elemente.
* */
protected
JLabel
get_lbl_ProjectCode() {
/* Zuerst
Prüfen, ob die Variable bereits 'constructed' (initialisiert)
ist. */
if
(
lbl_ProjectCode
==
null
)
{
/* Variable
noch nicht 'constructed'; Code für die Initialisierung folgt.
*/
try
{
lbl_ProjectCode
=
new
JLabel();
lbl_ProjectCode
.setName(
"lbl_ProjectCode"
);
lbl_ProjectCode
.setHorizontalAlignment(SwingConstants.
TRAILING
);
}
catch
(Throwable
Exc) {
/* Fehler
beim 'construct' ist sehr unwahrscheinlich und kann nur beim
'Starten'
* des Tasks auftreten.
* Deswegen
werden Fehlermeldungen nur auf der Konsole ausgegeben.
*/
System.out
.println(
"Error
while building lbl_ProjectCode in class
JS_ProjAssist_Project"
);
Exc.printStackTrace();
}
}
return
lbl_ProjectCode;
}/* */
protected
JTextField
get_txt_ProjectCode() {
/* Zuerst
Prüfen, ob die Variable bereits 'constructed' (initialisiert)
ist. */
if
(
txt_ProjectCode
==
null
)
{
/* Variable
noch nicht 'constructed'; Code für die Initialisierung folgt.
*/
try
{
txt_ProjectCode
=
new
JTextField();
txt_ProjectCode
.setName(
"txt_ProjectCode"
);
}
catch
(Throwable
Exc) {
System.out
.println(
"Error
while building txt_ProjectCode in class
JS_ProjAssist_Project"
);
Exc.printStackTrace();
}
}
return
txt_ProjectCode;
}/* */
protected
JLabel
get_lbl_LanguageCode() {
/* Zuerst
Prüfen, ob die Variable bereits 'constructed' (initialisiert)
ist. */
.
. . . . . . .
. . . . . . . .
Da
sich die Algorithmen für das 'konstruieren' der GUI-Elemente
ähnlich sind, wurde hier nicht der komplette Code
widergegeben.
Die Liste des gesamten Codes für die Klasse
finden Sie in diesem Dokument unter Klasse
JS_ProjAssist_Project
.
Überschreiben
der Methode
get_pnl_DetailFields
Für
das 'Anordnen' der GUI-Elemente für diese
Geschäftsfallabwicklung wird die Eigenschaft von Java
ausgenutzt, daß Methoden einer geerbten Klasse in der erbenden
Klasse 'überschrieben' werden können.
'Überschreiben'
bedeutet für diese Anwendung, daß beim Aufruf der Methode
(get_pnl_DetailFields
in
diesem Beispiel) in der geerbten Klasse (in diesem Beispiel:
aufgerufen in der Methode
get_pnl_Detail
in
der Klasse
JSBS_TaskFrame
)
der Code in der erbenden Klasse (
JS_ProjAssist_Project
in
diesem Beispiel) ausgeführt wird - und nicht der Code in der
geerbten Klasse (
JSBS_TaskFrame
).
/*
* ******************************
* Methode
zum 'Construct' (Initialisierung) des Panels mit den GUI-Elementen
für
* die Abwicklung des Geschäftsfalles.
* Diese
Methode überschreibt das 'Construct' des JPanel (mit gleichem
Namen) in der
* geerbten Methode aus der Klasse
JSBS_TaskFrame.
* */
protected
JPanel
get_pnl_DetailFields() {
/* Zuerst
Prüfen, ob die Variable bereits 'constructed' (initialisiert)
ist. */
if
(
pnl_DetailFields
==
null
)
{
/* Variable
noch nicht 'constructed'; Code für die Initialisierung folgt.
*/
try
{
pnl_DetailFields
=
new
JPanel();
pnl_DetailFields
.setName(
"pnl_DetailFields"
);
/*
* Mit
der folgenden Anweisung wird die Eigenschaft 'GridBagLayout
festgelegt
* 'GridBagLayout' unterteilt das JPanel in
'dehnbare' Felder; damit 'wachsen' oder
* 'schrumpfen'
darin platzierte GUI-Elemente abhängig von der Größe
des JPanel. */
pnl_DetailFields
.setLayout(
new
GridBagLayout());
/*
* Die
folgenden Anweisungen platzieren GUI-Elemente in den 'Feldern' des
JPanel. */
/* Zuerst wird eine Variable für die
Platzierungs-Eigenschaften erstellt. */
GridBagConstraints
gbc_lbl_ProjectCode = new
GridBagConstraints();
/* Definition
der Platzierungs-Eigenschaften.
*/
gbc_lbl_ProjectCode.gridx
=
0;
gbc_lbl_ProjectCode.
gridy
=
0;
gbc_lbl_ProjectCode.
fill
=
GridBagConstraints.
HORIZONTAL
;
gbc_lbl_ProjectCode.
weightx
=
1;
gbc_lbl_ProjectCode.
anchor
=
GridBagConstraints.
LINE_END
;
gbc_lbl_ProjectCode.
insets
=
new
Insets(3,
3, 3, 3);
/* Platzieren
des GUI-Elements auf dem JPanel.
*/
get_pnl_DetailFields().add(get_lbl_ProjectCode(),
gbc_lbl_ProjectCode);/*
* Platzieren
des nächsten GUI-Elements. */
GridBagConstraints
gbc_txt_ProjectCode = new
GridBagConstraints();
/* Definition
der Platzierungs-Eigenschaften.
*/
gbc_txt_ProjectCode.gridx
=
0;
gbc_txt_ProjectCode.
gridy
=
1;
gbc_txt_ProjectCode.
fill
=
GridBagConstraints.
HORIZONTAL
;
gbc_txt_ProjectCode.
weightx
=
1;
gbc_txt_ProjectCode.
anchor
=
GridBagConstraints.
LINE_START
;
gbc_txt_ProjectCode.
insets
=
new
Insets(3,
3, 3, 3);
/* Platzieren
des GUI-Elements auf dem JPanel.
*/
get_pnl_DetailFields().add(get_txt_ProjectCode(),
gbc_txt_ProjectCode);
. . . . . . . .
. . . . . . .
.
}
catch
(Throwable
Exc) {
/* Fehler
beim 'construct' ist sehr unwahrscheinlich und kann nur beim
'Starten'
* des Tasks auftreten.
* Deswegen
werden Fehlermeldungen nur auf der Konsole ausgegeben.
*/
System.out
.println(
"Error
while building lbl_ProjectCode in class
JS_ProjAssist_Project"
);
Exc.printStackTrace();
}
}
return
pnl_DetailFields;
}
Da
sich die Algorithmen für das hinzufügen von GUI-Elementen
zu einem Panel ähnlich sind, wurde hier nicht der komplette Code
widergegeben.
Die Liste des gesamten Codes für die Klasse
finden Sie in diesem Dokument unter Klasse
JS_ProjAssist_Project
.
Methode
zum Zuordnen der sprachabhängigen Texte zu den GUI-Elementen
aufrufen
/*
* Methode
mit den Initialisierungen die notwendig sind nachdem das Frame
(Window)
* angezeigt wird. */
private
void
initialize_after_frame()
{
/* Methode
zum Zuordnen des sprachabhängigen Textes zu den GUI-Elementen
aufrufen.
*/
JSBS_GUIServices.processLanguageDependantElements(this
);
}
Mit
diesem einfachen Aufruf werden die sprachabhängig definierten
Texte aus der Datei 'DisplayStrings.xml' den jeweiligen GUI-Elementen
zugeordnet.
Die XML-Struktur aus der Datei wurde bereits beim
Starten des CommandCenters (Start-Frame) eingelesen; eine
Detailbeschreibung finden Sie unter Tutorial:
JavaScout ProjectAssist, Start-Frame Grundlagen (Java_FatClient_01) –
Text für die GUI-Elemente von XML-Datei einlesen
>
XML-Struktur
für sprachabhängige Texte konstruieren
.
Der
Code dazu ist in den Basisklassen des JavaScout Fat-Client-Frameworks
(JS-FCF) enthalten.
Datei
mit der XML-Struktur mit den sprachabhängigen Texten erweitern
In
den folgenden Vorlagen sind nur die neuen Teile der Datei
'DisplayStrings.xml' dokumentiert.
Bitte
fügen Sie die Texte in die Datei ein und achten Sie darauf, daß
Sie nicht bestehenden Text versehentlich löschen !
Der
Bereich
<CommonElements>
wird
um jene GUI-Elemente ergänzt, die häufig verwendet werden.
<root>
.
. . . .
.
. . . .
<CommonElements>
<CommonElement>
<ElementName>
btn_Continue
</ElementName>
.
. . . .
.
. . . .
<CommonElement>
<ElementName>
btn_CC
</ElementName>
<ElementText>
CommandCenter
</ElementText>
<ToolTipText>
Fenster
für das CommandCenter aufrufen
</ToolTipText>
</CommonElement>
<CommonElement>
<ElementName>
btn_Print
</ElementName>
<ElementText>
Drucken
</ElementText>
<ToolTipText>
Druckmöglichkeiten
anzeigen
</ToolTipText>
</CommonElement>
<CommonElement>
<ElementName>
btn_Store
</ElementName>
<ElementText>
Speichern
</ElementText>
<ToolTipText>
Speichern
der Daten
</ToolTipText>
</CommonElement>
<CommonElement>
<ElementName>
btn_Copy
</ElementName>
<ElementText>
Kopieren
</ElementText>
<ToolTipText>
Kopieren
der Daten auf einen neuen Datensatz
</ToolTipText>
</CommonElement>
<CommonElement>
<ElementName>
btn_Previous
</ElementName>
<ElementText>
Vorige
</ElementText>
<ToolTipText>
Vorigen
Datensatz anzeigen
</ToolTipText>
</CommonElement>
<CommonElement>
<ElementName>
btn_Next
</ElementName>
<ElementText>
Nächste
</ElementText>
<ToolTipText>
Nächsten
Datensatz anzeigen
</ToolTipText>
</CommonElement>
<CommonElement>
<ElementName>
btn_Get
</ElementName>
<ElementText>
Bearbeiten
</ElementText>
<ToolTipText>
Übertragen
der ausgewählten Daten zum Bearbeiten
</ToolTipText>
</CommonElement>
<CommonElement>
<ElementName>
btn_Delete
</ElementName>
<ElementText>
Löschen
</ElementText>
<ToolTipText>
Ausgewählten
Datensatz löschen
</ToolTipText>
</CommonElement>
<CommonElement>
<ElementName>
lbl_ApplicationTitle1
</ElementName>
.
. . . .
. . . . .
<CommonElement>
<ElementName>
lbl_LanguageCode
</ElementName>
<ElementText>
ISO-Sprach-Code:
</ElementText>
<ToolTipText>
Code
der Sprache für die die Daten gelten
</ToolTipText>
</CommonElement>
<CommonElement>
<ElementName>
lbl_ProjectCode
</ElementName>
<ElementText>
Projekt-Code:
</ElementText>
<ToolTipText>
Code
des Projektes für das die Daten gelten
</ToolTipText>
</CommonElement>
<CommonElement>
<ElementName>
txt_LanguageCode
</ElementName>
<ToolTipText>
Code
der Sprache für die die Daten gelten
</ToolTipText>
</CommonElement>
<CommonElement>
<ElementName>
txt_ProjectCode
</ElementName>
<ToolTipText>
Code
des Projektes für das die Daten gelten
</ToolTipText>
</CommonElement>
<CommonElement>
<ElementName>
lbl_Selection
</ElementName>
<ElementText>
Auswahl:
</ElementText>
<ToolTipText>
Zum
Bearbeiten die Nummer des Datensatzes in diesem Feld eintragen und
[Weiter] anklicken
</ToolTipText>
</CommonElement>
<CommonElement>
<ElementName>
txt_Selection
</ElementName>
<ToolTipText>
Zum
Bearbeiten die Nummer des Datensatzes in diesem Feld eintragen und
[Weiter] anklicken
</ToolTipText>
</CommonElement>
<CommonElement>
<ElementName>
lbl_SelectionListHeader
</ElementName>
<ElementText>
Gefundene
Datensätze:
</ElementText>
<ToolTipText>
Zum
Bearbeiten die Nummer des Datensatzes im Feld 'Auswahl' eintragen und
[Weiter] anklicken
</ToolTipText>
</CommonElement>
</CommonElements>
<FrameIndividual>
<Frame>
.
. . . .
. . . . . </root>
Der
Bereich
<FrameIndividual>
enthält
alle GUI-Elemente des Frames für den Geschäftsfall.
<root>
.
. . . .
.
. . . .
</CommonElement>
</CommonElements>
<FrameIndividual>
<Frame>
<FrameClass>
js_projassist.client.JS_ProjAssist_CommandCenter
</FrameClass>
<FrameTitle>
CommandCenter
– ProjectAssist für das JavaScout Fat-Client-Framework / ©
2008 www.javascout.biz
</FrameTitle>
<Element>
<ElementName>
btn_Help
</ElementName>
.
. . . .
.
. . . .
</Element>
</Frame>
<Frame>
<FrameClass>
js_projassist.client.JS_ProjAssist_Project
</FrameClass>
<FrameTitle>
Projekt-
und Sprache-Verwaltung – ProjectAssist für das JavaScout
Fat-Client-Framework / © 2008 www.javascout.biz
</FrameTitle>
<Element>
<ElementName>
btn_Help
</ElementName>
<CommonElementReference>
btn_Help
</CommonElementReference>
</Element>
<Element>
<ElementName>
btn_CC
</ElementName>
<CommonElementReference>
btn_CC
</CommonElementReference>
</Element>
<Element>
<ElementName>
btn_Print
</ElementName>
<CommonElementReference>
btn_Print
</CommonElementReference>
</Element>
<Element>
<ElementName>
btn_Store
</ElementName>
<CommonElementReference>
btn_Store
</CommonElementReference>
</Element>
<Element>
<ElementName>
btn_Copy
</ElementName>
<CommonElementReference>
btn_Copy
</CommonElementReference>
</Element>
<Element>
<ElementName>
btn_Previous
</ElementName>
<CommonElementReference>
btn_Previous
</CommonElementReference>
</Element>
<Element>
<ElementName>
btn_Next
</ElementName>
<CommonElementReference>
btn_Next
</CommonElementReference>
</Element>
<Element>
<ElementName>
btn_Get
</ElementName>
<CommonElementReference>
btn_Get
</CommonElementReference>
</Element>
<Element>
<ElementName>
btn_Delete
</ElementName>
<CommonElementReference>
btn_Delete
</CommonElementReference>
</Element>
<Element>
<ElementName>
btn_TargetDirectorySelection
</ElementName>
<ElementText>
Datei-Auswahl
</ElementText>
<ToolTipText>
Klicken
für die Auswahl des Unterverzeichnisses
</ToolTipText>
</Element>
<Element>
<ElementName>
lbl_ApplicationTitle1
</ElementName>
<CommonElementReference>
lbl_ApplicationTitle1
</CommonElementReference>
<FontSize>
14
</FontSize>
<FontStyle>
2
</FontStyle>
</Element>
<Element>
<ElementName>
lbl_ApplicationTitle2
</ElementName>
<ElementText>
Projekt-
und Sprachen-Definition
</ElementText>
<FontStyle>
2
</FontStyle>
</Element>
<Element>
<ElementName>
lbl_ProjectCode
</ElementName>
<CommonElementReference>
lbl_ProjectCode
</CommonElementReference>
</Element>
<Element>
<ElementName>
txt_ProjectCode
</ElementName>
<CommonElementReference>
txt_ProjectCode
</CommonElementReference>
</Element>
<Element>
<ElementName>
lbl_LanguageCode
</ElementName>
<CommonElementReference>
lbl_LanguageCode
</CommonElementReference>
</Element>
<Element>
<ElementName>
txt_LanguageCode
</ElementName>
<CommonElementReference>
txt_LanguageCode
</CommonElementReference>
</Element>
<Element>
<ElementName>
lbl_TargetDirectoryName
</ElementName>
<ElementText>
Stamm-Unterverzeichnis
für generierte Daten:
</ElementText>
<ToolTipText>
Verzeichnis,
in dem weitere Verzeichnisse mit generierten Daten erstellt
werden
</ToolTipText>
</Element>
<Element>
<ElementName>
txt_TargetDirectoryName
</ElementName>
<ToolTipText>
Verzeichnis,
in dem weitere Verzeichnisse mit generierten Daten erstellt
werden
</ToolTipText>
</Element>
<Element>
<ElementName>
lbl_SelectionListHeader
</ElementName>
<CommonElementReference>
lbl_SelectionListHeader
</CommonElementReference>
</Element>
<Element>
<ElementName>
lbl_Selection
</ElementName>
<CommonElementReference>
lbl_Selection
</CommonElementReference>
</Element>
<Element>
<ElementName>
txt_Selection
</ElementName>
<CommonElementReference>
txt_Selection
</CommonElementReference>
</Element>
</Frame>
</FrameIndividual>
</root>
Für
das einfache Verwalten von sprachabhängigen Texten und das
Generieren der Datei mit der XML-Struktur wird die Verwendung
JavaScout ProjectAssist
empfohlen.
Zusätzlicher
Code in der Klasse
JS_ProjAssist_CommandCenter__ActionHandler
Damit
das Frame aufgerufen werden kann ist in der Klasse
JS_ProjAssist_CommandCenter__ActionHandler
der
folgende Code zusätzlich notwendig:
openBusinessTask(parmCC);
}
}
/*
* Methode
zum Auslesen des gewählten Codes und Aufrufen der
Geschäftsanenwendung. */
public
static void
openBusinessTask(JS_ProjAssist_CommandCenter
parmCC) {
/*
* Methode
der Basisklassen verwenden um den Internen Code der gewählten
Anwendung
* zu ermitteln. */
String
strInternalCode =
parmCC.structJSBS_XML_Tasks
.processParameterFields(
parmCC.get_txt_Code(),
parmCC.get_lbl_Parameter1(),
parmCC.get_txt_Parameter1(),
parmCC.get_lbl_Parameter2(),
parmCC.get_txt_Parameter2(),
parmCC.get_lbl_Parameter3(),
parmCC.get_txt_Parameter3());/*
* Abfragen
welcher interner Code gewählt wurde und aufrufen des
entsprechenden
* Task-Frames. */
if
(strInternalCode.equals(
"P"
))
{
/*
* Ein
Objekt der entsprechenden Klasse 'konstruieren'
* und
die notwendigen Parameter mitgeben. */
JS_ProjAssist_Project
frm_JS_ProjAssist_Project
=
new
JS_ProjAssist_Project(parmCC);
frm_JS_ProjAssist_Project.setVisible(true
);
}
}
}
Im
Tutorial-Schritt
JavaScout
ProjectAssist, Start-Frame Grundlagen (Java_Fatclient_01) –
weitere XML-Strukturen einlesen > Datei mit XML-Struktur für
wählbare Geschäftsanwendungen (Tasks) erstellen
wurde
bereits der 'Auswählbare' Code, der 'Interne' Code und andere
Werte (z.B. die Kurz-Beschreibung) in der Datei 'Tasks.xml' erfasst.
Die
Einstellungen und die Angabe der zu verwendenden Sprache als
Parameter wurden schon im Schritt 2 ausgeführt und bleiben als
Einstellung für das 'Project' erhalten.
Die Abfolge zum
Starten wurde bereits in den beiden vorigen Schritten mit Abbildungen
dokumentiert; deswegen folgen nur Stichworte:
Zum
Starten wird
Run
> Open Run Dialog
ausgewählt.
Im
anschließend erscheinenden Fenster (Run) werden die
Einstellungen nicht verändert und durch Anklicken der
Schaltfläche
[ Run ]
das
Programm gestartet.
|
|
|
|
|
|
Gesamter
Code am Ende des Schrittes
package
js_projassist.client;
/*
*
Packages mit den GUI-Elementen. */import
java.awt.*;
import
javax.swing.*;
/*
*
Package mit der Basisklasse für das TaskFrame. */import
js_base.frame.*;
/*
*/
public
class
JS_ProjAssist_Project
extends
JSBS_TaskFrame
{
/*
* GUI-Elemente die für diesen Task-Frame
spezifisch sind. */
protected
JLabel
lbl_ProjectCode
;
protected
JTextField
txt_ProjectCode
;
protected
JLabel
lbl_LanguageCode
;
protected
JTextField
txt_LanguageCode
;
protected
JLabel
lbl_TargetDirectoryName
;
protected
JTextField
txt_TargetDirectoryName
;
protected
JButton
btn_TargetDirectorySelection
;
/*
* Constructor der Klasse.
* Code darin
wird aufgerufen wenn ein Objekt dieser Klasse erstellt wird.
* Als
Parameter wird das StartFrame (CommandCenter) übernommen;
* das
StartFrame enthält alle Einstellungen, die für die gesamte
Anwendung gelten
* und die Verbindung zu Datenbank
oder Java-Application-Server (JAS). */
public
JS_ProjAssist_Project(JS_ProjAssist_CommandCenter
parmCC)
{
/*
* Aufruf des Constructors der Basisklasse
(JSBS_TaskFrame).
* Darin werden die Klasse des
StartFrames und eventuell Werte einzelner Variablen
* in
lokale Variablen übertragen. */
super
(parmCC);
/*
* Aufrufen
der Methoden mit den individuellen Initialisierungen für diese
Klasse.
*/
initialize_before_frame();
initialize_frame();
initialize_after_frame();
}/*
* Methode
mit den Initialisierungen die notwendig sind bevor das Frame
(Window)
* angezeigt wird. */
private
void
initialize_before_frame()
{
}/*
* Methode
mit der das Frame (Window) angezeigt wird. */
private
void
initialize_frame()
{
/* Frame
(Window) sichtbar machen (anzeigen).
*/
setVisible(true
);
/* Anfangsgröße
festlegen. */
setSize(800,
600);/* Grund-Panel
mit den weiteren GUI-Elementen anzeigen.
* Die
GUI-Elemente und deren Anordnung sind in der geerbten Klasse
* (JSBS_StartFrame) festgelegt.
*/
setContentPane(get_pnl_Main());
}/*
* Methode
mit den Initialisierungen die notwendig sind nachdem das Frame
(Window)
* angezeigt wird. */
private
void
initialize_after_frame()
{
/* Methode
zum Zuordnen des sprachabhängigen Textes zu den GUI-Elementen
aufrufen.
*/
JSBS_GUIServices.processLanguageDependantElements(this
);
}/*
* ******************************
* Methoden
zum 'Construct' (Initialisierung) der einzelnen GUI-Elemente.
* */
protected
JLabel
get_lbl_ProjectCode() {
/* Zuerst
Prüfen, ob die Variable bereits 'constructed' (initialisiert)
ist. */
if
(
lbl_ProjectCode
==
null
)
{
/* Variable
noch nicht 'constructed'; Code für die Initialisierung folgt.
*/
try
{
lbl_ProjectCode
=
new
JLabel();
lbl_ProjectCode
.setName(
"lbl_ProjectCode"
);
lbl_ProjectCode
.setHorizontalAlignment(SwingConstants.
TRAILING
);
}
catch
(Throwable
Exc) {
/* Fehler
beim 'construct' ist sehr unwahrscheinlich und kann nur beim
'Starten'
* des Tasks auftreten.
* Deswegen
werden Fehlermeldungen nur auf der Konsole ausgegeben.
*/
System.out
.println(
"Error
while building lbl_ProjectCode in class
JS_ProjAssist_Project"
);
Exc.printStackTrace();
}
}
return
lbl_ProjectCode;
}/* */
protected
JTextField
get_txt_ProjectCode() {
/* Zuerst
Prüfen, ob die Variable bereits 'constructed' (initialisiert)
ist. */
if
(
txt_ProjectCode
==
null
)
{
/* Variable
noch nicht 'constructed'; Code für die Initialisierung folgt.
*/
try
{
txt_ProjectCode
=
new
JTextField();
txt_ProjectCode
.setName(
"txt_ProjectCode"
);
}
catch
(Throwable
Exc) {
System.out
.println(
"Error
while building txt_ProjectCode in class
JS_ProjAssist_Project"
);
Exc.printStackTrace();
}
}
return
txt_ProjectCode;
}/* */
protected
JLabel
get_lbl_LanguageCode() {
/* Zuerst
Prüfen, ob die Variable bereits 'constructed' (initialisiert)
ist. */
if
(
lbl_LanguageCode
==
null
)
{
/* Variable
noch nicht 'constructed'; Code für die Initialisierung folgt.
*/
try
{
lbl_LanguageCode
=
new
JLabel();
lbl_LanguageCode
.setName(
"lbl_LanguageCode"
);
lbl_LanguageCode
.setHorizontalAlignment(SwingConstants.
TRAILING
);
}
catch
(Throwable
Exc) {
/* Fehler
beim 'construct' ist sehr unwahrscheinlich und kann nur beim
'Starten'
* des Tasks auftreten.
* Deswegen
werden Fehlermeldungen nur auf der Konsole ausgegeben.
*/
System.out
.println(
"Error
while building lbl_LanguageCode in class
JS_ProjAssist_Project"
);
Exc.printStackTrace();
}
}
return
lbl_LanguageCode;
}/* */
protected
JTextField
get_txt_LanguageCode() {
/* Zuerst
Prüfen, ob die Variable bereits 'constructed' (initialisiert)
ist. */
if
(
txt_LanguageCode
==
null
)
{
/* Variable
noch nicht 'constructed'; Code für die Initialisierung folgt.
*/
try
{
txt_LanguageCode
=
new
JTextField();
txt_LanguageCode
.setName(
"txt_LanguageCode"
);
}
catch
(Throwable
Exc) {
System.out
.println(
"Error
while building txt_LanguageCode in class
JS_ProjAssist_Project"
);
Exc.printStackTrace();
}
}
return
txt_LanguageCode;
}/* */
protected
JLabel
get_lbl_TargetDirectoryName() {
/* Zuerst
Prüfen, ob die Variable bereits 'constructed' (initialisiert)
ist. */
if
(
lbl_TargetDirectoryName
==
null
)
{
/* Variable
noch nicht 'constructed'; Code für die Initialisierung folgt.
*/
try
{
lbl_TargetDirectoryName
=
new
JLabel();
lbl_TargetDirectoryName
.setName(
"lbl_TargetDirectoryName"
);
lbl_TargetDirectoryName
.setHorizontalAlignment(SwingConstants.
LEADING
);
}
catch
(Throwable
Exc) {
/* Fehler
beim 'construct' ist sehr unwahrscheinlich und kann nur beim
'Starten'
* des Tasks auftreten.
* Deswegen
werden Fehlermeldungen nur auf der Konsole ausgegeben.
*/
System.out
.println(
"Error
while building lbl_TargetDirectoryName in class
JS_ProjAssist_Project"
);
Exc.printStackTrace();
}
}
return
lbl_TargetDirectoryName;
}/* */
protected
JTextField
get_txt_TargetDirectoryName() {
/* Zuerst
Prüfen, ob die Variable bereits 'constructed' (initialisiert)
ist. */
if
(
txt_TargetDirectoryName
==
null
)
{
/* Variable
noch nicht 'constructed'; Code für die Initialisierung folgt.
*/
try
{
txt_TargetDirectoryName
=
new
JTextField();
txt_TargetDirectoryName
.setName(
"txt_TargetDirectoryName"
);
/* Direkte
Eingabe nicht erlauben; nur über Auswahl aus der
Verzeichnis-Struktur.
*/
txt_TargetDirectoryName
.setEnabled(
false
);
}
catch
(Throwable
Exc) {
System.out
.println(
"Error
while building txt_TargetDirectoryName in class
JS_ProjAssist_Project"
);
Exc.printStackTrace();
}
}
return
txt_TargetDirectoryName;
}/* */
protected
JButton
get_btn_TargetDirectorySelection() {
/* Zuerst
Prüfen, ob die Variable bereits 'constructed' (initialisiert)
ist. */
if
(
btn_TargetDirectorySelection
==
null
)
{
/* Variable
noch nicht 'constructed'; Code für die Initialisierung folgt.
*/
try
{
btn_TargetDirectorySelection
=
new
JButton();
btn_TargetDirectorySelection
.setName(
"btn_TargetDirectorySelection"
);
/*
* Durch
den 'ActionListener' wird beim Anklicken der Schaltfläche mit
der Maustaste
* die Methode 'actionPerformed'
aufgerufen.
*/
btn_TargetDirectorySelection
.addActionListener(
this
);
/*
* Über
den 'ActionCommand' kann in the Methode 'actionPerformed' abgefragt
werden,
* welche Schaltfläche angeklickt wurde.
*/
btn_TargetDirectorySelection
.setActionCommand(
"btn_TargetDirectorySelection"
);
}
catch
(Throwable
Exc) {
System.out
.println(
"Error
while building btn_TargetDirectorySelection in class
JS_ProjAssist_Project"
);
Exc.printStackTrace();
}
}
return
btn_TargetDirectorySelection;
}/*
* ******************************
* Methode
zum 'Construct' (Initialisierung) des Panels mit den GUI-Elementen
für
* die Abwicklung des
Geschäftsfalles.
* Diese Methode überschreibt
das 'Construct' des JPanel (mit gleichem Namen) in der
* geerbten
Methode aus der Klasse JSBS_TaskFrame.
* */
protected
JPanel
get_pnl_DetailFields() {
/* Zuerst
Prüfen, ob die Variable bereits 'constructed' (initialisiert)
ist. */
if
(
pnl_DetailFields
==
null
)
{
/* Variable
noch nicht 'constructed'; Code für die Initialisierung folgt.
*/
try
{
pnl_DetailFields
=
new
JPanel();
pnl_DetailFields
.setName(
"pnl_DetailFields"
);
/*
* Mit
der folgenden Anweisung wird die Eigenschaft 'GridBagLayout
festgelegt
* 'GridBagLayout' unterteilt das JPanel in
'dehnbare' Felder; damit 'wachsen' oder
* 'schrumpfen'
darin platzierte GUI-Elemente abhängig von der Größe
des JPanel. */
pnl_DetailFields
.setLayout(
new
GridBagLayout());
/*
* Die
folgenden Anweisungen platzieren GUI-Elemente in den 'Feldern' des
JPanel. */
/* Zuerst wird eine Variable für die
Platzierungs-Eigenschaften erstellt. */
GridBagConstraints
gbc_lbl_ProjectCode = new
GridBagConstraints();
/* Definition
der Platzierungs-Eigenschaften.
*/
gbc_lbl_ProjectCode.gridx
=
0;
gbc_lbl_ProjectCode.
gridy
=
0;
gbc_lbl_ProjectCode.
fill
=
GridBagConstraints.
HORIZONTAL
;
gbc_lbl_ProjectCode.
weightx
=
1;
gbc_lbl_ProjectCode.
anchor
=
GridBagConstraints.
LINE_END
;
gbc_lbl_ProjectCode.
insets
=
new
Insets(3,
3, 3, 3);
/* Platzieren
des GUI-Elements auf dem JPanel.
*/
get_pnl_DetailFields().add(get_lbl_ProjectCode(),
gbc_lbl_ProjectCode);/*
* Platzieren
des nächsten GUI-Elements. */
GridBagConstraints
gbc_txt_ProjectCode = new
GridBagConstraints();
/* Definition
der Platzierungs-Eigenschaften.
*/
gbc_txt_ProjectCode.gridx
=
1;
gbc_txt_ProjectCode.
gridy
=
0;
gbc_txt_ProjectCode.
fill
=
GridBagConstraints.
HORIZONTAL
;
gbc_txt_ProjectCode.
weightx
=
1;
gbc_txt_ProjectCode.
anchor
=
GridBagConstraints.
LINE_START
;
gbc_txt_ProjectCode.
insets
=
new
Insets(3,
3, 3, 3);
/* Platzieren
des GUI-Elements auf dem JPanel.
*/
get_pnl_DetailFields().add(get_txt_ProjectCode(),
gbc_txt_ProjectCode);/*
* Platzieren
des nächsten GUI-Elements. */
GridBagConstraints
gbc_lbl_LanguageCode = new
GridBagConstraints();
/* Definition
der Platzierungs-Eigenschaften.
*/
gbc_lbl_LanguageCode.gridx
=
0;
gbc_lbl_LanguageCode.
gridy
=
1;
gbc_lbl_LanguageCode.
fill
=
GridBagConstraints.
HORIZONTAL
;
gbc_lbl_LanguageCode.
weightx
=
1;
gbc_lbl_LanguageCode.
anchor
=
GridBagConstraints.
LINE_END
;
gbc_lbl_LanguageCode.
insets
=
new
Insets(3,
3, 3, 3);
/* Platzieren
des GUI-Elements auf dem JPanel.
*/
get_pnl_DetailFields().add(get_lbl_LanguageCode(),
gbc_lbl_LanguageCode);/*
* Platzieren
des nächsten GUI-Elements. */
GridBagConstraints
gbc_txt_LanguageCode = new
GridBagConstraints();
/* Definition
der Platzierungs-Eigenschaften.
*/
gbc_txt_LanguageCode.gridx
=
1;
gbc_txt_LanguageCode.
gridy
=
1;
gbc_txt_LanguageCode.
fill
=
GridBagConstraints.
HORIZONTAL
;
gbc_txt_LanguageCode.
weightx
=
1;
gbc_txt_LanguageCode.
anchor
=
GridBagConstraints.
LINE_START
;
gbc_txt_LanguageCode.
insets
=
new
Insets(3,
3, 3, 3);
/* Platzieren
des GUI-Elements auf dem JPanel.
*/
get_pnl_DetailFields().add(get_txt_LanguageCode(),
gbc_txt_LanguageCode);/*
* Platzieren
des nächsten GUI-Elements. */
GridBagConstraints
gbc_lbl_TargetDirectoryName = new
GridBagConstraints();
/* Definition
der Platzierungs-Eigenschaften.
*/
gbc_lbl_TargetDirectoryName.gridx
=
0;
gbc_lbl_TargetDirectoryName.
gridy
=
2;
gbc_lbl_TargetDirectoryName.
fill
=
GridBagConstraints.
HORIZONTAL
;
gbc_lbl_TargetDirectoryName.
weightx
=
1;
gbc_lbl_TargetDirectoryName.
anchor
=
GridBagConstraints.
LINE_START
;
gbc_lbl_TargetDirectoryName.
insets
=
new
Insets(3,
3, 3, 3);
/* Platzieren
des GUI-Elements auf dem JPanel.
*/
get_pnl_DetailFields().add(get_lbl_TargetDirectoryName(),
gbc_lbl_TargetDirectoryName);/*
* Platzieren
des nächsten GUI-Elements. */
GridBagConstraints
gbc_txt_TargetDirectoryName = new
GridBagConstraints();
/* Definition
der Platzierungs-Eigenschaften.
*/
gbc_txt_TargetDirectoryName.gridx
=
0;
gbc_txt_TargetDirectoryName.
gridy
=
3;
gbc_txt_TargetDirectoryName.
fill
=
GridBagConstraints.
HORIZONTAL
;
gbc_txt_TargetDirectoryName.
weightx
=
1;
gbc_txt_TargetDirectoryName.
anchor
=
GridBagConstraints.
LINE_START
;
gbc_txt_TargetDirectoryName.
insets
=
new
Insets(3,
3, 3, 3);
/* Platzieren
des GUI-Elements auf dem JPanel.
*/
get_pnl_DetailFields().add(get_txt_TargetDirectoryName(),
gbc_txt_TargetDirectoryName);/*
* Platzieren
des nächsten GUI-Elements. */
GridBagConstraints
gbc_btn_TargetDirectorySelection = new
GridBagConstraints();
/* Definition
der Platzierungs-Eigenschaften.
*/
gbc_btn_TargetDirectorySelection.gridx
=
1;
gbc_btn_TargetDirectorySelection.
gridy
=
2;
gbc_btn_TargetDirectorySelection.
fill
=
GridBagConstraints.
BOTH
;
gbc_btn_TargetDirectorySelection.
weightx
=
1;
gbc_btn_TargetDirectorySelection.
gridheight
=
2;
gbc_btn_TargetDirectorySelection.
anchor
=
GridBagConstraints.
LINE_START
;
gbc_btn_TargetDirectorySelection.
insets
=
new
Insets(3,
3, 3, 3);
/* Platzieren
des GUI-Elements auf dem JPanel.
*/
get_pnl_DetailFields().add(get_btn_TargetDirectorySelection(),
gbc_btn_TargetDirectorySelection);
}
catch
(Throwable
Exc) {
/* Fehler
beim 'construct' ist sehr unwahrscheinlich und kann nur beim
'Starten'
* des Tasks auftreten.
* Deswegen
werden Fehlermeldungen nur auf der Konsole ausgegeben.
*/
System.out
.println(
"Error
while building pnl_DetailFields in class
JS_ProjAssist_Project"
);
Exc.printStackTrace();
}
}
return
pnl_DetailFields;
}}
Dokument |
Inhalt |
Im nächsten Schritt des Tutorials wird die unterste Ebene des Zugriffs auf Daten einer Datenbank entwickelt. Eine DBA-Klasse ist genau einer Datenbank-Tabelle zugeordnet. |