> Inhalt: JavaScout Base-System (JSBS)

JSBS_StartFrame – Basisklasse für das StartFrame (Command-Center)

* Bitte beachten Sie die Hinweise und Bestimmungen bezüglich Urheberrecht, Haftungsausschluß und geschützte Marken oder Warenzeichen die für dieses Web-Dokument und möglicherweise auch für 'verlinkte' Dokumente gelten.

  • Der Betreiber dieser Web-Site (www.javascout.biz) ist nicht verantwortlich für den Inhalt von Web-Sites, die innerhalb dieses Web-Dokumentes oder anderer Dokumente von www.javascout.biz verlinkt sind.

  • Wenn dieses Web-Dokument oder andere Dokumente dieser Web-Site (www.javascout.biz) Rechte von Ihnen verletzen, oder sie glauben, dass Rechte Anderer (Dritter Personen) dadurch verletzt werden, informieren Sie bitte den Betreiber dieser Web-Site.
    Eine E-Mail können Sie ganz einfach durch anklicken des Symbols oder Textes im Frame rechts oben senden.

Dieses Dokument drucken.

 Letzte Bearbeitung dieses  Dokuments:
2013-02-09

Inhaltsverzeichnis

Code 
Erklärungen und Anwendungsbeispiele 
Verwandte Dokumentation
 

Code

package js_base.frame;

import
java.awt.*;
import
java.awt.event.*;
import
java.net.*;
import
java.text.*;
import
java.util.*;

import
javax.swing.*;
import
javax.swing.event.*;
import
javax.swing.table.*;
import
javax.swing.text.JTextComponent;
import javax.swing.tree.TreePath;

import
js_base.bo.*;
import js_base.boc.*;
import
js_base.connections.JSBS_DB_ConnectionManager;
import
js_base.ejb.interfaces.remote.JSBS_StandardEJBBeanRemote;
import
js_base.structures.*;
import
js_base.utilities.JSBS_Formatter;
import
js_base.xml.*;

/**
 *
 * @author kurt(at)javascout[dot]biz
 * @date 2006-05-03
 *
 * @description
 * de:
 *  Klasse für ein JFrame das von Start-Frames (üblicherweise als 'Command-Center'
 *  bezeichnet) von Fat-Client-Anwendungsprogrammen (Heavyweight-Clients) importiert wird.
 *
 *  Diese Klasse enthält Variablen zum
 *  + definieren ob das Anwendungsprogramm direkt auf die Datenbank zugreift
 *    oder EJB auf einem Java-Application-Server (JAS) verwendet,
 *  + die Verbindung zur Datenbank bzw. dem JAS aufrecht erhalten,
 *  + XML-Baum-Struktur mit den Parametern für den Zugriff auf Datenbank oder JAS,
 *  + XML-Baum-Struktur mit Text-Elementen in der gewählten Sprache,
 *  + eine Daten-Struktur mit verschiedenen Parametern
 *    z.B. gewählte Sprache, angemeldeter Benutzer, TCP/IP-Adresse, usw.
 *
 * en:

 *  Class for a JFrame to be inherited by Start-Frames (usually called 'Command-Center')
 *  of Fat-Client-Applications (Heavyweight-Clients).
 *

 *  This class contains variables for
 *  + defining if the application has direct access to a dabase
 *    or is using EJB on a Java-Application-Server (JAS),
 *  + holding the connection to the database or JAS respectively,
 *  + XML-tree-structure for parameters to access the database or JAS,
 *  + XML-tree-structure with text-elements in the selected language,
 *  + a structure with various parameters
 *    e.g. selected language, logged on user, TCP/IP-address, etc.
 *
 * @change-log
 * when         who               why
 * --------------------------------------------------------
 *
 */

public class JSBS_StartFrame extends JFrame
                             
implements ActionListener, KeyListener, FocusListener,
                                        MouseListener, WindowListener, TableColumnModelListener,
                                        ItemListener {
/*
 * de:
 * Array mit den, für ein gesamtes Anwendungsprogramm implementierten, ISO-Sprach-Codes.

 * Die in dieser Basisklasse festgelegten Werte sind nur als Muster gedacht - es wird  

 * dringend empfohlen, diese Werte in der erbenden Klasse entsprechend den Anforderungen

 * des zu erstellenden Anwendungsprogramms zu überschreiben
.
 *

 * Dieses Array enthält die ISO-Codes der implementierten
Sprachen.
 * Diese Festlegung hat alleine keine weiteren Auswirkungen - kann aber innerhalb des

 *
Anwendungsprogramms geprüft werden.
 *

 * en:
 * Array with the ISO-language-codes that are implemented for the whole application program.
 *
The values defined within this base-class are intended to be just samples - it is highly
 * recommended to overwrite those values in the inheriting class according to requierements

 * of the application-program to be built.

 *

 * This array containes the ISO-code for
the implemented languages.
 * This definition on its own has no further implications - but it can be verified within

 * an application program
. */
    public String[] arrayApplicationImplementedLanguages {"de", "en""fr"};
/*
 * de:
 * KONSTANTE Werte für die Art des Zugriffs auf Daten.
 * StandAlone: Die Datenbank ist auf der gleichen Maschine wie das Anwendungsprogramm
 *             oder es wird über das TCP/IP-Netzwerk zugegriffen (sofern das durch das
 *             Datenbanksystem ermöglicht wird).
 * FatClient: Der Zugriff auf die Daten erfolgt über einen Java-Application-Server (JAS);
 *            mehrere Clients sind möglich.
 * MobileClient: Die Daten des JAS sind auf einen mobilen Client (Notebook) gespiegelt.
 *               Die Datenerfassung kann auf dem mobilen Client erfolgen (auch wenn keine
 *               Verbindung zum JAS existiert) und die Daten werden synchronisiert sobald
 *               eine Verbindung zum JAS wieder hergestellt ist.

 * en:
 * CONSTANTS for the Run-Version (i.e. the access to stored data).
 * StandAlone: Database is on the same machine as the application or accessed over the
 *             TCP/IP-nework (must be provided by the database-system).
 * FatClient: Access to Data is via a Java-Application-Server (JAS); multiple clients possible.
 * MobileClient: Data from the JAS is mirrored at a local database on a mobile-client (notebook);
 *               Data-entry can be done on the mobile-client (even if there is no connection to
 *               JAS) and data is synchronized when a connection to the JAS is established again. */
    public static final int CONST_StandAlone = 1;
    public static final int CONST_FatClient = 2;
    public static final int CONST_MobileClient = 3;
/* de: Variable für die Art des Zugriffs auf Daten.
 * en: Variable for the run-version to be used. */
    public int RunVersion;
/*
 *
de:
 *
Merker, ob eine Verbindung zum JAS (Java Application Server) möglich ist.
 *
Diese Variable ist notwendig, wenn eine 'MobileClient'-Version im Einsatz ist.
 *
Dieser Merker wird auf 'false' gesetzt, wenn bei einem Zugriff auf Daten festgestellt wird, dass
 *
die Verbindung zum JAS nicht mehr hergestellt werden kann.
 *
Durch die wiederholten Versuche des Java-Runtime-Systems kann es bis zu einer Minute dauern bis
 *
im Anwendungsprogramm erkennbar ist, dass die Verbindung zum JAS nicht möglich ist.
 *
Um bei einem Zugriff auf Daten schneller zu wissen, ob die Daten vom JAS abgefragt werden können
 *
- oder alternativ von der lokalen Datenbank gelesen werden müssen - wird zuerst der Wert dieses Merkers
 *
abgefragt bevor versucht wird, die Verbindung zum JAS herzustellen.
 *
Ist dieser Wert einmal auf 'false' (Verbindung zum JAS nicht möglich), kann nur mehr durch den
 *
Anwender ausprobiert werden, ob die Verbindung zum JAS wieder hergestellt werden kann.
 * en:

 *
Flag if a connection to the JAS (Java Application Server) can be established.
 *
This variable is needed if a 'MobileClient' version is in operation.
 *
This flag is set to 'false' when, during the access to data is detected, that a connection to the JAS
 *
can not be established.
 *
Due to repeated trials of the Java-Runtime-System it may take up to one minute until the application
 *
program realises, that a connection to the JAS is impossible.
 *
To get a faster information if data on the JAS can be accessed - or has to be read from the local database
 *
as an alternative - the value of this flag is used before a connection to the JAS is tried.
 *
If this value is set to 'false' (connection to JAS not possible), then a manual trial by the user is necessary
 *
to test the connection to the JAS and re-establish it again. */
    public boolean bolJASConnectionEstablished true;
/*
 *
de:
 * DocumentListener Klasse zur Verarbeitung von Änderungen in Eingabe- oder Auswahl-Feldern.
 * en:
 * DocumentListener class to process changes in entry- or selection-fields of the GUI. */
    public JSBS_StartFrame__DocumentListener structJSBS_StartFrame__DocumentListener;
/*
 * de:
 * Liste der aktiven (geöffneten) Teilprogramme (Tasks);
 * zum anzeigen der Liste in der ListBox in pnl_OpenTasks.
 * en:

 * List of the open (Sub-)Tasks;
 * for display of the list in the ListBox of pnl_OpenTasks. */
    public Vector vecOpenTasksList = new Vector();
/*
 * de: Connection-Manager für den Zugriff auf die Datenbank.
 * en: Connection-Manager for access to the database. */
    public JSBS_DB_ConnectionManager structJSBS_DB_ConnectionManager;
/*
 * de: Klasse für die Verbindung zum JAS (Java Application Server).
 * en: Class for connecting to the JAS (Java Application Server). */
    public JSBS_StartFrame__JASConnections structJSBS_StartFrame__JASConnections = null;
/*
 * de:
 * Struktur mit verschiedenen Parametern;
 * bitte informieren Sie sich über jede Variable bei der Klasse der Struktur.
 * en:
 * Structure with a variety of parameters;
 * please see the description for each variable at the class of the structure. */
   public JSBS_UniversalParameters structJSBS_UniversalParameters;
/*
 * de:
 * Struktur mit Regeln zum Prüfen von Anwender-Eingaben in Feldern auf der GUI;
 * bitte informieren Sie sich über jede Variable bei der Klasse der Struktur.
 * en:
 * Structure with Rules to check the User-Entry in GUI-fields;
 * please see the description for eacht variable at the class of the structure. */
   public JSBS_EntryRules structJSBS_EntryRules = new JSBS_EntryRules(this);
/*
 * de:
 * XML-Struktur mit den Eigenschaften für die sprachabhängigen GUI-Elemente.
 * en:
 * XML-structure with properties for language dependant GUI-elements. */
    public JSBS_XML_DisplayStrings structJSBS_XML_DisplayStrings;
/*
 * de:
 * XML-Struktur mit der Zuordnung von Symbolen (Icons) und Funktionstasten zu den
 * - innerhalb des Anwendungsprogramms verwendeten – Funktionstasten.
 * en:
 * XML-structure with allocation of Icons and Function-Key-Codes to JButton-Names
 * used within the application. */
    public JSBS_XML_FunctionKeys structJSBS_XML_FunctionKeys;
/*
 * de:
 * XML-Struktur mit der Liste der Anwendungen;
 * konkret: die angezeigte Information über die aufrufbaren Geschäftsfall-Anwendungen.
 * en:
 * XML-structure with the list of Tasks;
 * i.e. the displayed information about the callable business-tasks. */
    public JSBS_XML_Tasks structJSBS_XML_Tasks;
/*
 * de:
 * Array der JPanels deren Ränder eingefärbt werden sollen – mit der Methode
 * JSBS_GUIServices.setPanelBorders().
 * Die Größe und der Inhalt dieses Array muss innerhalb des Anwendungsprogramms,
 * das diese Basis-Klasse erbt, definiert werden.
 * en:
 * Array of JPanels whose borders should be colored using the method
 * JSBS_GUIServices.setPanelBorders().
 * The size and the content of this array has to be defined by the application
 * that inherits this base-class. */
   protected JPanel[] arrayJPanelBordersToBeColored = null;
/*
 * de:
 * Schaltfläche (Button) auf den ein 'Mausklick' simuliert wird wenn die Eingabe-Taste der
 * Tastatur betätigt wird.
 * Diese Variable kann dynamisch durch das Anwendungsprogramm verändert werden -
 * damit kann der Anwender geführt werden welche Schaltfläche im Ablauf als als Nächstes
 * betätigt werden soll.
 * en:
 * Button where a 'mouse-click' is simulated when the Enter-Key on the keyboard is pressed.
 * This variable can be dynamically filled by the application to guide the user
 * what button is recommended to be used next. */
   protected JButton btnEnterTriggeredButton = null;
/*
 * de:
 * Merker (Flags) zum 'Aufheben' wenn Modifier-Tasten (Umschalten, Steuerung, Alt) betätigt
 * wurden. Diese Merker sind notwendig weil Tasten-Kombinationen als sequentielle Tastatur-Codes
 * an die Anwendung weiter gegeben werden.
 * en:
 * Flags to keep if modifying keys were typed.
 * Those are necessary as key-combinations are delivered to the application
 * as sequential key-strokes. */

   protected boolean bolAltKeyModifier = false;
   protected boolean bolCtrlKeyModifier = false;
   protected boolean bolShiftKeyModifier = false;
/*
 * de:
 * Flag zur Steuerung der Methoden die innerhalb von 'columnMarginChanged' aufgerufen werden.
 * Damit wird verhindert, dass beim erneuten Aufbau des Inhalts von JTables durch ein
 * zeitversetztes Auslösen des 'TableColumnModelListener' falsche Spaltenbreiten aus der
 * JTable ausgelesen werden und in weiterer Folge auf der Datenbank gespeichert werden.
 * Der Wert muss auf 'true' gesetzt werden bevor eine JTable neu 'befüllt' wird und danach
 * muss der Wert wieder auf 'false' gesetzt werden.
 * en:
 * Flag to control the methods called within 'columnMarginChanged'.
 * This inhibits that wrong column-widths are read from the JTables and stored on the database
 * thereafter. This may be caused when the 'TableColumnModelListener' is triggered with a delay.
 * The value has to be set to 'true' before a JTable is 'refilled' and set to 'false' again
 * after the filling of the JTable has ended. */
    
public boolean bolInhibitColumnMarginChangeStore false;
/*
 * de:
 * Business-Object mit der Information über die Größe (Breite, Höhe) und
 * Position (Abstand in Bildpunkten zwischen der oberen linken Ecke des Frames und der
 * oberen linken Ecke des Bildschirms) eines Frames.
 * Weiters enthält dieses BO 10 Arrays für die Spaltenbreite von JTables.
 * Diese Arrays können vom Anwendungsprogramm, das diese Basisklasse erbt, beliebig
 * verwendet werden.
 * en:
 * Business-Object that holds the information about the Frame-Size (width, height)
 * and Position (distance in pixels between the upper-left corner of the frame from the
 * upper-left corner of the display-screen).
 * Further, this BO holds 10 arrays to describe the column-widths of JTables.
 * These arrays can be utilized by the application program inheriting this base-class. */
   public JSBS_FramePosition_BOC structJSBS_FramePosition_BOC;
/*
 * de:
 * Business-Object mit der Information über die eindeutige Identifizierung

 * eines Endgerätes (PDFP - Physical Device Fingerprint).

 * Die Indentifizierung des Endgerätes erfolgt über den 'Hostname' des

 * Betriebssystems oder, wenn der 'Hostname' nicht ermittelbar ist, alternativ

 *
über die TCP/IP-Adresse.
 * Dieses BO enthält 15 Variablen (vom Type String); diese können vom

 *
Anwendungsprogramm, das diese Basisklasse erbt, beliebig verwendet werden.
 * en:
 * Business-Object with the information about the unique identification of a

 * user equipment (PDFP - Physical Device Fingerprint)
.
 * The identification uf the user equipment is done via the 'Hostname' of the

 * operating system or, if the 'Hostname' can not be determined, over the

 *
TCP/IP-address alternatively
 * This BO holds 15 variables (of type String); those can be utilized by
 * the application program
inheriting this base-class. */
   public JSBS_PDFP_BOC structJSBS_PDFP_BOC;
/*
 * ==============================
 * de:

 *
BLOCK MIT DEN VARIABLEN FÜR DAS FÜLLEN VON COMBO-BOXEN MIT WÄHRUNG, SPRACHE ODER LAND.
 * en:
 * BLOCK WITH THE VARIABLES TO FILL COMBO-BOXES WITH CURRENCY, LANGUAGE OR COUNTRY. */

/*
 * de:
 * Business-Object mit der Liste der, in einer individuellen Installation

 * des Anwendungsprogramms, definierten
Währungen.
 * en:
 * Business-Object with the list of currencies defined in the individual

 * installation of the application-program
. */
   public JSBS_Currency_BOC_Set structJSBS_Currency_BOC_Set = null;
/*
 * de:
 * Variable für den Zeitpunkt, zu dem die Werte in der Variable

 *
'structJSBS_Currency_BOC_Set' zuletzt von der Datenbank gelesen wurden.
 * Damit kann eine Refresh-Periode verwirklicht werden nach deren Ablauf

 * die Werte in 'structJSBS_Currency_BOC_Set' neu von der Datenbank gelesen

 * werden
. Innerhalb der Refresh-Periode wird nicht neu von der Datenbank
 * gelesen sondern die Werte in
'structJSBS_Currency_BOC_Set' als 'aktuell'
 *
angenommen.
 * en:
 * Variable for the time, at that the values of the variable

 * '
structJSBS_Currency_BOC_Set' were retrieved from the database. That
 * variable allows to establish a refresh-period after which the values in

 * '
structJSBS_Currency_BOC_Set' are retrieved again from the database.
 * Within the refresh-period, a re-read from the database is not done -

 * instead the values in '
structJSBS_Currency_BOC_Set' are assumed to
 * be 'up-to-date'
. */
   private Date dteJSBS_Currency_BOC_Set_LastRead = new Date(0);
/*
 * --------------------

 * de:
 * Business-Object mit der Liste der, in einer individuellen Installation des

 *
Anwendungsprogramms, definierten Ländern.
 * en:
 * Business-Object with the list of the countries defined in the individual

 *
installation of the application-program. */
   private JSBS_Country_BOC_Set structJSBS_Country_BOC_Set = null;
/*
 * de:
 * Variable für den Zeitpunkt, zu dem die Werte in der Variable

 *
'structJSBS_Country_BOC_Set' zuletzt von der Datenbank gelesen wurden.
 * Damit kann eine Refresh-Periode verwirklicht werden nach deren Ablauf

 * die Werte in 'structJSBS_Country_BOC_Set' neu von der Datenbank gelesen

 * werden
. Innerhalb der Refresh-Periode wird nicht neu von der Datenbank
 * gelesen sondern die Werte in
'structJSBS_Country_BOC_Set' als 'aktuell'
 *
angenommen.
 * en:
 * Variable for the time, at that the values of the variable

 * 'structJSBS_Country_BOC_Set'
were retrieved from the database. That
 * variable allows to establish a refresh-period after which the values in

 * 'structJSBS_Country_BOC_Set' are retrieved again from the database.

 * Within the refresh-period, a re-read from the database is not done -

 * instead the values in 'structJSBS_Country_BOC_Set' are assumed to

 * be 'up-to-date'
. */
   private Date dteJSBS_Country_BOC_Set_LastRead = new Date(0);
/*
 * --------------------

 * de:
 * Business-Object mit der Liste der, in einer individuellen Installation des

 *
Anwendungsprogramms, definierten Sprachen.
 * en:
 * Business-Object with the list of the languages defined in the individual

 *
installation of the application-program. */
   private JSBS_Language_BOC_Set structJSBS_Language_BOC_Set = null;
/*
 * de:
 * Variable für den Zeitpunkt, zu dem die Werte in der Variable

 *
'structJSBS_Language_BOC_Set' zuletzt von der Datenbank gelesen wurden.
 * Damit kann eine Refresh-Periode verwirklicht werden nach deren Ablauf

 * die Werte in 'structJSBS_Language_BOC_Set' neu von der Datenbank gelesen

 * werden
. Innerhalb der Refresh-Periode wird nicht neu von der Datenbank
 * gelesen sondern die Werte in
'structJSBS_Language_BOC_Set' als 'aktuell'
 *
angenommen.
 * en:
 * Variable for the time, at that the values of the variable

 * 'structJSBS_Language_BOC_Set'
were retrieved from the database. That
 * variable allows to establish a refresh-period after which the values in

 * 'structJSBS_Language_BOC_Set' are retrieved again from the database.

 * Within the refresh-period, a re-read from the database is not done -

 * instead the values in 'structJSBS_Language_BOC_Set' are assumed to

 * be 'up-to-date'
. */
   private Date dteJSBS_Language_BOC_Set_LastRead = new Date(0);
/*
 * ==============================  */

/*
 * de: GUI-Elemente für das Standard-Layout.
 * en: GUI-elements for the standard layout. */
    protected JPanel pnl_Main;
    protected JPanel pnl_Main_With_Currency_Selection;
    protected JPanel pnl_Head;
    protected JPanel pnl_Head_With_Currency_Selection;
/*
 * de:

 *
Eigenes JPanel in dem bei Bedarf (unterbrochene Verbindung zum JAS bei Betriebsart 'MobileClient')
 * die Schaltfläche 'btn_ConnectToJAS' (für den Versuch zum Wieder-Verbinden mit dem JAS durch den

 *
Anwender) platziert wird.
 * Wenn nur 'btn_ConnectToJAS' innerhalb eines (dieses) JPanel platziert ist, dann ist der Code für

 * das Einfügen oder Entfernen wesentlich einfacher als wenn mehrere Components auf einem JPanel sind
.
 * en:

 * Seperate JPanel
which contains the JButton 'btn_ConnectToJAS' (for the trial by the user to reconnect
 *
to the JAS) that is shown when needed (broken connection to the JAS at mode 'MobileClient').
 * If only 'btn_ConnectToJAS' is placed within a (this) JPanel, the code to insert or remove is much

 *
easier than several components are placed on a JPanel. */
    protected JPanel pnl_ConnectToJAS;
/* *** */
    protected JPanel pnl_Data;
    protected JPanel pnl_Info;
    protected JPanel pnl_Lists;
    protected JPanel pnl_Entry;
/*
 * de: GUI-Elemente für pnl_Head (ganz oben).

 * en:
GUI-elements for the pnl_Head (at the top). */
    protected JButton btn_Help;
    protected JLabel lbl_ApplicationTitle1;
    protected JLabel lbl_ApplicationTitle2;
    protected JLabel lbl_CurrencySelection;
    protected JComboBox combo_CurrencySelection;
    protected JLabel lbl_HeadDate;
    protected JLabel lbl_HeadUser;
/*
 * de:

 *
Schaltfläche für den Versuch des Anwenders, wieder eine Verbindung zum JAS herzustellen.
 * Für eine detaillierte Beschreibung sehen Sie bitte bei 'pnl_ConnectToJAS' nach.

 * en:

 *
JButton for the trial of the user to re-establish a connection to the JAS.
 * Please see 'pnl_ConnectToJAS' for a detailled description
. */
    protected JButton btn_ConnectToJAS;
/*
 * de: GUI-Elemente für pnl_Lists (im oberen Teil von pnl_Data).

 * en: GUI-
elements for the pnl_Lists (at the upper part of pnl_Data). */
    protected JLabel lbl_SelectableTasks;
    protected JScrollPane pnl_SelectableTasks;
    protected JTree tree_SelectableTasks;
    protected JLabel lbl_OpenTasks;
    protected JScrollPane pnl_OpenTasks;
    protected JTable pnl_OpenTasksTable;
    protected DefaultTableColumnModel pnl_OpenTasksTableDefaultTableColumnModel;
/*
 * de: GUI-Elemente für pnl_Entry (im unteren Teil von pnl_Data).

 * en: GUI-elements for the pnl_Entry (at the lower part of pnl_Data). */
    protected JLabel lbl_Code;
    protected JLabel lbl_Parameter1;
    protected JLabel lbl_Parameter2;
    protected JLabel lbl_Parameter3;
    protected JTextField txt_Code;
    protected JTextField txt_Parameter1;
    protected JTextField txt_Parameter2;
    protected JTextField txt_Parameter3;
    protected JButton btn_Continue;
/* de: Feld für die Info-Hinweise (pnl_Info im unteren Bereich)
 * en: Field for the info-messages (pnl_Info at the bottom). */
    protected JLabel lbl_InfoMessage;
/*
 * ********************
 * de: Erstellen der GUI-Elemente.

 * en:
Create the GUI-elements. */
    protected JPanel get_pnl_Main() {
/* de: Automatisches Erstellen des GUI-Elements wenn es nicht schon exisitert.
 * en:
Auto-create the GUI-element if it does not already exist. */
      
if (pnl_Main == null) {
        try {
          pnl_Main
= new JPanel();
          pnl_Main
.setName("pnl_Main");
          pnl_Main
.setLayout(new GridBagLayout());
/*
 * de: Festlegen des GridBagConstraints für das Element das hinzugefügt wird.

 * en:
Define GridBagConstraints for the element to be added. */
          GridBagConstraints gbc_pnl_Head = new GridBagConstraints();
          gbc_pnl_Head.
gridx = 0;
          gbc_pnl_Head.
gridy = 0;
          gbc_pnl_Head.
fill = GridBagConstraints.HORIZONTAL;
          gbc_pnl_Head.
weightx = 1;
          gbc_pnl_Head.
anchor = GridBagConstraints.CENTER;
/* de:
 *
Hinzufügen des Elements auf das Panel; die Position des Elements wird durch GridBagConstraints
 *
gesteuert.
 * en:

 *
Add the element to the panel; element-position is controlled by GridBagConstraints. */
          get_pnl_Main().add(get_pnl_Head(), gbc_pnl_Head);
/*
 * Define GridBagConstraints for the element to be added. */
          GridBagConstraints gbc_pnl_Data = new GridBagConstraints();
          gbc_pnl_Data.
gridx = 0;
          gbc_pnl_Data.
gridy = 1;
          gbc_pnl_Data.
fill = GridBagConstraints.BOTH;
          gbc_pnl_Data.
weightx = 1;
          gbc_pnl_Data.
weighty = 1;
          gbc_pnl_Data.
anchor = GridBagConstraints.CENTER;
/* Add the element to the panel; element-position is controlled by GridBagConstraints. */
          get_pnl_Main().add(get_pnl_Data(), gbc_pnl_Data);
/*
 * Define GridBagConstraints for the element to be added. */
          GridBagConstraints gbc_pnl_Info = new GridBagConstraints();
          gbc_pnl_Info.
gridx = 0;
          gbc_pnl_Info.
gridy = 2;
          gbc_pnl_Info.
fill = GridBagConstraints.HORIZONTAL;
          gbc_pnl_Info.
weightx = 1;
          gbc_pnl_Info.
anchor = GridBagConstraints.CENTER;
/* Add the element to the panel; element-position is controlled by GridBagConstraints. */
          get_pnl_Main().add(get_pnl_Info(), gbc_pnl_Info);
        }
        
catch (Throwable Exc) {
          System.
out.println("Error while building pnl_Main in class JSBS_StartFrame");
          Exc.printStackTrace();
        }
      }
      return pnl_Main;
    }
/*
 * ******************** */
    protected JPanel get_pnl_Main_With_Currency_Selection() {
/* Auto-create the GUI-element if it does not already exist. */
      
if (pnl_Main_With_Currency_Selection == null) {
        try {
          pnl_Main_With_Currency_Selection
= new JPanel();
          pnl_Main_With_Currency_Selection
.setName("pnl_Main_With_Currency_Selection");
          pnl_Main_With_Currency_Selection
.setLayout(new GridBagLayout());
/*
 * Define GridBagConstraints for the element to be added. */
          GridBagConstraints gbc_pnl_Head_With_Currency_Selection = new GridBagConstraints();
          gbc_pnl_Head_With_Currency_Selection.
gridx = 0;
          gbc_pnl_Head_With_Currency_Selection.
gridy = 0;
          gbc_pnl_Head_With_Currency_Selection.
fill = GridBagConstraints.HORIZONTAL;
          gbc_pnl_Head_With_Currency_Selection.
weightx = 1;
          gbc_pnl_Head_With_Currency_Selection.
anchor = GridBagConstraints.CENTER;
/* Add the element to the panel; element-position is controlled by GridBagConstraints. */
          get_pnl_Main_With_Currency_Selection().add(get_pnl_Head_With_Currency_Selection(),
                                                     gbc_pnl_Head_With_Currency_Selection);
/*
 * Define GridBagConstraints for the element to be added. */
          GridBagConstraints gbc_pnl_Data = new GridBagConstraints();
          gbc_pnl_Data.
gridx = 0;
          gbc_pnl_Data.
gridy = 1;
          gbc_pnl_Data.
fill = GridBagConstraints.BOTH;
          gbc_pnl_Data.
weightx = 1;
          gbc_pnl_Data.
weighty = 1;
          gbc_pnl_Data.
anchor = GridBagConstraints.CENTER;
/* Add the element to the panel; element-position is controlled by GridBagConstraints. */
          get_pnl_Main_With_Currency_Selection().add(get_pnl_Data(), gbc_pnl_Data);
/*
 * Define GridBagConstraints for the element to be added. */
          GridBagConstraints gbc_pnl_Info = new GridBagConstraints();
          gbc_pnl_Info.
gridx = 0;
          gbc_pnl_Info.
gridy = 2;
          gbc_pnl_Info.
fill = GridBagConstraints.HORIZONTAL;
          gbc_pnl_Info.
weightx = 1;
          gbc_pnl_Info.
anchor = GridBagConstraints.CENTER;
/* Add the element to the panel; element-position is controlled by GridBagConstraints. */
          get_pnl_Main_With_Currency_Selection().add(get_pnl_Info(), gbc_pnl_Info);
        }
        
catch (Throwable Exc) {
          System.
out.println("Error while building pnl_Main_With_Currency_Selection in class JSBS_StartFrame");
          Exc.printStackTrace();
        }
      }
      return pnl_Main_With_Currency_Selection;
    }
/*
 * ******************** */
    protected JPanel get_pnl_Head_With_Currency_Selection() {
/* Auto-create the GUI-element if it does not already exist. */
      
if (pnl_Head_With_Currency_Selection == null) {
        try {
          pnl_Head_With_Currency_Selection
= new JPanel();
          pnl_Head_With_Currency_Selection
.setName("pnl_Head_With_Currency_Selection");
          pnl_Head_With_Currency_Selection
.setLayout(new GridBagLayout());
/*
 * Define GridBagConstraints for the element to be added. */
          GridBagConstraints gbc_btn_Help = new GridBagConstraints();
          gbc_btn_Help.
gridx = 0;
          gbc_btn_Help.
gridy = 0;
          gbc_btn_Help.
fill = GridBagConstraints.BOTH;
          gbc_btn_Help.
weightx = 1;
          gbc_btn_Help.
weighty = 1;
          gbc_btn_Help.
gridheight = 2;
          gbc_btn_Help.
anchor = GridBagConstraints.CENTER;
          gbc_btn_Help.
insets = new Insets(3,3,3,3);
/* Add the element to the panel; element-position is controlled by GridBagConstraints. */
          get_pnl_Head_With_Currency_Selection().add(get_btn_Help(),
                                                     gbc_btn_Help);
/*
 * Define GridBagConstraints for the element to be added. */
          GridBagConstraints gbc_lbl_ApplicationTitle1 = new GridBagConstraints();
          gbc_lbl_ApplicationTitle1.
gridx = 1;
          gbc_lbl_ApplicationTitle1.
gridy = 0;
          gbc_lbl_ApplicationTitle1.
fill = GridBagConstraints.HORIZONTAL;
          gbc_lbl_ApplicationTitle1.
weightx = 1;
          gbc_lbl_ApplicationTitle1.
anchor = GridBagConstraints.LINE_START;
          gbc_lbl_ApplicationTitle1.
insets = new Insets(3,3,3,3);
/* Add the element to the panel; element-position is controlled by GridBagConstraints. */
          get_pnl_Head_With_Currency_Selection().add(get_lbl_ApplicationTitle1(),
                                                     gbc_lbl_ApplicationTitle1);
/*
 * Define GridBagConstraints for the element to be added. */
          GridBagConstraints gbc_lbl_ApplicationTitle2 = new GridBagConstraints();
          gbc_lbl_ApplicationTitle2.
gridx = 1;
          gbc_lbl_ApplicationTitle2.
gridy = 1;
          gbc_lbl_ApplicationTitle2.
fill = GridBagConstraints.HORIZONTAL;
          gbc_lbl_ApplicationTitle2.
weightx = 1;
          gbc_lbl_ApplicationTitle2.
anchor = GridBagConstraints.LINE_START;
          gbc_lbl_ApplicationTitle2.
insets = new Insets(3,3,3,3);
/* Add the element to the panel; element-position is controlled by GridBagConstraints. */
          get_pnl_Head_With_Currency_Selection().add(get_lbl_ApplicationTitle2(),
                                                     gbc_lbl_ApplicationTitle2);
/*
 * Define GridBagConstraints for the element to be added. */
          GridBagConstraints gbc_lbl_CurrencySelection = new GridBagConstraints();
          gbc_lbl_CurrencySelection.
gridx = 2;
          gbc_lbl_CurrencySelection.
gridy = 0;
          gbc_lbl_CurrencySelection.
fill = GridBagConstraints.HORIZONTAL;
          gbc_lbl_CurrencySelection.
weightx = 1;
          gbc_lbl_CurrencySelection.
anchor = GridBagConstraints.LINE_START;
          gbc_lbl_CurrencySelection.
insets = new Insets(3,3,3,3);
/* Add the element to the panel; element-position is controlled by GridBagConstraints. */
          get_pnl_Head_With_Currency_Selection().add(get_lbl_CurrencySelection(),
                                                     gbc_lbl_CurrencySelection);
/*
 * Define GridBagConstraints for the element to be added. */
          GridBagConstraints gbc_combo_CurrencySelection = new GridBagConstraints();
          gbc_combo_CurrencySelection.
gridx = 2;
          gbc_combo_CurrencySelection.
gridy = 1;
          gbc_combo_CurrencySelection.
fill = GridBagConstraints.HORIZONTAL;
          gbc_combo_CurrencySelection.
weightx = 1;
          gbc_combo_CurrencySelection.
anchor = GridBagConstraints.LINE_START;
          gbc_combo_CurrencySelection.
insets = new Insets(3,3,3,3);
/* Add the element to the panel; element-position is controlled by GridBagConstraints. */
          get_pnl_Head_With_Currency_Selection().add(get_combo_CurrencySelection(),
                                                     gbc_combo_CurrencySelection);
/*
 * Define GridBagConstraints for the element to be added. */
          GridBagConstraints gbc_lbl_HeadDate = new GridBagConstraints();
          gbc_lbl_HeadDate.
gridx = 3;
          gbc_lbl_HeadDate.
gridy = 0;
          gbc_lbl_HeadDate.
fill = GridBagConstraints.HORIZONTAL;
          gbc_lbl_HeadDate.
weightx = 1;
          gbc_lbl_HeadDate.
anchor = GridBagConstraints.LINE_END;
          gbc_lbl_HeadDate.
insets = new Insets(3,3,3,3);
/* Add the element to the panel; element-position is controlled by GridBagConstraints. */
          get_pnl_Head_With_Currency_Selection().add(get_lbl_HeadDate(), gbc_lbl_HeadDate);
/*
 * Define GridBagConstraints for the element to be added. */
          GridBagConstraints gbc_lbl_HeadUser = new GridBagConstraints();
          gbc_lbl_HeadUser.
gridx = 3;
          gbc_lbl_HeadUser.
gridy = 1;
          gbc_lbl_HeadUser.
fill = GridBagConstraints.HORIZONTAL;
          gbc_lbl_HeadUser.
weightx = 1;
          gbc_lbl_HeadUser.
anchor = GridBagConstraints.LINE_END;
          gbc_lbl_HeadUser.
insets = new Insets(3,3,3,3);
/* Add the element to the panel; element-position is controlled by GridBagConstraints. */
          get_pnl_Head_With_Currency_Selection().add(get_lbl_HeadUser(), gbc_lbl_HeadUser);
/*
 * de:

 * Hinzufügen des Panels in dem bei Bedarf die Schaltfläche 'btn_ConnectToJAS' angezeigt wird.

 * Eine detaillierte Beschreibung des Zwecks finden Sie bei der Variable 'pnl_ConnectToJAS'.

 * Zuerst Festlegen der GridBagConstraints für das hinzuzufügende Element.

 * en:

 * Add the panel where the button 'btn_ConnectToJAS' is shown when needed.

 * Please see the description at variable 'pnl_ConnectToJAS' for background informations.

 * First, define GridBagConstraints for the element to be added. */
          GridBagConstraints gbc_pnl_ConnectToJAS = new GridBagConstraints();
          gbc_
pnl_ConnectToJAS.gridx = 4;
          gbc_
pnl_ConnectToJAS.gridy = 0;
          gbc_
pnl_ConnectToJAS.fill = GridBagConstraints.BOTH;
          gbc_
pnl_ConnectToJAS.weightx = 1;
          gbc_
pnl_ConnectToJAS.weighty = 1;
          gbc_
pnl_ConnectToJAS.gridheight = 2;
          gbc_pnl_ConnectToJAS.anchor = GridBagConstraints.CENTER;
          gbc_
pnl_ConnectToJAS.insets = new Insets(3,3,3,3);
/* Add the element to the panel; element-position is controlled by GridBagConstraints. */
          get_pnl_Head_With_Currency_Selection().add(get_pnl_ConnectToJAS(), gbc_pnl_ConnectToJAS);
        }
        
catch (Throwable Exc) {
          System.
out.println("Error while building pnl_Head_With_Currency_Selection in class JSBS_StartFrame");
          Exc.printStackTrace();
        }
      }
      return pnl_Head_With_Currency_Selection;
    }
/*
 * ******************** */
    protected JPanel get_pnl_Head() {
/* Auto-create the GUI-element if it does not already exist. */
      
if (pnl_Head == null) {
        try {
          pnl_Head
= new JPanel();
          pnl_Head
.setName("pnl_Head");
          pnl_Head
.setLayout(new GridBagLayout());
/*
 * Define GridBagConstraints for the element to be added. */
          GridBagConstraints gbc_btn_Help = new GridBagConstraints();
          gbc_btn_Help.
gridx = 0;
          gbc_btn_Help.
gridy = 0;
          gbc_btn_Help.
fill = GridBagConstraints.BOTH;
          gbc_btn_Help.
weightx = 1;
          gbc_btn_Help.
weighty = 1;
          gbc_btn_Help.
gridheight = 2;
          gbc_btn_Help.
anchor = GridBagConstraints.CENTER;
          gbc_btn_Help.
insets = new Insets(3,3,3,3);
/* Add the element to the panel; element-position is controlled by GridBagConstraints. */
          get_pnl_Head().add(get_btn_Help(), gbc_btn_Help);
/*
 * Define GridBagConstraints for the element to be added. */
          GridBagConstraints gbc_lbl_ApplicationTitle1 = new GridBagConstraints();
          gbc_lbl_ApplicationTitle1.
gridx = 1;
          gbc_lbl_ApplicationTitle1.
gridy = 0;
          gbc_lbl_ApplicationTitle1.
fill = GridBagConstraints.HORIZONTAL;
          gbc_lbl_ApplicationTitle1.
weightx = 1;
          gbc_lbl_ApplicationTitle1.
anchor = GridBagConstraints.LINE_START;
          gbc_lbl_ApplicationTitle1.
insets = new Insets(3,3,3,3);
/* Add the element to the panel; element-position is controlled by GridBagConstraints. */
          get_pnl_Head().add(get_lbl_ApplicationTitle1(), gbc_lbl_ApplicationTitle1);
/*
 * Define GridBagConstraints for the element to be added. */
          GridBagConstraints gbc_lbl_ApplicationTitle2 = new GridBagConstraints();
          gbc_lbl_ApplicationTitle2.
gridx = 1;
          gbc_lbl_ApplicationTitle2.
gridy = 1;
          gbc_lbl_ApplicationTitle2.
fill = GridBagConstraints.HORIZONTAL;
          gbc_lbl_ApplicationTitle2.
weightx = 1;
          gbc_lbl_ApplicationTitle2.
anchor = GridBagConstraints.LINE_START;
          gbc_lbl_ApplicationTitle2.
insets = new Insets(3,3,3,3);
/* Add the element to the panel; element-position is controlled by GridBagConstraints. */
          get_pnl_Head().add(get_lbl_ApplicationTitle2(), gbc_lbl_ApplicationTitle2);
/*
 * Define GridBagConstraints for the element to be added. */
          GridBagConstraints gbc_lbl_HeadDate = new GridBagConstraints();
          gbc_lbl_HeadDate.
gridx = 3;
          gbc_lbl_HeadDate.
gridy = 0;
          gbc_lbl_HeadDate.
fill = GridBagConstraints.HORIZONTAL;
          gbc_lbl_HeadDate.
weightx = 1;
          gbc_lbl_HeadDate.
anchor = GridBagConstraints.LINE_END;
          gbc_lbl_HeadDate.
insets = new Insets(3,3,3,3);
/* Add the element to the panel; element-position is controlled by GridBagConstraints. */
          get_pnl_Head().add(get_lbl_HeadDate(), gbc_lbl_HeadDate);
/*
 * Define GridBagConstraints for the element to be added. */
          GridBagConstraints gbc_lbl_HeadUser = new GridBagConstraints();
          gbc_lbl_HeadUser.
gridx = 3;
          gbc_lbl_HeadUser.
gridy = 1;
          gbc_lbl_HeadUser.
fill = GridBagConstraints.HORIZONTAL;
          gbc_lbl_HeadUser.
weightx = 1;
          gbc_lbl_HeadUser.
anchor = GridBagConstraints.LINE_END;
          gbc_lbl_HeadUser.
insets = new Insets(3,3,3,3);
/* Add the element to the panel; element-position is controlled by GridBagConstraints. */
          get_pnl_Head().add(get_lbl_HeadUser(), gbc_lbl_HeadUser);
/*
 * de:

 * Hinzufügen des Panels in dem bei Bedarf die Schaltfläche 'btn_ConnectToJAS' angezeigt wird.

 * Eine detaillierte Beschreibung des Zwecks finden Sie bei der Variable 'pnl_ConnectToJAS'.

 * Zuerst Festlegen der GridBagConstraints für das hinzuzufügende Element.

 * en:

 * Add the panel where the button 'btn_ConnectToJAS' is shown when needed.

 * Please see the description at variable 'pnl_ConnectToJAS' for background informations.

 * First, define GridBagConstraints for the element to be added. */
          GridBagConstraints gbc_pnl_ConnectToJAS = new GridBagConstraints();
          gbc_
pnl_ConnectToJAS.gridx = 4;
          gbc_
pnl_ConnectToJAS.gridy = 0;
          gbc_
pnl_ConnectToJAS.fill = GridBagConstraints.BOTH;
          gbc_
pnl_ConnectToJAS.weightx = 1;
          gbc_
pnl_ConnectToJAS.weighty = 1;
          gbc_
pnl_ConnectToJAS.gridheight = 2;
          gbc_pnl_ConnectToJAS.anchor = GridBagConstraints.CENTER;
          gbc_
pnl_ConnectToJAS.insets = new Insets(3,3,3,3);
/* Add the element to the panel; element-position is controlled by GridBagConstraints. */
          get_pnl_Head().add(get_pnl_ConnectToJAS(), gbc_pnl_ConnectToJAS);
        }
        
catch (Throwable Exc) {
          System.
out.println("Error while building pnl_Head in class JSBS_StartFrame");
          Exc.printStackTrace();
        }
      }
      return pnl_Head;
    }
/*
 * ******************** */
    protected JPanel get_pnl_ConnectToJAS() {
/* Auto-create the GUI-element if it does not already exist. */
      
if (pnl_ConnectToJAS == null) {
        try {
          pnl_ConnectToJAS
= new JPanel();
          pnl_
ConnectToJAS.setName("pnl_ConnectToJAS");
          pnl_
ConnectToJAS.setLayout(new BorderLayout());
        }
        
catch (Throwable Exc) {
          System.
out.println("Error while building pnl_ConnectToJAS in class JSBS_StartFrame");
          Exc.printStackTrace();
        }
      }
      return pnl_ConnectToJAS;
    }
/*
 * ******************** */
    protected JPanel get_pnl_Data() {
/* Auto-create the GUI-element if it does not already exist. */
      
if (pnl_Data == null) {
        try {
          pnl_Data
= new JPanel();
          pnl_Data
.setName("pnl_Data");
          pnl_Data
.setLayout(new GridBagLayout());
/*
 * Define GridBagConstraints for the element to be added. */
          GridBagConstraints gbc_pnl_Lists = new GridBagConstraints();
          gbc_pnl_Lists.
gridx = 0;
          gbc_pnl_Lists.
gridy = 0;
          gbc_pnl_Lists.
fill = GridBagConstraints.BOTH;
          gbc_pnl_Lists.
weightx = 1;
          gbc_pnl_Lists.
weighty = 100;
          gbc_pnl_Lists.
anchor = GridBagConstraints.CENTER;
/* Add the element to the panel; element-position is controlled by GridBagConstraints. */
          get_pnl_Data().add(get_pnl_Lists(), gbc_pnl_Lists);
/*
 * Define GridBagConstraints for the element to be added. */
          GridBagConstraints gbc_pnl_Entry = new GridBagConstraints();
          gbc_pnl_Entry.
gridx = 0;
          gbc_pnl_Entry.
gridy = 1;
          gbc_pnl_Entry.
fill = GridBagConstraints.HORIZONTAL;
          gbc_pnl_Entry.
weightx = 1;
          gbc_pnl_Entry.
anchor = GridBagConstraints.CENTER;
/* Add the element to the panel; element-position is controlled by GridBagConstraints. */
          get_pnl_Data().add(get_pnl_Entry(), gbc_pnl_Entry);
        }
        
catch (Throwable Exc) {
          System.
out.println("Error while building pnl_Data in class JSBS_StartFrame");
          Exc.printStackTrace();
        }
      }
      return pnl_Data;
    }
/*
 * ******************** */
    protected JPanel get_pnl_Lists() {
/* Auto-create the GUI-element if it does not already exist. */
      
if (pnl_Lists == null) {
        try {
          pnl_Lists
= new JPanel();
          pnl_Lists
.setName("pnl_Lists");
          pnl_Lists
.setLayout(new GridBagLayout());
/*
 * Define GridBagConstraints for the element to be added. */
          GridBagConstraints gbc_lbl_SelectableTasks = new GridBagConstraints();
          gbc_lbl_SelectableTasks.
gridx = 0;
          gbc_lbl_SelectableTasks.
gridy = 0;
          gbc_lbl_SelectableTasks.
fill = GridBagConstraints.NONE;
          gbc_lbl_SelectableTasks.
weightx = 1;
          gbc_lbl_SelectableTasks.
anchor = GridBagConstraints.LINE_START;
          gbc_lbl_SelectableTasks.
insets = new Insets(3,3,3,3);
/* Add the element to the panel; element-position is controlled by GridBagConstraints. */
          get_pnl_Lists().add(get_lbl_SelectableTasks(),
                              gbc_lbl_SelectableTasks);
/*
 * Define GridBagConstraints for the element to be added. */
          GridBagConstraints gbc_pnl_SelectableTasks = new GridBagConstraints();
          gbc_pnl_SelectableTasks.
gridx = 0;
          gbc_pnl_SelectableTasks.
gridy = 1;
          gbc_pnl_SelectableTasks.
fill = GridBagConstraints.BOTH;
          gbc_pnl_SelectableTasks.
weightx = 1;
          gbc_pnl_SelectableTasks.
weighty = 1;
          gbc_pnl_SelectableTasks.
anchor = GridBagConstraints.LINE_START;
          gbc_pnl_SelectableTasks.
insets = new Insets(3,3,3,3);
/* Add the element to the panel; element-position is controlled by GridBagConstraints. */
          get_pnl_Lists().add(get_pnl_SelectableTasks(),
                              gbc_pnl_SelectableTasks);
/*
 * Define GridBagConstraints for the element to be added. */
          GridBagConstraints gbc_lbl_OpenTasks = new GridBagConstraints();
          gbc_lbl_OpenTasks.
gridx = 1;
          gbc_lbl_OpenTasks.
gridy = 0;
          gbc_lbl_OpenTasks.
fill = GridBagConstraints.NONE;
          gbc_lbl_OpenTasks.
weightx = 5;
          gbc_lbl_OpenTasks.
anchor = GridBagConstraints.LINE_START;
          gbc_lbl_OpenTasks.
insets = new Insets(3,3,3,3);
/* Add the element to the panel; element-position is controlled by GridBagConstraints. */
          get_pnl_Lists().add(get_lbl_OpenTasks(),
                              gbc_lbl_OpenTasks);
/*
 * Define GridBagConstraints for the element to be added. */
          GridBagConstraints gbc_pnl_OpenTasks = new GridBagConstraints();
          gbc_pnl_OpenTasks.
gridx = 1;
          gbc_pnl_OpenTasks.
gridy = 1;
          gbc_pnl_OpenTasks.
fill = GridBagConstraints.BOTH;
          gbc_pnl_OpenTasks.
weightx = 5;
          gbc_pnl_OpenTasks.
weighty = 5;
          gbc_pnl_OpenTasks.
anchor = GridBagConstraints.LINE_START;
          gbc_pnl_OpenTasks.
insets = new Insets(3,3,3,3);
/* Add the element to the panel; element-position is controlled by GridBagConstraints. */
          get_pnl_Lists().add(get_pnl_OpenTasks(),
                              gbc_pnl_OpenTasks);
        }
        
catch (Throwable Exc) {
          System.
out.println("Error while building pnl_Lists in class JSBS_StartFrame");
          Exc.printStackTrace();
        }
      }
      return pnl_Lists;
    }
/*
 * ******************** */
    protected JPanel get_pnl_Entry() {
/* Auto-create the GUI-element if it does not already exist. */
      
if (pnl_Entry == null) {
        try {
          pnl_Entry
= new JPanel();
          pnl_Entry
.setName("pnl_Entry");
          pnl_Entry
.setLayout(new GridBagLayout());
/*
 * Define GridBagConstraints for the element to be added. */
          GridBagConstraints gbc_lbl_Code = new GridBagConstraints();
          gbc_lbl_Code.
gridx = 0;
          gbc_lbl_Code.
gridy = 0;
          gbc_lbl_Code.
fill = GridBagConstraints.HORIZONTAL;
          gbc_lbl_Code.
weightx = 1;
          gbc_lbl_Code.
anchor = GridBagConstraints.LINE_START;
          gbc_lbl_Code.
insets = new Insets(3,3,3,3);
/* Add the element to the panel; element-position is controlled by GridBagConstraints. */
          get_pnl_Entry().add(get_lbl_Code(),
                              gbc_lbl_Code);
/*
 * Define GridBagConstraints for the element to be added. */
          GridBagConstraints gbc_lbl_Parameter1 = new GridBagConstraints();
          gbc_lbl_Parameter1.
gridx = 1;
          gbc_lbl_Parameter1.
gridy = 0;
          gbc_lbl_Parameter1.
fill = GridBagConstraints.HORIZONTAL;
          gbc_lbl_Parameter1.
weightx = 3;
          gbc_lbl_Parameter1.
anchor = GridBagConstraints.LINE_START;
          gbc_lbl_Parameter1.
insets = new Insets(3,3,3,3);
/* Add the element to the panel; element-position is controlled by GridBagConstraints. */
          get_pnl_Entry().add(get_lbl_Parameter1(),
                              gbc_lbl_Parameter1);
/*
 * Define GridBagConstraints for the element to be added. */
          GridBagConstraints gbc_lbl_Parameter2 = new GridBagConstraints();
          gbc_lbl_Parameter2.
gridx = 2;
          gbc_lbl_Parameter2.
gridy = 0;
          gbc_lbl_Parameter2.
fill = GridBagConstraints.HORIZONTAL;
          gbc_lbl_Parameter2.
weightx = 3;
          gbc_lbl_Parameter2.
anchor = GridBagConstraints.LINE_START;
          gbc_lbl_Parameter2.
insets = new Insets(3,3,3,3);
/* Add the element to the panel; element-position is controlled by GridBagConstraints. */
          get_pnl_Entry().add(get_lbl_Parameter2(),
                              gbc_lbl_Parameter2);
/*
 * Define GridBagConstraints for the element to be added. */
          GridBagConstraints gbc_lbl_Parameter3 = new GridBagConstraints();
          gbc_lbl_Parameter3.
gridx = 3;
          gbc_lbl_Parameter3.
gridy = 0;
          gbc_lbl_Parameter3.
fill = GridBagConstraints.HORIZONTAL;
          gbc_lbl_Parameter3.
weightx = 3;
          gbc_lbl_Parameter3.
anchor = GridBagConstraints.LINE_START;
          gbc_lbl_Parameter3.
insets = new Insets(3,3,3,3);
/* Add the element to the panel; element-position is controlled by GridBagConstraints. */
          get_pnl_Entry().add(get_lbl_Parameter3(),
                              gbc_lbl_Parameter3);
/*
 * Define GridBagConstraints for the element to be added. */
          GridBagConstraints gbc_btn_Continue = new GridBagConstraints();
          gbc_btn_Continue.
gridx = 4;
          gbc_btn_Continue.
gridy = 0;
          gbc_btn_Continue.
fill = GridBagConstraints.BOTH;
          gbc_btn_Continue.
weightx = 1;
          gbc_btn_Continue.
weighty = 1;
          gbc_btn_Continue.
gridheight = 2;
          gbc_btn_Continue.
anchor = GridBagConstraints.CENTER;
          gbc_btn_Continue.
insets = new Insets(3,3,3,3);
/* Add the element to the panel; element-position is controlled by GridBagConstraints. */
          get_pnl_Entry().add(get_btn_Continue(),
                              gbc_btn_Continue);
/*
 * Define GridBagConstraints for the element to be added. */
          GridBagConstraints gbc_txt_Code = new GridBagConstraints();
          gbc_txt_Code.
gridx = 0;
          gbc_txt_Code.
gridy = 1;
          gbc_txt_Code.
fill = GridBagConstraints.HORIZONTAL;
          gbc_txt_Code.
weightx = 1;
          gbc_txt_Code.
anchor = GridBagConstraints.LINE_START;
          gbc_txt_Code.
insets = new Insets(3,3,3,3);
/* Add the element to the panel; element-position is controlled by GridBagConstraints. */
          get_pnl_Entry().add(get_txt_Code(),
                              gbc_txt_Code);
/*
 * Define GridBagConstraints for the element to be added. */
          GridBagConstraints gbc_txt_Parameter1 = new GridBagConstraints();
          gbc_txt_Parameter1.
gridx = 1;
          gbc_txt_Parameter1.
gridy = 1;
          gbc_txt_Parameter1.
fill = GridBagConstraints.HORIZONTAL;
          gbc_txt_Parameter1.
weightx = 3;
          gbc_txt_Parameter1.
anchor = GridBagConstraints.LINE_START;
          gbc_txt_Parameter1.
insets = new Insets(3,3,3,3);
/* Add the element to the panel; element-position is controlled by GridBagConstraints. */
          get_pnl_Entry().add(get_txt_Parameter1(),
                              gbc_txt_Parameter1);
/*
 * Define GridBagConstraints for the element to be added. */
          GridBagConstraints gbc_txt_Parameter2 = new GridBagConstraints();
          gbc_txt_Parameter2.
gridx = 2;
          gbc_txt_Parameter2.
gridy = 1;
          gbc_txt_Parameter2.
fill = GridBagConstraints.HORIZONTAL;
          gbc_txt_Parameter2.
weightx = 3;
          gbc_txt_Parameter2.
anchor = GridBagConstraints.LINE_START;
          gbc_txt_Parameter2.
insets = new Insets(3,3,3,3);
/* Add the element to the panel; element-position is controlled by GridBagConstraints. */
          get_pnl_Entry().add(get_txt_Parameter2(),
                              gbc_txt_Parameter2);
/*
 * Define GridBagConstraints for the element to be added. */
          GridBagConstraints gbc_txt_Parameter3 = new GridBagConstraints();
          gbc_txt_Parameter3.
gridx = 3;
          gbc_txt_Parameter3.
gridy = 1;
          gbc_txt_Parameter3.
fill = GridBagConstraints.HORIZONTAL;
          gbc_txt_Parameter3.
weightx = 3;
          gbc_txt_Parameter3.
anchor = GridBagConstraints.LINE_START;
          gbc_txt_Parameter3.
insets = new Insets(3,3,3,3);
/* Add the element to the panel; element-position is controlled by GridBagConstraints. */
          get_pnl_Entry().add(get_txt_Parameter3(),
                              gbc_txt_Parameter3);
        }
        
catch (Throwable Exc) {
          System.
out.println("Error while building pnl_Entry in class JSBS_StartFrame");
          Exc.printStackTrace();
        }
      }
      return pnl_Entry;
    }
/*
 * ******************** */
    protected JPanel get_pnl_Info() {
/* Auto-create the GUI-element if it does not already exist. */
      
if (pnl_Info == null) {
        try {
          pnl_Info
= new JPanel();
          pnl_Info
.setName("pnl_Info");
          pnl_Info
.setLayout(new GridBagLayout());
/*
 * Define GridBagConstraints for the element to be added. */
          GridBagConstraints gbc_lbl_InfoMessage = new GridBagConstraints();
          gbc_lbl_InfoMessage.
gridx = 0;
          gbc_lbl_InfoMessage.
gridy = 0;
          gbc_lbl_InfoMessage.
fill = GridBagConstraints.HORIZONTAL;
          gbc_lbl_InfoMessage.
weightx = 1;
          gbc_lbl_InfoMessage.
anchor = GridBagConstraints.LINE_START;
          gbc_lbl_InfoMessage.
insets = new Insets(3,3,3,3);
/* Add the element to the panel; element-position is controlled by GridBagConstraints. */
          get_pnl_Info().add(get_lbl_InfoMessage(), gbc_lbl_InfoMessage);
        }
        
catch (Throwable Exc) {
          System.
out.println("Error while building pnl_Info in class JSBS_StartFrame");
          Exc.printStackTrace();
        }
      }
      return pnl_Info;
    }
/*
 * ******************** */
    public JButton get_btn_Help() {
/* de: Automatisches Erstellen des GUI-Elements wenn es nicht bereits existiert.
 * en: Auto-create the GUI-element if it does not already exist. */
      
if (btn_Help == null) {
        try {
          btn_Help
= new JButton();
          btn_Help
.setName("btn_Help");
          btn_Help
.setActionCommand("btn_Help");
          btn_Help
.addActionListener(this);
        }
        
catch (Throwable Exc) {
          System.
out.println("Error while building btn_Help in class JSBS_StartFrame");
          Exc.printStackTrace();
        }
      }
      return btn_Help;
    }
/*
 * ******************** */
    public JLabel get_lbl_ApplicationTitle1() {
/* Auto-create the GUI-element if it does not already exist. */
      
if (lbl_ApplicationTitle1 == null) {
        try {
          lbl_ApplicationTitle1
= new JLabel();
          lbl_ApplicationTitle1
.setName("lbl_ApplicationTitle1");
          lbl_ApplicationTitle1
.setText("lbl_ApplicationTitle1");
        }
        
catch (Throwable Exc) {
          System.
out.println("Error while building lbl_ApplicationTitle1 in class JSBS_StartFrame");
          Exc.printStackTrace();
        }
      }
      return lbl_ApplicationTitle1;
    }
/*
 * ******************** */
    public JLabel get_lbl_ApplicationTitle2() {
/* Auto-create the GUI-element if it does not already exist. */
      
if (lbl_ApplicationTitle2 == null) {
        try {
          lbl_ApplicationTitle2
= new JLabel();
          lbl_ApplicationTitle2
.setName("lbl_ApplicationTitle2");
          lbl_ApplicationTitle2
.setText("lbl_ApplicationTitle2");
        }
        
catch (Throwable Exc) {
          System.
out.println("Error while building lbl_ApplicationTitle2 in class JSBS_StartFrame");
          Exc.printStackTrace();
        }
      }
      return lbl_ApplicationTitle2;
    }
/*
 * ******************** */
    public JLabel get_lbl_CurrencySelection() {
/* Auto-create the GUI-element if it does not already exist. */
      
if (lbl_CurrencySelection == null) {
        try {
          lbl_CurrencySelection
= new JLabel();
          lbl_CurrencySelection
.setName("lbl_CurrencySelection");
          lbl_CurrencySelection
.setText("lbl_CurrencySelection");
        }
        
catch (Throwable Exc) {
          System.
out.println("Error while building lbl_CurrencySelection in class JSBS_StartFrame");
          Exc.printStackTrace();
        }
      }
      return lbl_CurrencySelection;
    }
/*
 * ******************** */
    public JComboBox get_combo_CurrencySelection() {
/* Auto-create the GUI-element if it does not already exist. */
      
if (combo_CurrencySelection == null) {
        try {
          combo_CurrencySelection
= new JComboBox();
          combo_CurrencySelection
.setName("combo_CurrencySelection");
        }
        
catch (Throwable Exc) {
          System.
out.println("Error while building combo_CurrencySelection in class JSBS_StartFrame");
          Exc.printStackTrace();
        }
      }
      return combo_CurrencySelection;
    }
/*
 * ******************** */
    public JLabel get_lbl_HeadDate() {
/* de: Automatisches Erstellen des GUI-Elements wenn es nicht bereits existiert.
 *
en: Auto-create the GUI-element if it does not already exist. */
      
if (lbl_HeadDate == null) {
        try {
          lbl_HeadDate
= new JLabel();
          lbl_HeadDate
.setName("lbl_HeadDate");
/* de:
 * Umwandeln des Arbeitsdatum aus den Universal-Parameter von der (Java-)Klasse 'Calendar'

 * in die (Java-)Klasse 'Date', die für die weitere Verarbeitung verwendet werden kann.

 *
en:
 *
Convert the Working-Date from the Universal-Parameters from (Java-)class 'Calendar' to
 * (Java-)class 'Date' which can be used for further processing. */

          java.util.Date date =
              new java.util.Date(structJSBS_UniversalParameters.calWorkDate.getTimeInMillis());
/* de: UK-Format als Standard für das angezeigte Datum verwenden.
 *
en: Set the UK-format as default for the displayed Date. */
          DateFormat df = DateFormat.getDateInstance(DateFormat.LONG, Locale.ENGLISH); 
/* de: Wenn eine andere Sprache gewählt wurde dann wird eine andere 'Locale' gesetzt.
 * en:
If another language was chosen, set another Locale. */
          if (structJSBS_UniversalParameters.strLanguageCode.indexOf("de") >= 0)
         
    df = DateFormat.getDateInstance(DateFormat.LONG, Locale.GERMAN);
          if (structJSBS_UniversalParameters.strLanguageCode.indexOf("fr") >= 0)
         
    df = DateFormat.getDateInstance(DateFormat.LONG, Locale.FRENCH);
          lbl_HeadDate.setText(df.format(date));
          lbl_HeadDate
.setHorizontalAlignment(SwingConstants.TRAILING);
        }
        catch (Throwable Exc) {
          System.
out.println("Error while building lbl_HeadDate in class JSBS_StartFrame");
          Exc.printStackTrace();
        }
      }
      return lbl_HeadDate;
    }
/*
 * ******************** */
    public JLabel get_lbl_HeadUser() {
/* de: Automatisches Erstellen des GUI-Elements wenn es nicht bereits existiert.
 *
en: Auto-create the GUI-element if it does not already exist. */
      
if (lbl_HeadUser == null) {
        try {
          lbl_HeadUser
= new JLabel();
          lbl_HeadUser
.setName("lbl_HeadUser");
/* de: Angemeldeten Anwender im Textfeld anzeigen.
 * en:
Set the registered User to the Text-Field. */
          lbl_HeadUser.setText(structJSBS_UniversalParameters.strUserName);
          lbl_HeadUser
.setHorizontalAlignment(SwingConstants.TRAILING);
        }
        catch (Throwable Exc) {
          System.
out.println("Error while building lbl_HeadUser in class JSBS_StartFrame");
          Exc.printStackTrace();
        }
      }
      return lbl_HeadUser;
    }
/*
 * ******************** */
    public JButton get_btn_ConnectToJAS() {
/* de: Automatisches Erstellen des GUI-Elements wenn es nicht bereits existiert.
 * en: Auto-create the GUI-element if it does not already exist. */
      
if (btn_ConnectToJAS == null) {
        try {
          btn_ConnectToJAS
= new JButton();
          btn_ConnectToJAS
.setName("btn_ConnectToJAS");
          btn_ConnectToJAS
.setText("btn_ConnectToJAS");
          btn_ConnectToJAS
.setActionCommand("btn_ConnectToJAS");
          btn_ConnectToJAS
.addActionListener(this);
        }
        
catch (Throwable Exc) {
          System.
out.println("Error while building btn_ConnectToJAS in class JSBS_StartFrame");
          Exc.printStackTrace();
        }
      }
      return btn_ConnectToJAS;
    }
/*
 * ******************** */
    public JLabel get_lbl_SelectableTasks() {
/* Auto-create the GUI-element if it does not already exist. */
      
if (lbl_SelectableTasks == null) {
        try {
          lbl_SelectableTasks
= new JLabel();
          lbl_SelectableTasks
.setName("lbl_SelectableTasks");
          lbl_SelectableTasks
.setText("lbl_SelectableTasks");
        }
        catch (Throwable Exc) {
          System.
out.println("Error while building lbl_SelectableTasks in class JSBS_StartFrame");
          Exc.printStackTrace();
        }
      }
      return lbl_SelectableTasks;
    }
/*
 * ******************** */
    public JTree get_tree_SelectableTasks() {
/* Auto-create the GUI-element if it does not already exist. */
      
if (tree_SelectableTasks == null) {
        try {
          tree_SelectableTasks
= new JTree();
          tree_SelectableTasks
.setName("tree_SelectableTasks");
        }
        catch (Throwable Exc) {
          System.
out.println("Error while building tree_SelectableTasks in class JSBS_StartFrame");
          Exc.printStackTrace();
        }
      }
      return tree_SelectableTasks;
    }
/*
 * ******************** */
    public JScrollPane get_pnl_SelectableTasks() {
/* Auto-create the GUI-element if it does not already exist. */
      
if (pnl_SelectableTasks == null) {
        try {
          pnl_SelectableTasks
= new JScrollPane();
          pnl_SelectableTasks
.setName("pnl_SelectableTasks");
          pnl_SelectableTasks
.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED);
          pnl_SelectableTasks
.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);
          pnl_SelectableTasks
.setViewportView(get_tree_SelectableTasks());
        }
        catch (Throwable Exc) {
          System.
out.println("Error while building pnl_SelectableTasks in class JSBS_StartFrame");
          Exc.printStackTrace();
        }
      }
      return pnl_SelectableTasks;
    }
/*
 * ******************** */
    public JLabel get_lbl_OpenTasks() {
/* Auto-create the GUI-element if it does not already exist. */
      
if (lbl_OpenTasks == null) {
        try {
          lbl_OpenTasks
= new JLabel();
          lbl_OpenTasks
.setName("lbl_OpenTasks");
          lbl_OpenTasks
.setText("lbl_OpenTasks");
        }
        catch (Throwable Exc) {
          System.
out.println("Error while building lbl_OpenTasks in class JSBS_StartFrame");
          Exc.printStackTrace();
        }
      }
      return lbl_OpenTasks;
    }
/*
 * ******************** */
    public JScrollPane get_pnl_OpenTasks() {
/* Auto-create the GUI-element if it does not already exist. */
      
if (pnl_OpenTasks == null) {
        try {
          pnl_OpenTasks
= new JScrollPane();
          pnl_OpenTasks
.setName("pnl_OpenTasks");
          pnl_OpenTasks
.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED);
          pnl_OpenTasks
.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);
          pnl_OpenTasks
.setViewportView(get_pnl_OpenTasksTable());
        }
        catch (Throwable Exc) {
          System.
out.println("Error while building pnl_OpenTasks in class JSBS_StartFrame");
          Exc.printStackTrace();
        }
      }
      return pnl_OpenTasks;
    }
/*
 * ******************** */
    public JTable get_pnl_OpenTasksTable() {
/* Auto-create the GUI-element if it does not already exist. */
      
if (pnl_OpenTasksTable == null) {
        try {
          pnl_OpenTasksTable
= new JTable();
          pnl_OpenTasksTable
.setName("pnl_OpenTasksTable");
          pnl_OpenTasksTable
.setColumnModel(get_pnl_OpenTasksTableDefaultTableColumnModel());
        }
        
catch (Throwable Exc) {
          System.
out.println("Error while building pnl_OpenTasksTable in class JSBS_StartFrame");
          Exc.printStackTrace();
        }
      }
      return pnl_OpenTasksTable;
    }
/*
 * ******************** */
    public DefaultTableColumnModel get_pnl_OpenTasksTableDefaultTableColumnModel() {
/* Auto-create the GUI-element if it does not already exist. */
      
if (pnl_OpenTasksTableDefaultTableColumnModel == null) {
        try {
/* Construct a ListSelectionModel which is needed for the ColumnModel
 * and allow the column-width to be variable. */
          
DefaultListSelectionModel locDefaultListSelectionModel = new DefaultListSelectionModel();
          locDefaultListSelectionModel.setValueIsAdjusting(
true);
/* */
          pnl_OpenTasksTableDefaultTableColumnModel = new DefaultTableColumnModel();
          pnl_OpenTasksTableDefaultTableColumnModel
.setSelectionModel(locDefaultListSelectionModel);
        }
        catch (Throwable Exc) {
          System.
out.println("Error while building pnl_ OpenTasksTableDefaultTableColumnModel in class JSBS_StartFrame");
          Exc.printStackTrace();
        }
      }
      return pnl_OpenTasksTableDefaultTableColumnModel;
    }
/*
 * ******************** */
    public JLabel get_lbl_Code() {
/* Auto-create the GUI-element if it does not already exist. */
      
if (lbl_Code == null) {
        try {
          lbl_Code
= new JLabel();
          lbl_Code
.setName("lbl_Code");
          lbl_Code
.setText("lbl_Code");
        }
        catch (Throwable Exc) {
          System.
out.println("Error while building lbl_Code in class JSBS_StartFrame");
          Exc.printStackTrace();
        }
      }
      return lbl_Code;
    }
/*
 * ******************** */
    public JTextField get_txt_Code() {
/* Auto-create the GUI-element if it does not already exist. */
      
if (txt_Code == null) {
        try {
          txt_Code
= new JTextField();
          txt_Code
.setName("txt_Code");
        }
        catch (Throwable Exc) {
          System.
out.println("Error while building txt_Code in class JSBS_StartFrame");
          Exc.printStackTrace();
        }
      }
      return txt_Code;
    }
/*
 * ******************** */
    public JLabel get_lbl_Parameter1() {
/* Auto-create the GUI-element if it does not already exist. */
      
if (lbl_Parameter1 == null) {
        try {
          lbl_Parameter1
= new JLabel();
          lbl_Parameter1
.setName("lbl_Parameter1");
        }
        catch (Throwable Exc) {
          System.
out.println("Error while building lbl_Parameter1 in class JSBS_StartFrame");
          Exc.printStackTrace();
        }
      }
      return lbl_Parameter1;
    }
/*
 * ******************** */
    public JTextField get_txt_Parameter1() {
/* Auto-create the GUI-element if it does not already exist. */
      
if (txt_Parameter1 == null) {
        try {
          txt_Parameter1
= new JTextField();
          txt_Parameter1
.setName("txt_Parameter1");
        }
        catch (Throwable Exc) {
          System.
out.println("Error while building txt_Parameter1 in class JSBS_StartFrame");
          Exc.printStackTrace();
        }
      }
      return txt_Parameter1;
    }
/*
 * ******************** */
    public JLabel get_lbl_Parameter2() {
/* Auto-create the GUI-element if it does not already exist. */
      
if (lbl_Parameter2 == null) {
        try {
          lbl_Parameter2
= new JLabel();
          lbl_Parameter2
.setName("lbl_Parameter2");
        }
        catch (Throwable Exc) {
          System.
out.println("Error while building lbl_Parameter2 in class JSBS_StartFrame");
          Exc.printStackTrace();
        }
      }
      return lbl_Parameter2;
    }
/*
 * ******************** */
    public JTextField get_txt_Parameter2() {
/* Auto-create the GUI-element if it does not already exist. */
      
if (txt_Parameter2 == null) {
        try {
          txt_Parameter2
= new JTextField();
          txt_Parameter2
.setName("txt_Parameter2");
        }
        catch (Throwable Exc) {
          System.
out.println("Error while building txt_Parameter2 in class JSBS_StartFrame");
          Exc.printStackTrace();
        }
      }
      return txt_Parameter2;
    }
/*
 * ******************** */
    public JLabel get_lbl_Parameter3() {
/* Auto-create the GUI-element if it does not already exist. */
      
if (lbl_Parameter3 == null) {
        try {
          lbl_Parameter3
= new JLabel();
          lbl_Parameter3
.setName("lbl_Parameter3");
        }
        catch (Throwable Exc) {
          System.
out.println("Error while building lbl_Parameter3 in class JSBS_StartFrame");
          Exc.printStackTrace();
        }
      }
      return lbl_Parameter3;
    }
/*
 * ******************** */
    public JTextField get_txt_Parameter3() {
/* Auto-create the GUI-element if it does not already exist. */
      
if (txt_Parameter3 == null) {
        try {
          txt_Parameter3
= new JTextField();
          txt_Parameter3
.setName("txt_Parameter3");
        }
        catch (Throwable Exc) {
          System.
out.println("Error while building txt_Parameter3 in class JSBS_StartFrame");
          Exc.printStackTrace();
        }
      }
      return txt_Parameter3;
    }
/*
 * ******************** */
    public JButton get_btn_Continue() {
/* de: Automatisches Erstellen des GUI-Elements wenn es nicht bereits existiert.
 * en: Auto-create the GUI-element if it does not already exist. */
      
if (btn_Continue == null) {
        try {
          btn_Continue
= new JButton();
          btn_Continue
.setName("btn_Continue");
          btn_Continue
.setText("btn_Continue");
          btn_Continue
.setActionCommand("btn_Continue");
          btn_Continue
.addActionListener(this);
        }
        catch (Throwable Exc) {
          System.
out.println("Error while building btn_Continue in class JSBS_StartFrame");
          Exc.printStackTrace();
        }
      }
      return btn_Continue;
    }
/*
 * ******************** */
    public JLabel get_lbl_InfoMessage() {
/* Auto-create the GUI-element if it does not already exist. */
      
if (lbl_InfoMessage == null) {
        try {
          lbl_InfoMessage
= new JLabel();
          lbl_InfoMessage
.setName("lbl_InfoMessage");
          lbl_InfoMessage
.setMinimumSize(new Dimension(10,12));
        }
        catch (Throwable Exc) {
          System.
out.println("Error while building lbl_InfoMessage in class JSBS_StartFrame");
          Exc.printStackTrace();
        }
      }
      return lbl_InfoMessage;
    }
/*
 * -------------------------------
 * de:
 * METHODE die zusammen mit der interface ActionHandler erforderlich ist.
 * Wenn diese Methode in einer abgeleiteten Klasse überschrieben wird
 * dann muß der Code in dieser Methode (dieser Basis-Klasse) in der überschreibenden
 * Methode so wie in diesem Beispiel aufgerufen werden:
 * super.actionPerformed(e);
 * en:
 * METHOD that is requiered together with the interface ActionHandler.
 * If this method is overwritten in the derived class,
 * the code of this method in this base class has to be called in the overwriting method
 * like this example:
 * super.actionPerformed(e);. */
    public void actionPerformed(ActionEvent e) {
/* de:
 * Prüfen ob eine allgemein gültige Schaltfläche angeklickt wurde und ausführen
 * der Verarbeitung die der Schaltfläche zugeordnet ist.
 * en:
 * Verify if a General Button was clicked and perform the task associated to it. */
      
String strActionCommand = e.getActionCommand();
/* */
      if (strActionCommand.equals("btn_Continue")) {
/* de:
 * Methode, die prüft ob ein bereits aktives Task-Frame (Fenster für die Bearbeitung
 * eines Geschäftsfalles) gewählt wurde und diesem den Focus 'gibt'.
 * Wenn eine ungültige Nummer eingegeben wurde passiert nichts.
 * en:
 * Call the method that checks if an alredy Opened Task-Frame was selected and gives
 * it the focus. If not a valid number is entered – nothing happens. */
        if (JSBS_OpenedTaskStructure.focusOpenedTask(vecOpenTasksList, get_txt_Code()))
/* de:
 * Falls ein Task-Frame den Focus bekommen hat dann wird dieses Start-Frame
 * hinter andere Fenster gesetzt.
 * en:
 * In case that a Task-Frame was focussed bring this (Start-Frame)
 * to the back behind other windows. */
            this.toBack();
      }
/* */
      
if (strActionCommand.equals("btn_Help")) {
/* de: Die Anzeige des Hilfe-Dokuments wurde angefordert.
 * en: Display of the document with Help was requested. */

/* de:
 * Namen der Datei mit dem Hilfe-Dokument aus der XML-Struktur
 * der Datei 'DisplayStrings.xml' holen.
 * en:
 * Get the name of the file with the Help-document out of the XML-Struktur
 * of file 'DisplayStrings.xml'. */

        String strHelpFileName =
          structJSBS_XML_DisplayStrings.getFrameHelpFileName(this);
        if (strHelpFileName != null) {
/* de: Erste Prüfung ob ein Datei-Name gefunden wurde.
 * en: First verification if a file-name was found. */
          if (strHelpFileName.length() > 0) {
/* de: Zweite Prüfung ob ein Datei-Name gefunden wurde.
 * en: Second verification if a file-name was found. */

/* de: Erweitern des Datei-Namens auf gesamte Verzeichnis-Struktur.
 * en: Expand the file-name to the complete directory-structure. */

            strHelpFileName =
              structJSBS_UniversalParameters.strHelpElementsDirectoryName + strHelpFileName;
/* de: Anzeigen des Hilfe-Dokumentes.
 * en: Display the Help-document. */

            try {Desktop.getDesktop().browse(new URI("file:///" + strHelpFileName));}
/* de: Fehler beim Anzeigen des Hilfe-Dokumentes - kein Grund für eine Fehlerbehandlung.
 * en: Error when displaying the help-document - no reason for error-handling. */

            catch (Exception wwwExc) {wwwExc.printStackTrace();}
          }
        }
      }
/* */
      if (strActionCommand.equals("btn_ConnectToJAS")) {
/* de:
 * Merker für eine existierende Verbindung zum JAS (Java Application Server) setzen weil
 * sonst die anschließend aufgerufene Methode zum Testen der Verbindung zum JAS sofort wieder
 * beendet werden würde ohne überhaupt die Verbindung zu prüfen.
 * en:
 * Set the flag signalling an existing connection to the JAS (Java Application Server) as
 * otherwise the method to test the connection to the JAS (called thereafter) would terminate

 * without testing the connection anyway
. */
        bolJASConnectionEstablished = true;
        testJASConnection();
      }
    }
/*
 * -------------------------------
 * de:
 * METHODE die zusammen mit der Interface ItemListener implementiert werden muss.
 * Diese Methode wird aufgerufen, wenn sich der Status eine Combobox (Auswahl einer 
 * anderen Zeile), einer Checkbox oder eines Radiobuttons ändert.
 * en:
 * METHOD that is requiered together with the interface ItemListener.
 * This method is called, if the status of a Combobox (other line selected), a
 * checkbox or a Radiobutton is changed. */
    public void itemStateChanged(ItemEvent e) {
/* de:
 * Die Verarbeitung erfolgt in der Klasse JSBS_StartFrame__DocumentListener;
 * diese Design-Entscheidung wurde aus pragmatischen Gründen getroffen
weil
 * dort auch die Verarbeitung von Änderungen in Eingabefeldern für Text erfolgt.
 * en:
 * The processing happens within the class JSBS_StartFrame__DocumentListener;
 * This decision was made for pragmatic reasons as the processing of changes in
 * input-fields with text is made there, too. */
      structJSBS_StartFrame__DocumentListener.itemStateChanged(e);
    }
/*
 * -------------------------------
 * de:
 * METHODEN die zusammen mit der Interface KeyListener implementiert werden müssen.
 * Wenn eine Methode dieser Basis-Klasse Code enthält und diese Methode in einer
 * abgeleiteten Klasse überschrieben werden muss, dann muss die Methode dieser
 * Basis-Klasse auf folgende Weise aufgerufen werden:
 * super.keyPressed(e);.
 * en:
 * METHODS that are requiered together with the interface KeyListener.
 * If a method of this base-class contains code and has to be overwritten
 * in the derived class, the method in this base class has to be called in the

 * overwriting method like this example:
 * super.keyPressed(e);. */
    public void keyPressed(KeyEvent e) {
/* de:
 * Diese Methode wird verwendet um zu prüfen ob eine Funktionstaste (der Tastatur)
 * betätigt wurde.
 * en:
 * This method is used to check if a Function-Key (of the keyboard) was pressed. */
/* de:
 * Zeichenkette die den internen Tastatur-Code enthalten wird. Das ist jener Code
 * der innerhalb des JavaScout Fat-Client-Framework (JS-FCF) verwendet wird.
 * en:
 * String that will contain the Internal Key-Code. That ist the code that is
 * used within the JavaScout Fat-Client-Framework (JS-FCF). */
      String strInternalKeyCode = "";
/* de: Flag ob eine Funktionstaste (F1 bis F12) betätigt wurde.
 * en: Flag to indicate if a Function-Key (F1 to F12) was pressed. */
      boolean bolFunctionKeyPressed = false;
/* de: Den Java-internen Tastatur-Code aus dem KeyEvent ermitteln.
 * en: Derive the Java-internal key-code from the KeyEvent. */
      int intKeyCode = e.getKeyCode();
/* de:
 * Untersuchen des Key-Events ob die 'Enter'- (Eingabe-) Taste betätigt wurde.
 * Diese simuliert einen Mausklick auf eine definierte Schaltfläche (JButton).
 * en:
 * Inspect the Key-Event if the 'Enter'-Key was pressed. This key simulates
 * a mouse-click to the defined 'JButton'. */
      if (intKeyCode == KeyEvent.VK_ENTER) {
/* de:
 * 'Eingabe'- (Enter-) Taste gedrückt; prüfen ob dieser eine Schaltfläche
 * (JButton) zugeordnet ist.
 * en: Enter-key was pressed; verify if a Button is attached to the Enter-key. */

      
if (btnEnterTriggeredButton != null) {
/* de:
 * Schaltfläche (JButton) ist zugeordnet; Prüfen ob er 'enabled' ist und dann
 * den 'Mausklick' simulieren.
 * en: JButton is defined, see if the Button is enabled and simulate the 'click'. */

        
if (btnEnterTriggeredButton.isEnabled()) {
        
btnEnterTriggeredButton.doClick();
         e.consume();
        }

/* de: Schaltfläche nicht 'enabled'; einen 'Beep' zur Warnung ausgeben.
 * en: Button not enabled; produce a beep to warn the user. */
          else getToolkit().beep();
/* de: Aufgabe der Methode erfüllt; Methode beenden.
 * en: Mission of this method completed; end the method. */
          return;
        }
      }

/* de:
 * Untersuchen des Key-Events ob eine 'Modifier'-Taste betätigt wurde.
 * Nur so ist eine Prüfung unabhängig von Betriebssystem und gewählter
 * Sprache möglich.
 * en:
 * Inspect the Key-Event if a 'Modifier'-Key was pressed. This code is the only
 * way to check independent from operating system and chosen language. */
      if (intKeyCode == KeyEvent.VK_ALT) {
        bolAltKeyModifier true;
        e.consume();
      }

      if (intKeyCode == KeyEvent.VK_CONTROL) {
        bolCtrlKeyModifier true;
        e.consume();
      }

      if (intKeyCode == KeyEvent.VK_SHIFT) {
        bolShiftKeyModifier true;
        e.consume();
      }

/* de:
 * Wenn 'Modifier'-Tasten gedrückt sind dann den internen Code für diese jetzt in
 * die Zeichenkette für den Internen Key-Code einfügen.
 * en:
 * If 'Modifier'-keys are pressed then insert the internal code for them
 * now to the string for the Internal Key-Code. */
      if (bolAltKeyModifier) strInternalKeyCode += "Alt-";
      
if (bolCtrlKeyModifier) strInternalKeyCode += "Ctrl-";
      
if (bolShiftKeyModifier) strInternalKeyCode += "Shift-";
/* de:
 * Untersuchen des Key-Events ob eine Funktionstaste betätigt wurde.
 * Nur so ist eine Prüfung unabhängig von Betriebssystem und gewählter
 * Sprache möglich.
 * en:
 * Inspect the Key-Event if a Function-Key was pressed. This code is the only
 * way to check independent from operating system and chosen language. */
      if (intKeyCode == KeyEvent.VK_F1) {
        strInternalKeyCode += 
"F1";
        bolFunctionKeyPressed true;
        e.consume();
      }
      
if (intKeyCode == KeyEvent.VK_F2) {
        strInternalKeyCode += 
"F2";
        bolFunctionKeyPressed true;
        e.consume();
      }
      
if (intKeyCode == KeyEvent.VK_F3) {
        strInternalKeyCode += 
"F3";
        bolFunctionKeyPressed true;
        e.consume();
      }
      
if (intKeyCode == KeyEvent.VK_F4) {
        strInternalKeyCode += 
"F4";
        bolFunctionKeyPressed true;
        e.consume();
      }
      
if (intKeyCode == KeyEvent.VK_F5) {
        strInternalKeyCode += 
"F5";
        bolFunctionKeyPressed true;
        e.consume();
      }
      
if (intKeyCode == KeyEvent.VK_F6) {
        strInternalKeyCode += 
"F6";
        bolFunctionKeyPressed true;
        e.consume();
      }
      
if (intKeyCode == KeyEvent.VK_F7) {
        strInternalKeyCode += 
"F7";
        bolFunctionKeyPressed true;
        e.consume();
      }
      
if (intKeyCode == KeyEvent.VK_F8) {
        strInternalKeyCode += 
"F8";
        bolFunctionKeyPressed true;
        e.consume();
      }
      
if (intKeyCode == KeyEvent.VK_F9) {
        strInternalKeyCode += 
"F9";
        bolFunctionKeyPressed true;
        e.consume();
      }
      
if (intKeyCode == KeyEvent.VK_F10) {
        strInternalKeyCode += 
"F10";
        bolFunctionKeyPressed true;
        e.consume();
      }
      
if (intKeyCode == KeyEvent.VK_F11) {
        strInternalKeyCode += 
"F11";
        bolFunctionKeyPressed true;
        e.consume();
      }
      
if (intKeyCode == KeyEvent.VK_F12) {
        strInternalKeyCode += 
"F12";
        bolFunctionKeyPressed true;
        e.consume();
      }
/* de:
 * Wenn kein definierter 'Virtual-Key' für eine Funktionstaste gedrückt wurde

 * dann wird der Internal Key-Code mit der in Java festgelegten Bezeichnung
 * für die Taste gebildet. Diese Bezeichnung der Taste kann vom Betriebssystem
 * oder der gewählten Sprache abhängen.
 * en:
 * If no defined 'Virtual-Key' for a Function-Key was pressed then the
 * Internal Key-Code is build with the Java-defined Text of the key.
 * This text might depend on the operating system or chosen language. */
      if (! bolFunctionKeyPressed)
              strInternalKeyCode += KeyEvent.getKeyText(intKeyCode);
/* de:
 * Untersuchen der XML-Struktur ob ein ButtonName dem Internal Key-Code
 * zugeordnet ist.
 * en:
 * Inspect the XML-structure if a ButtonName is associated with the
 * Internal Key-Code. */
      String strButtonName = structJSBS_XML_FunctionKeys.getButtonName(
                                  this.getClass().getName(), strInternalKeyCode);
/* de:
 * Wenn ein 'ButtonName' gefunden wurde dann wird die Methode aufgerufen,
 * die unter den GUI-Elementen den 'JButton' mit dem passenden Namen sucht 
 * und einen 'Mausklick' auf diesen 'JButton' simuliert.
 * en:
 * If a 'ButtonName' was found then the method is called to find the 'JButton'
 * with the fitting ButtonName amongst the GUI-Elements and simulate a 'mouse-click'
 * on that 'JButton'. */
       if (strButtonName.length() > 0) {
        JSBS_GUIServices.clickButton(this.getContentPane(), strButtonName);
/* de:
 * 'Consume' (Verbrauchen) des KeyEvent damit er nichts anderes auslöst.
 * en:
 * 'Consume' the KeyEvent so it can not trigger something esle. */
        e.consume();
      }
    }
    public void keyReleased(KeyEvent e) {
/* de:
 * Diese Methode setzt die Markierungen für die Midifier-Tasten (Alt, Steuerung,
 * Umschalten) zurück.
 * Zuerst wird der numerische Tastatur-Code ermittelt und dieser wird dann mit
 * dem 'Virtual-Key' verglichen. 
 * Der Vergleich mit dem 'Virtual Key' liefert ein eindeutiges Ergebnis das nicht
 * vom verwendeten Betriebssystem oder der eingestellten Sprache abhängt.
 * en:
 * This method is used to reset the flags for Modifier-keys (Alt, Control, Shift).
 * First derive the numeric key-code and then compare it with the 'Virtual-Key'.
 * The comparison with the 'Virtual-Key' gives a unique result independent from
 * the underlying operating-system or the chosen language. */
      int intKeyCode = e.getKeyCode();
/* de:
 * Untersuchen ob ein 'Modifier-Key' losgelassen wurde.
 * Wenn es ein 'Midifier-Key' war dann das entsprechende 'Flag' zurücksetzen und
 * den KeyEvent als 'consumed' markieren.
 * en:
 * Inspect if a Modifier-key was released.
 * If it was a Modifier-Key, reset the flag and mark the KeyEvent as 'consumed'. */
      if (intKeyCode == KeyEvent.VK_ALT) {
        bolAltKeyModifier = false;
        e.consume();
      }
      if (intKeyCode == KeyEvent.VK_CONTROL) {
        bolCtrlKeyModifier = false;
        e.consume();
      }
      if (intKeyCode == KeyEvent.VK_SHIFT) {
        bolShiftKeyModifier = false;
        e.consume();
      }
    }
    public void keyTyped(KeyEvent e) {
    }
/*
 * -------------------------------
 * de:
 * Methoden die vom interface FocusListener verlangt werden.
 * Da diese Methoden Code enthalten, muss, wenn diese Methode auch in einer
 * abgeleiteten Klasse implementiert ist, diese Methode so wie im folgenden 
 * Beispiel aufgerufen werden:
 * super.focusGained(e);
 * en:
 * Methods that are requiered together with the interface FocusListener.
 * As these methods contain code, so if they are overwritten in the derived class,
 * the method in this base class has to be called in the overwriting method
 * like this example:
 * super.focusGained(e); */
    public void focusGained(FocusEvent e) {
/* de:
 * Prüfen, ob das Objekt, das den 'Focus' erhalten hat, vom Typ 'Container' ist.
 * In diesem Fall die Methode zum Ändern der 'Border'-Farbe aufrufen.
 * In der aufgerufenen Methode wird auch die Info-Message für das jeweilige Feld angezeigt.
 * en:
 * Verify if the Object that gained the 'Focus' is of Type 'Container.
 * In that case call the method to change the color of the 'Border'.
 * In the called methode the Info-Message for the field is set, too. */
      if (e.getSource() instanceof Container) 
          JSBS_GUIServices.setEntryFieldBorderFocussed((Container)e.getSource(), this);
/* de:
 * Spezieller Algorithmus zum Anzeigen der Info-Message für die Felder zur Parameter-Eingabe.
 * en:
 * Special algorithm to display the Info-Message for the field to enter parameters. */
      String strGUIElementName = ((Container) e.getSource()).getName();
/* de: Vorsichtsmassnahme falls der Focus auf einem GUI-Element ohne Namen liegt.
 * en: Precaution if the focus is at a GUI-element without a name. */
      if (strGUIElementName == nullreturn;
/* de:
 * Vergleichen ob der Focus auf einem Parameter-Feld liegt und wenn ja,
 * dann die entsprechende Info-Message aus der XML-Struktur holen und anzeigen.
 * Die Info-Message wird durch den vom Benutzer eingegebenen Auswahl-Code bestimmt.
 * en:
 * Compare if the focus is at a Parameter-field and if, read the fitting Info-Message
 * out of the XML-structure and display it.
 * The displayed Info-Message depends on the selection-code entered by the user. */
      if (strGUIElementName.compareTo("txt_Parameter1") == 0)
        get_lbl_InfoMessage().setText(
          structJSBS_XML_Tasks.getParameter1InfoMessage(get_txt_Code().getText()));
/* ***** */
      if (strGUIElementName.compareTo("txt_Parameter2") == 0)
        get_lbl_InfoMessage().setText(
          structJSBS_XML_Tasks.getParameter2InfoMessage(get_txt_Code().getText()));
/* ***** */
      if (strGUIElementName.compareTo("txt_Parameter3") == 0)
        get_lbl_InfoMessage().setText(
          structJSBS_XML_Tasks.getParameter3InfoMessage(get_txt_Code().getText()));
    }
/*   */
    public void focusLost(FocusEvent e) {
/* de:
 * Prüfen, ob das Objekt, das den 'Focus' erhalten hat, vom Typ 'Container' ist.
 * In diesem Fall die Methode zum Ändern der 'Border'-Farbe aufrufen.
 * en:
 * Verify if the Object that gained the 'Focus' is of Type 'Container.
 * In that case call the method to change the color of the 'Border'. */
      if (e.getSource() instanceof Container) 
          JSBS_GUIServices.setEntryFieldBorderUnfocussed(
            (Container)e.getSource(),
            structJSBS_UniversalParameters,
            structJSBS_EntryRules);
    }
/*
 * -------------------------------
 * Methods that are requiered together with the interface MouseListener.
 * If these methods contain code and are overwritten in the derived class,
 * the method in this base class has to be called in the overwriting method
 * like this example:
 * super.mouseClicked(e);. */
    public void mouseClicked(MouseEvent e) {
/* Inspect which GUI-element received the mouse-click. */
      if (e.getSource() == get_tree_SelectableTasks()) {
/* Detect which element of the JTree was clicked by using the mouse-location. */
        TreePath structSelectedTreePath =
            get_tree_SelectableTasks().getPathForLocation(e.getX(), e.getY());
        if (structSelectedTreePath != null) {
/* Mouse clicked onto a valid part of the JTree; derive the String displayed there. */
          String strSelection = structSelectedTreePath.getLastPathComponent().toString();
/* See if there is a dash ( - ) as delimiter. */
          int intDelimiterPosition = strSelection.indexOf(" - ");
          if (intDelimiterPosition > 0) {
/* Delimiter present; the String before it is the user-selectable-code. */
            get_txt_Code().setText(strSelection.substring(0, intDelimiterPosition).trim());
          }
          else {
/* No Delimiter present; only the user-selectable-code was displayed in the JTree. */
            get_txt_Code().setText(strSelection.trim());
          }
        }
      }
/* ********** */
      if (e.getSource() == get_pnl_OpenTasksTable()) {
/* User selected a dataset in the table with the Open-Tasks;
 * get the row-number. */
        int intSelectedRow = get_pnl_OpenTasksTable().getSelectedRow();
        if (intSelectedRow >= 0) {
/* Selected row is valid; increase the value (as the row-numbering for the user starts with 1)
 * and show the value in the GUI-element where the user enters the row-selection. */
          intSelectedRow++;
          get_txt_Code().setText(JSBS_Formatter.toFormattedString(intSelectedRow));
        }
      }
    }
    public void mouseEntered(MouseEvent e) {
    }
    public void mouseExited(MouseEvent e) {
    }
    public void mousePressed(MouseEvent e) {
    }
    public void mouseReleased(MouseEvent e) {
    }
/*
 * -------------------------------
 * de:
 * METHODEN die zusammen mit der interface WindowListener notwendig sind.
 * Wenn diese Methoden Code enthalten und in einer erbenden Klasse
 * überschrieben werden, dann muss die Methode dieser Basis-Klasse wie im
 * folgenden Beispiel aufgerufen werden:
 * super.windowActivated(e);.
 * en:
 * METHODS that are requiered together with the interface WindowListener.
 * If these methods contain code and are overwritten in the derived class,
 * the method in this base class has to be called in the overwriting method
 * like this example:
 * super.windowActivated(e);. */
    public void windowActivated(WindowEvent e) {
    }
    public void windowClosed(WindowEvent e) {
/* 
 * de: Klasse des Fensters vernichten und die gesamte Anwendung beenden.
 * en: Dispose the class of the window and exit the whole application. */
      this.dispose();
      System.exit(0);
    }
    public void windowClosing(WindowEvent e) {
/*
 * de:
 * Automatische Steuerung für das Schliessen ausschalten.
 * en:
 * Disable the automatic control for the closing-operation. */
      this.setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);
/*
 * de:
 * Alle Task-Frames (Fenster für die Abwicklung von Geschäftsfällen) schliessen.
 * en:
 * Close all Task-Frames (windows for handling business-transactions). */
      JSBS_OpenedTaskStructure.closeAllOpenTasks(vecOpenTasksList);
/*
 * de:
 * Prüfen ob alle Task-Frames geschlossen sind.
 * Bei einer Rückfrage an den Benutzer kann der Benutzer entschieden haben, dass 
 * einzelne Task-Frames nicht geschlossen werden.
 * en:
 * Verify if all Task-Frames are closed.
 * If a query to the user occured, the user might have decided that the single Task-Frame
 * is not closed.  */
      if (vecOpenTasksList.size() > 0) return;
/* de:
 * Methode zum Speichern von Größe und Position des JFrame auf der Datenbank aufrufen.
 * en:
 * Call the method that stores size and position of the JFrame to the database. */
      storeFramePosition();
/* 
 * de: Klasse des Fensters vernichten und die gesamte Anwendung beenden.
 * en: Dispose the class of the window and exit the whole application. */
      this.dispose();
      System.exit(0);
    }
    public void windowDeactivated(WindowEvent e) {
    }
    public void windowDeiconified(WindowEvent e) {
    }
    public void windowIconified(WindowEvent e) {
    }
    public void windowOpened(WindowEvent e) {
    }
/*
 * -------------------------------
 * de:
 * Methoden die zusammen mit der interface TableColumnModelListener erforderlich sind.
 * Wenn Methoden Code enthalten und von einer erbenden Klasse überschrieben werden,
 * dann muss die Methode in dieser Klasse wie in diesem Beispiel aufgerufen werden:
 * super.columnMarginChanged(e); .
 * en:
 * Methods that are requiered together with the interface TableColumnModelListener.
 * If these methods contain code and are overwritten in the derived class,
 * the method in this base class has to be called in the overwriting method
 * like this example:
 * super.columnMarginChanged(e); . */
    public void columnMarginChanged(ChangeEvent e) {
/*
 * de:
 * Prüfen, ob der Code in dieser Methode überhaupt ausgeführt werden soll.
 * Die Bedeutung von 'bolInhibitTableColumnChangeStore' ist bei der Definition
 * der Variable beschrieben.
 * en:
 * Verify if the Code within this methode should be performed.
 * The meaning of 'bolInhibitTableColumnChangeStore' is describe at the definition
 * of the variable. */
    if (bolInhibitColumnMarginChangeStore) return;
/* de:
 * Spaltenbreite einer Tabelle verändert.
 * In dieser Basisklasse werden die neuen Breiten der Spalten in der Tabelle
 * 'SelectionListTable' (in dieser Basisklasse definiert) abgefragt und auf die
 * Variable 'ColumnWidthArray01' des BO 'JSBS_FramePosition_BOC' (auch in dieser
 * Klasse definiert) übertragen. 
 * en:
 * Width of a column of any table (JTable) changed.
 * In this base-class the new widths of the columns in the table 'SelectionListTable'
 * (defined within this base-class) are queried and transferred to the variable
 * 'ColumnWidthArray' of the BO 'JSBS_FramePosition_BOC' (defined within this base-class,
 * too). */
      if (structJSBS_FramePosition_BOC == null) return;
      structJSBS_FramePosition_BOC.ColumnWidthArray01 =
          JSBS_GUIServices.getTableColumnWidth(get_pnl_OpenTasksTable());
    }
    public void columnSelectionChanged(ListSelectionEvent e) {
    }
    public void columnAdded(TableColumnModelEvent e) {
    }
    public void columnMoved(TableColumnModelEvent e) {
    }
    public void columnRemoved(TableColumnModelEvent e) {
    }
/*
 * -------------------------------
 * de:
 * METHODE, die KeyListener, FocusListener, ItemListener und DocumentListener zu einem 
 * GUI-Element und allen seinen untergeordneten Komponenten hinzufügt.
 * Wenn diese Methode von einen TaskFrame (das diese Klasse 'erbt' dann wird das ContentPane
 * des JFrame (üblicherweise das überschriebene 'MainPanel') als 'Container'-Parameter
 * übergeben.
 * Diese Methode untersucht jeden 'Conteiner' auf untergeordnete Komponenten und für jede
 * gefundene Komponente ruft sich diese Methode selbst auf und übergibt die Komponente als
 * Parameter.
 *
 * Der Parameter 'DocumentListener' erlaubt, diesen DocumentListener zu jeder JTextComponent
 * zuzuordnen.
 * Dann werden die Methoden 'changedUpdate', 'insertUpdate' oder 'removedUpdate' (in der
 * Klasse, die als DocumentListener-Parameter übergeben wird) aufgerufen wenn der Text einer
 * JTextComponent verändert wird.
 *
 * en:
 * METHOD that adds KeyListener, FocusListener and DocumentListener to a GUI-element and
 * all its subordinate components.
 * If this method is called from a TaskFrame (a derivation of this class),
 * then the ContentPane of the JFrame (usually the overwritten 'MainPanel')
 * is passed as 'Container'-parameter.
 * This method inspects each 'Container' for components and calls itself for each component
 * and passes that component as parameter.
 *
 * The parameter 'DocumentListener' allows to attach this DocumentListener to each JTextComponents.
 * Then the methods 'changedUpdate', insertUpdate' or 'removedUpdate' (implemented in
 * the class that is passed as DocumentListener-parameter) are called when the text of a
 * JTextComponent changes. */
    protected void addListeners(Container parmContainer, DocumentListener parmDocumentListener) { 
/*
 * de: KeyListener und FocusListener werden zu jedem Typ eines GUI-Elementeshinzugefügt.
 * en: KeyListener and FocusListener are added to any type of a GUI-element. */
      parmContainer.addKeyListener(this);
      parmContainer.addFocusListener(this);
/*
 * de:
 * Wenn der 'Container' ein 'JFrame' ist dann wird der 'WindowListener' zum 'Container'
 * hinzugefügt.
 * Verwendet wird dieser Listener um die Größe und Position des Frames zu sichern und das
 * Objekt zu 'vernichten' wenn das Frame (Fenster) geschlossen wird.
 * en:
 * If the 'Container' is a 'JFrame', then the 'WindowListener' is added to the 'Container'.
 * This listener reacts to changes concerning the frame (open, close, change size, etc.).
 * A usage of this listener is the saving of the frame-position and -size and
 * the disposal of the object when the frame (window) is closed. */
      if (parmContainer instanceof JFrame) addWindowListener(this);
/*
 * de:
 * Wenn der 'Container' eine 'JTextComponent' ist und ein 'DocumentListener' übergeben wird,
 * dann wird der 'DocumentListener' zum 'Container' hinzugefügt.
 * en:
 * If the 'Container' is a 'JTextComponent' and a 'DocumentListener' is passed,
 * then the 'DocumentListener' is added to the 'Container'. */
      if ((parmContainer instanceof JTextComponent) && (parmDocumentListener != null)) {
/* de:
 * Klassifizieren des 'Container' als Typ 'JTextComponent' um den 'DocumentListener'
 * hinzufügen zu können.
 * en:
 * Classify the 'Container' as type 'JTextComponent' to be able to add the
 * 'DocumentListener'. */
        JTextComponent locJTextComponent = (JTextComponent) parmContainer;
/* de:
 * Extrahieren des 'Document' (die Komponente die für den Text 'verantwortlich'
 * ist und den 'DocumentListener' hinzufügen.
 * en:
 * Extract the 'Document' (the component that is responsible for the text) from
 * the JTextComponent and add the 'DocumentListener'. */
        locJTextComponent.getDocument().addDocumentListener(parmDocumentListener);
      }
/*
 * de:
 * Spezielle Bearbeitung einer JComboBox ist notwendig weil das 'Document' der
 * JComboBox nicht als 'Unter-Komponente' mit dem Standard-Algorithmus erreicht
 * werden kann.
 * en:

 * Special processing of a JCombobox; neccessary as the 'Document' of the JComboBox
 * can not be reached as 'Sub-Component' with the standard-algorithm. */
      
if (parmContainer instanceof JComboBox) {
/* de:
 * Zuerst den 'Container' als Typ 'JComboBox' klassifizieren um danach das 'JTextDocument'
 * herausholen zu können.
 * en:
 * First classify the 'Container' as type 'JComboBox' to be able to get the
 * 'JTextDocument' thereafter. */
        
JComboBox locJComboBox = (JComboBox) parmContainer;
/* de:
 * ItemListener hinzufügen; damit wird bei einer Änderung der Auswahl die entsprechende
 * Methode aufgerufen.
 * en:
 * Add the Itemlistener; this causes that the associated method is called when
 * the selection is changed. */
        
locJComboBox.addItemListener(this);
/*
 * de:
 * Wenn ein 'DocumentListener' als Parameter übergeben wurde dann wird dieser dem Editor
 * für den Text
in der JComboBox hinzugefügt.
 * en:

 * When a 'DocumentListener' was passed as parameter then it will be added to the editor
 * for the text within the JComboBox. */
        
if (parmDocumentListener != null) {
/* de:
 * Extrahieren des 'Document' (die Komponente die für den Text 'verantwortlich'
 * ist) und den 'DocumentListener' hinzufügen.
 * en:
 * Extract the 'Document' (the component that is responsible for the text) from
 * the JTextComponent and add the 'DocumentListener'. */

          
JTextComponent locJTextComponent =
                        
(JTextComponent) locJComboBox.getEditor().getEditorComponent();
          locJTextComponent.getDocument().addDocumentListener(parmDocumentListener);
        }

      }
/*
 * de:
 * Spezielle Bearbeitung einer JTable ist notwendig weil die individuell eingestellten
 * Spaltenbreiten für jeden Benutzer in weiterer Folge auf einer Datenbank-Tabelle
 * gespeichert wird damit bei einem neuerlichen Aufruf des Task-Frames die gewählten
 * Spaltenbreiten wieder angezeigt werden.
 * en:
 * Special processing of a JTable; neccessary as the individually chosen width of the
 * columns for each user is stored in a database-table. This enables, when the task-frame
 * is opened again, to re-establish the set column-widths. */
      if (parmContainer instanceof JTable) {
/* de:
 * Zuerst den 'Container' als Typ 'JTable' klassifizieren um danach das 'TableColumnModel'
 * herausholen zu können.
 * en:
 * First classify the 'Container' as type 'JTable' to be able to get the
 * 'TableColumnModel' thereafter. */
        JTable locJTable = (JTable) parmContainer;
/* de:
 * Extrahieren des 'TableColumnModel' (die Komponente die für den Aufbau der Spalten
 * 'verantwortlich' ist) und den 'Listener' hinzufügen.
 * en:
 * Extract the 'TableColumnModel' (the component that is responsible for the arrangement of
 * the columns) and add the 'Listener'. */
        TableColumnModel locTableColumnModel = locJTable.getColumnModel(); 
        locTableColumnModel.addColumnModelListener(this);
      }
/*
 * de:
 * Spezielle Bearbeitung von GUI-Elementen des Typs 'JToggleButton' (das sind
 * JCheckBox und JRadioButton). 
 * Zu diesen wird der 'ItemListener' hinzugefügt der auf Änderungen des 'Status' reagiert
 * und dann die Methode 'itemStateChanged' aufruft.
 * en:

 * Special processing of GUI-elements of type 'JToggleButton' (i.e. JCheckBox and
 * JRadioButton).

 * To these, the 'ItemListener' is added which reacts to changes of the 'Status' and
 * calls the method 'itemStateChanged'. */
      
if (parmContainer instanceof JToggleButton) {
/* de:
 * Zuerst den 'Container' als Typ 'JToggleButton' klassifizieren um danach dan
 * 'ItemListener' hinzufügen zu können.
 * en:
 * First classify the 'Container' as type 'JToggleButton' to be able to add the
 * 'ItemListener' thereafter. */
        
JToggleButton locJToggleButton = (JToggleButton) parmContainer;
        
locJToggleButton.addItemListener(this); 
      }

/* de:
 * Untersuchen ob der 'Container' weitere Komponenten enthält. Wenn Komponenten in diesem
 * 'Container' vorhanden sind, dann diese Methode rekursiv für jeden 'Container' aufrufen.
 * en:
 * Inspect if the 'Container' has components in it. If there are components
 * within this 'Container', call this method recursively for each of it. */
      Component comps[] = parmContainer.getComponents();
      for(int i = 0; i < comps.length; i++) {
        Component comp = comps[i];
        addListeners((Container) comp, parmDocumentListener);
      }
    }
/*
 * -------------------------------
 * Methods with a variable number of parameters that call the Error-Handler.
 * There, the file with the XML-structure is read and the decision is made
 * if the event is an 'Error' (causing a termination of the application),
 * a 'Warning' (asking for a confirmation of the user to continue processing) or
 * a 'Log Only' (where the Event is just written to the Log-File without any
 * user-requiered action. */
    public void handleErrorEvent(String parmClassName, String parmCode,
                                 String parmParameter1, String parmParameter2,
                                 String parmParameter3, String parmParameter4,
                                 String parmParameter5) {
/* 
 * Call the Dialog to display and/or log Error- and Warning-Events. */
      JSBS_ErrorDialog dlgJSBS_ErrorDialog =
        new JSBS_ErrorDialog(this, parmClassName, parmCode, parmParameter1, parmParameter2,
                             parmParameter3, parmParameter4, parmParameter5);
/* Check if the Dialog requests a 'dump' of the application. */
      if (dlgJSBS_ErrorDialog.strProcessIndicator.compareTo("D") == 0) System.exit(0);
/* Application should continue; dispose the shown dialog. */
      dlgJSBS_ErrorDialog.dispose();
    }
/*  */
    public void handleErrorEvent(String parmClassName, String parmCode,
                                 String parmParameter1, String parmParameter2,
                                 String parmParameter3, String parmParameter4) {
      handleErrorEvent(parmClassName, parmCode, parmParameter1, parmParameter2,
                       parmParameter3, parmParameter4, "");
    }
/*  */
    public void handleErrorEvent(String parmClassName, String parmCode,
                                 String parmParameter1, String parmParameter2,
                                 String parmParameter3) {
      handleErrorEvent(parmClassName, parmCode, parmParameter1, parmParameter2,
                       parmParameter3, "", "");
    }
/*  */
    public void handleErrorEvent(String parmClassName, String parmCode,
                                 String parmParameter1, String parmParameter2) {
      handleErrorEvent(parmClassName, parmCode, parmParameter1, parmParameter2,
                        "", "", "");
    }
/*  */
    public void handleErrorEvent(String parmClassName, String parmCode,
                                 String parmParameter1) {
      handleErrorEvent(parmClassName, parmCode, parmParameter1, "", "", "", "");
    }
/*  */
    public void handleErrorEvent(String parmClassName, String parmCode) {
      handleErrorEvent(parmClassName, parmCode, "", "", "", "", "");
    }
/*
 * -------------------------------
 * de:
 * METHODE zum 'Aufheben' der Schaltfläche (JButton), die ausgelöst werden soll wenn die
 * Eingabe-Taste betätigt wird, in der dafür vorgesehenen Variable.
 * Nach dem Zuweisen der Schaltfläche auf die Variable wird die Methode zur Neu-Zeichnen
 * der Ränder der Schaltflächen aufgerufen.
 * en:
 * METHOD to 'keep' the JButton, that should be triggered when the Enter-Key is pressed,
 * in the designated variable.
 * After assigning the JButton to the variable, the method to redraw the Button-Borders is called. */
    public void setEnterTriggeredButton(JButton parmJButton) {
/* de: Zuweisen der als Parameter übergebenen Schaltfläche zu der Variablen.
 * en: Assign the JButton passed as parameter to the variable. */
       btnEnterTriggeredButton = parmJButton;
/* de: Aufrufen der Methode die die Ränder der Schaltflächen neu zeichnet.
 * en: Call the method to redraw the button-borders. */
       JSBS_GUIServices.setButtonBorders(this,
                                        structJSBS_UniversalParameters,
                                        btnEnterTriggeredButton);
    }
/*
 * -------------------------------
 * de:
 * METHODEN zum Holen der Eigenschaften eines Frames (Größe und Position) und der Spaltenbreiten
 * für JTables von der Datenbank und Wieherstellen von Größe und Position des Frames.
 *
 * Die folgende Methode muss von der erbenden Klasse (Anwendungs-spezifisches Teilprogramm für
 * die Bearbeitung eines Geschäftsfalls) aufgerufen werden nachdem die Verbindung zur Datenbank
 * oder zum EJB-Server hergestellt wurde und das Frame 'konstruiert' wurde.
 *
 * en:
 * METHODS to retrieve the Frame-Properties (size and position) and the column-widths for JTables
 * from the database and resize and position the Frame according to them. */
/*
 * The following method has to be called by the derived class (application-specific Task-Frame)
 * after the access to the database (or EJB-server) is established and the JFrame is constructed. */
    public void setFramePosition() {
/*
 * de:
 * Prüfen, ob eine Verbindung zum JAS (Java Application Server) aufgebaut werden kann.
 * Der folgende Zugriff auf die Datenbank ist möglicherweise der erste nach dem Starten
 * des Anwendungsprogramms und deswegen wird jetzt geprüft, ob überhaupt eine Verbindung
 * zum JAS möglich ist.
 * en:
 * Verify if a connection to the JAS (Java Application Server) can be established.
 * The following access to the database might be the first one after the start of the
 * application program and therefore, now a check is made if a connection to the JAS
 * is possible. */
      testJASConnection();
/* de: Initialisieren des BOC.
 * en: Initialize the BOC. */
       structJSBS_FramePosition_BOC = new JSBS_FramePosition_BOC(this);
/* de: 'Holen' der Werte für die FramePosition von der Datenbank.
 * en: Retrieve the FramePosition-properties from the database. */
       structJSBS_FramePosition_BOC.getValidByUserKnownKey(this.getClass().getName(),
                                                        structJSBS_UniversalParameters.strUserName);
/*
 * de:
 * Es besteht keine Verpflichtung für ein erbendes Anwendungsprogramm, eine Datenbank-Tabelle
 * 'Parameter' zu erstellen. Deswegen ist ein Fehler beim Zugriff auf die DB-Tabelle kein Grund
 * den Anwender darüber zu informieren.
 * Der Unterschied ist nur, wie das BO mit Werten versorgt wird.
 * en:
 * As there is no obligation for an application using this base-class to have a database-table
 * named 'Parameter', a failure of the data-access is not an error to be reported.
 * The differentiation is just the way, how the BO is supplied with values. */
      if (structJSBS_FramePosition_BOC.StatusCode == JSBS_BO.CONST_OK) {
/* de: Eigenschaften für die Frame-Position auf der Datenbank gefunden; Frame anpassen
 * en: Frame-Position-properties found on the database; adapt the Frame. */
        this.setSize(structJSBS_FramePosition_BOC.FrameWidth, structJSBS_FramePosition_BOC.FrameHeight);
        this.setLocation(structJSBS_FramePosition_BOC.PosX, structJSBS_FramePosition_BOC.PosY);
      }
      else {
/* de:
 * Eigenschaften für die Frame-Position nicht auf der Datenbank gefunden.
 * Namen des JFrame und des Users in das BO übertragen – für den Fall das diese Information
 * gespeichert wird wenn das Frame geschlossen wird.
 * en:
 * Frame-Position-properties not found on the database;
 * Supply the BO with the name of the JFrame and the user - in case that this information is stored
 * when the JFrame is closing. */
       structJSBS_FramePosition_BOC.FrameClassName = this.getClass().getName();
       structJSBS_FramePosition_BOC.UserID = structJSBS_UniversalParameters.strUserName;
      }
    }
/*
 * --------------------------
 * de:
 * Die folgende METHODE wird aufgerufen wenn das JFrame (Fenster) geschlossen wird.
 * In der Methode wird die Größe und die Position des JFrame abgefragt und die Werte auf der
 * Datenbank gespeichert.
 * en:
 * The following METHOD is called when the JFrame (window) is 'closing'.
 * Within this method, the size and the position of the JFrame is taken and stored to the database. */
    public void storeFramePosition() {
/*
 * de:
 * Prüfen ob das BOC bereits 'konstruiert' wurde.
 * Weil die 'Konstruktion' im erbenden, Anwendungs-spezifischen Frame erfolgt kann es möglich sein,
 * dass das Anwendungsprogramm keinen Gebrauch davon macht, dass die Größe und Position des Frames
 * auf der Datenbank gespeichert werden.
 * en:
 * Check if the BOC is constructed.
 * As the construction happens in the derived Task-Frame (application-specific)
 * the application might not make use of keeping the Frame-postion and -size within the database. */
      if (structJSBS_FramePosition_BOC == null) return;
/* de: Ermitteln der Werte des Frames; die Werte können als Klasse 'Rectangle' ausgelesen werden.
 * en: Get the properties from the frame; the properties can be derived as class 'Rectangle'. */
      Rectangle locRectangle = new Rectangle();
      locRectangle = this.getBounds();
      structJSBS_FramePosition_BOC.PosX = locRectangle.x;
      structJSBS_FramePosition_BOC.PosY = locRectangle.y;
      structJSBS_FramePosition_BOC.FrameWidth = locRectangle.width;
      structJSBS_FramePosition_BOC.FrameHeight = locRectangle.height;
/*
 * de:
 * Speichern der Werte in der Datenbank.
 * Weil für die Anwendung eine Datenbank-Tabelle 'Parameter' möglicherweise nicht
 * vorhanden ist wird das Resultat nicht geprüft und über einen Fehler wird ein
 * Anwender nicht informiert.
 * en:
 * Store the values to the database.
 * As there might be not database-table 'Parameter' existing for the application,
 * the result is not checked and an error is not reported. */
      structJSBS_FramePosition_BOC.store();
    }
/*
 * ********************
 * Method to add an opened Task to the list of active Tasks
 * Parameters:
 *  parmTaskFrame . . . . . Object of the Task(-frame), used to be brought to 'Front' when selected.
 *  parmTaskInternalCode . . Internal Code from the XML-file (see class JSBS_XML_Tasks),
 *                           used to derive the Selectable Code (known to the user) and display this.
 *  parmTaskData . . . . . . a text supplied by the Task calling this method,
 *                           contains additional information e.g. the Product-Code of a Product). */
    public double addOpenTaskFrame(JSBS_TaskFrame parmTaskFrame,
                                   String parmInternalCode,
                                   String parmTaskData) {
/* Retrieve the Displayed Code (user-known) from the XML-structure. */
      String locstrDisplayedCode = structJSBS_XML_Tasks.getDisplayedCode(parmInternalCode);
/* Generate a surrogate for the unique identifier. */
      double locdblTaskID = JSBS_BO_Services.generateSurrogate();
/* Construct the structure holding the information about the open Task. */
      JSBS_OpenedTaskStructure structJSBS_OpenedTaskStructure =
          new JSBS_OpenedTaskStructure(locdblTaskID, parmTaskFrame, locstrDisplayedCode, parmTaskData);
/* Add to the vector (list). */
      vecOpenTasksList.addElement(structJSBS_OpenedTaskStructure);
/* Re-Display the list with the Opened Tasks. */
      redisplay_pnl_OpenTasks();
/* Return the surrogate. */
      return locdblTaskID;
    }
/*
 * ********************
 * de:
 * Methode zum Entfernen eines Eintrags für ein Teilprogramm aus der Liste der
 * aufgerufenen Teilprogramme.
 * Parameter:
 *  parmTaskID . . . . . . . Eindeutiger ID des Teilprogramms; vergeben beim Eintrag in die Liste.
 * en:
 * Method to remove an opened Task entry from the list of active Tasks.
 * Parameters:
 *  parmTaskID . . . . . . . Unique ID of the Task, given when added to the list. */
    public void removeOpenTaskFrame(double parmTaskID) {
/*
 * de:
 * Zuerst wird die Spaltenbreite in der Tabelle für die Anzeige gesichert.
 * Das ist notwendig weil in der aufgerufenen Methode 'redisplay_pnl_OpenTasks()' - oder einer
 * weiter unterhalb aufgerufenen Methode - durch das Auslösen von 'columnMarginChanged' 
 * die Werte im Array auf gleich breite Spalten zurückgesetzt werden.
 * en:
 * First, the width of the columns within the table for display is saved.
 * This is necessary as in the called method 'redisplay_pnl_OpenTaskd()' - or in a method called
 * further down - the method 'columnMarginChanged' is triggered. This trigger causes that the
 * values within the array are reset to equal wide columns. */
/*
 * de: Anzahl der Elemente im Array für die Spaltenbreite.
 * en: Number of elements within the array to hold the width of the columns. */
      int intColumnWidthArraySize = structJSBS_FramePosition_BOC.ColumnWidthArray01.length;
/*
 * de: Aufbauen des temporären Arrays zum Sichern der Werte für die Spaltenbreiten.
 * en: Build a temporary array to secure the values for the columnwidths. */
      String[] arraytmpColumnWidthArray = new String[intColumnWidthArraySize];
/*
 * de:
 * In einer 'for'-Schleife jeden Wert des Arrays für die Spaltenbreiten auslesen und
 * in das temporäre Array übertragen.
 * en:
 * Within a 'for'-loop each value of the array for the columnwidths is read and transferred
 * to the temporary array. */
      for (int intColumnWidthArrayIndex = 0; 
           intColumnWidthArrayIndex < intColumnWidthArraySize; 
           intColumnWidthArrayIndex++) {
/* de: Wert in das temporäre Array übertragen.
 * en: Transfer the value into the temporary array. */
        arraytmpColumnWidthArray[intColumnWidthArrayIndex] =
            structJSBS_FramePosition_BOC.ColumnWidthArray01[intColumnWidthArrayIndex];
      }
/*
 * de:
 * Struktur eines Eintrags eines Teilprogramms für eine Geschäftsanwendung (OpenedTask);
 * enthält ein Element des untersuchten Vector.
 * en:
 * Structure of one OpenedTask for a programm to perform a business-task;
 * holds the inspected element of the Vector. */
      JSBS_OpenedTaskStructure structJSBS_OpenedTaskStructure;
/* de: Anzahl der Elemente im Vector; verwendet in der 'for'-Schleife.
 * en: Number of elements within the Vector; used in the 'for'-loop. */
      int intVectorSize = vecOpenTasksList.size();
/* de: Alle Elemente des Vector untersuchen um das zu entfernde Element zu finden.
 * en: Inspect all Vector-elements to identify the element to be removed. */
      for (int intVectorIndex = 0; intVectorIndex < intVectorSize; intVectorIndex++) {
        structJSBS_OpenedTaskStructure =
            (JSBS_OpenedTaskStructure) vecOpenTasksList.elementAt(intVectorIndex);
/* de: Vergleichen ob der ID des Vector-Element derjenige ist der entfernt werden soll.
 * en: Compare the ID if the Vector-element is the one to be removed. */
        if (structJSBS_OpenedTaskStructure.dblTaskID == parmTaskID) {
/* de: Angefordertes Element aus dem Vector entfernen und Liste neu anzeigen.
 * en: Remove the requested element from the vector and redisplay the list. */
          vecOpenTasksList.removeElementAt(intVectorIndex);
          redisplay_pnl_OpenTasks();
/*
 * de:
 * Gesicherte Werte aus dem temporären Array für die Spaltenbreiten wieder in das
 * originale Array übertragen.
 * en:
 * Transfer the secured values from the temporary array for the columnwidth
 * to the original array. */
          for (int intColumnWidthArrayIndex = 0; 
               intColumnWidthArrayIndex < intColumnWidthArraySize; 
               intColumnWidthArrayIndex++) {
/* de: Wert in das originale Array übertragen.
 * en: Transfer the value into the original array. */
            structJSBS_FramePosition_BOC.ColumnWidthArray01[intColumnWidthArrayIndex] =
                arraytmpColumnWidthArray[intColumnWidthArrayIndex];
          }
          return;
        }
      }
   }
/*
 * ********************
 * de:
 * Methode zum Ändern der Daten eines Tasks (Geschäftsprogramm) in
 * der Liste mit den geöffneten Task-Frames.
 * Der Task wird durch den ID bestimmt.
 * Parameter:
 *  parmTaskID . . . . . . . Eindeutiger ID des Tasks;
 *                           wurde vergeben als der Task in die Liste eingetragen wurden.
 *  parmTaskData . . . . . . Text der in der Task-List angezeigt wird.
 * en:
 * Method to change the displayed Task-Data at the Task identified by the ID.
 * Parameters:
 *  parmTaskID . . . . . . . Unique ID of the Task, given when added to the list.
 *  parmTaskData . . . . . . Text displayed at the Task-List. */
    public void updateOpenTaskFrame(double parmTaskID, String parmTaskData) {
/*
 * de:
 * Datenstruktur eines OpenedTask; enthält das untersuchte Element des Vectors.
 * en:
 * Structure of one OpenedTask; holds the inspected element of the Vector. */
      JSBS_OpenedTaskStructure structJSBS_OpenedTaskStructure;
/*
 * de:
 * Anzahl der Elemente innerhalb des Vectors; in der for-Schleife verwendet.
 * en:
 * Number of elements within the Vector; used in the for-loop. */
      int intVectorSize = vecOpenTasksList.size();
/*
 * de:
 * Alle Elemente des Vectors untersuchen und das zu ändernde Element herausfinden.
 * en:
 * Loop through the Vector-elements to identify the element to be changed. */
      for (int intVectorIndex = 0; intVectorIndex < intVectorSize; intVectorIndex++) {
        structJSBS_OpenedTaskStructure =
            (JSBS_OpenedTaskStructure) vecOpenTasksList.elementAt(intVectorIndex);
/*
 * de:
 * Den ID vergleichen ob das Vector-Elment dasjenig ist, das geändert werden muss.
 * en:
 * Compare the ID if the Vector-element is the one to be updated. */
        if (structJSBS_OpenedTaskStructure.dblTaskID == parmTaskID) {
/*
 * de:
 * Die Daten für den Task ändern und die Liste neu anzeigen.
 * en:
 * Change the Task-Data and redisplay the list. */
          structJSBS_OpenedTaskStructure.strTaskData = parmTaskData;
          redisplay_pnl_OpenTasks();
/*
 * de:
 * Das Frame für den Task (Geschäftsfallbearbeitung) wieder in den Vordergrund bringen.
 * Etwas kompliziert aber derzeit (Dezember 2009) ist anscheinend ein Fehler in der
 * Methode 'toFront()'.
 * en:
 * Bring the Frame for the Task to the foreground again.
 * The code is a little bit complicated as at the time of writing (December 2009) there
 * seems to be an error in the method 'toFront()'. */
          structJSBS_OpenedTaskStructure.frmTaskFrame.setAlwaysOnTop(true);
          structJSBS_OpenedTaskStructure.frmTaskFrame.setVisible(true);
          structJSBS_OpenedTaskStructure.frmTaskFrame.setAlwaysOnTop(false);
          return;
        }
      }
   }
/*
 * ********************
 * de:
 * Methode zum Anzeigen der Liste mit den geöffneten Task-Frames.
 * Diese Methode wird aufgerufen wenn sich der Inhalt des Vectors mit den
 * geöffneten Tasks (Geschäftsprogramme) verändert hat.
 * en:
 * Method to redisplay the list of open Tasks;
 * should be called after the vector with the list of open tasks was modified. */
    private void redisplay_pnl_OpenTasks() {
/*
 * de: Variable: Objekt der Klasse mit der Struktur der Daten eines geöffneten Tasks.
 * en: Variable: object of the class with the structure for the data of an open task. */
      JSBS_OpenedTaskStructure structJSBS_OpenedTaskStructure;
/* de: Vector mit den 'Roh-Daten' für das spätere Anzeigen in einer JTable.
 * en: Vector with the 'raw-data' for later display in a JTable. */
      Vector vecRawDisplayData = new Vector();
/* de:
 * 'Kopf-Anzeige' erstellen und in den Roh-Daten-Vector einfügen.
 * Dieser Vector (für die Kopf-Anzeige) ist die 'erste Reihe im Roh-Daten-Vector
 * und enthält symbolische Namen für die Spalten die angezeigt werden.
 * Diese symbolischen Namen werden später (in der Methode
 * 'JSBS_XML_DisplayStrings.processJTable(...)') verwendet um die sprach-abhängigen
 * Texte aus der XML-Struktur zu ermitteln.
 * en:
 * Build the header-display and insert it into the raw-data-vector.
 * This vector (for the header-display) is the 'first row' in the raw-data-vector
 * and contains the symbolic names for the columns to be displayed.
 * This symbolic names are used to get the language-dependant text out of the
 * XML-structure (done late in method 'JSBS_XML_DisplayStrings.processJTable(...)') . */
      Vector vecHeader = new Vector();
      vecHeader.addElement(JSBS_BO_Set.CONST_ColumnName_RowNr);
      vecHeader.addElement("SelectableCode");
      vecHeader.addElement("TaskData");
      vecRawDisplayData.addElement(vecHeader);
/*
 * de:
 * 'Spalten' mit den formatierten Daten 'bauen'.
 * Die Daten werden aus dem Vector 'OpenedTaskStructure' geholt.
 * en:
 * Build the 'rows' containing the formatted data.
 * This data is derived from the vector with the OpenedTaskStructure. */
      int locintTableDataSize = vecOpenTasksList.size();
      for (int locintTableDataIndex = 0;
           locintTableDataIndex < locintTableDataSize;
           locintTableDataIndex++) {
/* de: Daten für einen geöffneten 'Task' (Geschäftsanwendung) lesen.  
 * en: Read the data for an open task. */
        structJSBS_OpenedTaskStructure =
          (JSBS_OpenedTaskStructure) vecOpenTasksList.elementAt(locintTableDataIndex);
/* de: Vector, der eine Zeile der Tabelle mit den Roh-Daten repräsentiert, erstellen.
 * en: Produce the vector representing one line of the raw-data-table. */
        Vector vecRow = new Vector();
        vecRow.addElement(JSBS_Formatter.toFormattedString(locintTableDataIndex + 1, 4));
        vecRow.addElement(structJSBS_OpenedTaskStructure.strSelectableCode);
        vecRow.addElement(structJSBS_OpenedTaskStructure.strTaskData);
/* de:
 * Vector, der eine Zeile repräsentiert, zum Vector, der die Roh-Daten-Tabelle
 * enthält, hinzufügen. 
 * en:
 * Add the vector representing a row to the vector containing the raw-data-table. */
        vecRawDisplayData.addElement(vecRow);
      }
/* de:
 * Prüfen ob das Client-Side-Objekt (BOC), das die Information über das Fenster - darunter
 * auch die Breite von Tabellen-Spalten - bereits 'konstruiert' wurde.
 * Wenn das Objekt noch nicht konstruiert wurde dann wird es jetzt konstruiert.  
 * en:
 * Verify if the Client-Side-Object (BOC), containing the information about the window -
 * among it the width of table-columns, too - is already 'constructed'.
 * If the object was not already constructed then it is constructed now. */
      if (structJSBS_FramePosition_BOC == null)
          structJSBS_FramePosition_BOC = new JSBS_FramePosition_BOC(this);
/*
 * de:
 * Methode, die in der Klasse JSBS_XML_DisplayStrings enthalten ist, verwenden
 * um die JTable mit den Daten zu füllen. 
 * Davor wird das 'Flag' zum Verhindern, dass durch den 'TableColumnListener' falsche
 * Spaltenbreiten auf die Datenbank übernommen werden, gesetzt.
 * Eine detaillierte Beschreibung zu 'bolInhibitColumnMarginChangeStore' finden Sie
 * bei der Definition der Variable zu Beginn dieser Klasse.
 * en:
 * Use the method implemented in class JSBS_XML_DisplayStrings
 * to fill the JTable with the data.
 * Before that, the 'flag' to inhibit the transfer of wrong table-column-widths
 * to the database, is set. The gathering of wrong column-widths may be cause by
 * the asynchronity of the 'TableColumnListener'.
 * A detailled description concerning 'bolInhibitColumnMarginChangeSTore' can be
 * found at the definition of this variable at the top of this class. */
      bolInhibitColumnMarginChangeStore true;
      structJSBS_XML_DisplayStrings.processJTable(get_pnl_OpenTasksTable(),
                                                  this.getClass().getName(),
                                                  vecRawDisplayData,
                                                  structJSBS_FramePosition_BOC.ColumnWidthArray01);
/* 
 * de:
 * Übernehmen der Spaltenbreiten der JTable auf die Datenbank wieder erlauben.
 * Der Wert der Variable 'bolInhibitColumnMarginChangeStore' wird in der Methode
 * 'columnMarginChanged' abgefragt.
 * en:
 * Permit the transfer of the column-widths of the JTable to the database again.
 * The value of the variable 'bolInhibitColumnMarginChangeStore' is used within
 * the method 'columnMarginChanged'. */
      bolInhibitColumnMarginChangeStore = false;
    }
/*
 * ********************
 * de:
 * METHODE um das JFrame, das diese Basisklasse 'erbt', in den Vordergrund der Anzeige zu
 * setzen und den Focus für die Eingabe auf jenes JTextField zu setzen, das die Auswahl einer
 * auswählbaren oder bereits aktiven Geschäftsanwendung erlaubt.
 * en:
 * METHOD to bring the JFrame that inherits this base-class to the front and get the focus
 * to the JTextField for the selectable code or the redisplay of an already open Task. */
    public void focusCommandCenter() {
/*
 * de:
 * Vorsichtsmassnahme falls das JFrame nur als Icon (Symbol) aufscheint.
 * Auf jeden Fall das normale Fenster wieder herstellen.
 * en:
 * Precaution if the Frame is iconified: de-iconify it anyway. */
      int intFrameState = this.getExtendedState();
/* de: Deaktivieren des Bits das das Fenster auf Symbolgröße setzt.
 * en: De-activate the bit for the 'iconify'. */
      intFrameState &= ~JFrame.ICONIFIED;
/* de: Neuen Status (de-ivonified) für das JFrame setzen.
 * en: Set the state (de-iconified) to the Frame. */
      this.setExtendedState(intFrameState);
/* de: Fenster in den Vordergrund bringen und den Focus verlangen.
 * en: Bring the JFrame to front and get the focus. */
      this.toFront();
      this.requestFocusInWindow();
/* de:
 * Focus auf das Feld für die Eingabe der auszuwählenden Geschäftsanwendung setzen
 * und eine eventuell vorhandene Eingabe im Feld markieren damit die bestehende
 * Eingabe bei einer neuen Eingabe komplett überschrieben wird.
 * en:
 * Set the focus to the field for selection of code or already Open Task
 * and select an existing entry to overwrite it when a new value is entered. */
      get_txt_Code().requestFocusInWindow();
      get_txt_Code().selectAll();
    }
/*
 * ********************
 * de:
 * METHODE um die Remote-Interface des Standard-EJB zurück zu liefern.
 * In den JavaScout-Basisklassen wird diese Remote-Interface benötigt um die Position und Größe
 * eines Fensters zu speichern und wieder einzulesen.
 * Der Algorithmus in dieser Klasse ist so gestaltet, dass alle notwendigen Vorbedingungen
 * (Objekt der Klasse mit dem Context für die Verbindung zum JAS, JNDI-Name des EJB bekannt)
 * geprüft und wenn notwendig wieder hergestellt werden. 
 * --------------------
 * en:
 * METHOD to return the Remote-interface of the Standard-EJB.
 * Within the JavaScout-Base-Classes this Remote-Interface is needed, to store and retrieve
 * the size and position of a window.
 * The algorithm within this method is designed to check all prerequisites (object with the class
 * administering the Context for the connection to the JAS, JNDI-name of the EJB known)
 * and establish them if needed.  */
    public synchronized JSBS_StandardEJBBeanRemote get_JSBS_StandardEJBBeanRemote() {
/*
 * de:
 * Zuerst Prüfen ob das Objekt mit dem Context für die Verbindung zum JAS bereits existiert.
 * Objekt 'konstruieren' wenn es noch nicht existiert.
 * en:
 * Verify if the object with the Context for the connection to JAS already exists.
 * 'Construct' the object if not already done. */
      if (structJSBS_StartFrame__JASConnections == null)
          structJSBS_StartFrame__JASConnections = new JSBS_StartFrame__JASConnections(this);
/*
 * de: Noch einmal prüfen ob das Objekt konstruiert wurde.
 * en: Verify again if the object was constructed. */
      if (structJSBS_StartFrame__JASConnections == null) return null;
/*
 * de:
 * Prüfen ob bereits der Context für die Verbindung zum JAS existiert.
 * Wenn nicht dann die entsprechende Methode ausführen.
 * en:
 * Verify if the Context for the connection to JAS already exists.
 * If not, call the respective method. */
      if (structJSBS_StartFrame__JASConnections.initialStandardContext == null)
          structJSBS_StartFrame__JASConnections.establishStandardInitialContext();
/*
 * de: Noch einmal prüfen ob der Context und der EJB-JNDI-Name jetzt 'existieren'.
 * en: Verify again if the Context and the EJB-JNDI-name 'exist' now. */
      if ( structJSBS_StartFrame__JASConnections.initialStandardContext == null) return null;
      if ( structJSBS_StartFrame__JASConnections.strStandardEJB_JNDI_Name == null) return null;
/*
 * de:
 * Herstellen der Verbindung zum EJB das auf dem JAS 'läuft'.
 * Über diese Verbindung können die Methoden des EJB (auf dem JAS) aufgerufen werden.
 * en:
 * Establish the connection to the EJB 'running' on the JAS.
 * Over this connection, methods of the EJB (running on the JAS) can be called. */
      try {
/*
 * de: Interface für das EJB definieren; dieser Wert wird aus dieser Methode zurück geliefert.
 * en: Define the Interface for the EJB; this value is returned from this method. */
        JSBS_StandardEJBBeanRemote remoteJSBS_StandardEJBBean;
/*
 * de: Interface über 'Context' und JNDI-Namen des EJB erstellen.
 * en: Establish the Interface using the 'Context' and the JNDI-name of the EJB. */
        remoteJSBS_StandardEJBBean = (JSBS_StandardEJBBeanRemote)
          structJSBS_StartFrame__JASConnections.initialStandardContext.lookup(
            structJSBS_StartFrame__JASConnections.strStandardEJB_JNDI_Name);
/*
 * de:
 * Bis hierher ohne Fehler bedeutet, dass die Verbindung zum EJB erstellt wurde.
 * Interface mit der Verbindung zum EJB zurück liefern.
 * en:
 * Program run without an error till here; means that the connection to the EJB was established
 * Return the Interface with the connection to the EJB. */
        return remoteJSBS_StandardEJBBean;
      }
      catch (Exception e){
/*
 * de: Nicht näher bestimmter Fehler aufgetreten; über 'null'-Wert signalisieren.
 * en: An error occured without further detailed specification; signal via 'null'-value. */
        return null
      }
    }
/*
 * -------------------------------
 * de:
 METHODE zum Prüfen, ob eine Verbindung zum JAS (Java Application Server) aufgebaut werden kann.
 Je nach Ergebnis der Prüfung wird die Schaltfläche, mit der der Anwender eine weitere Prüfung 
 * einleiten kann, ein- oder ausgeblendet.
 * Zweck dieser Methode ist, bei der Betriebsart 'MobileClient' auf die Unterbrechung der Verbindung
 * zum JAS adäquat reagieren zu können.
 * en:
 * METHOD to verify, if a connection to the JAS (Java Application Server) can be established.
 * Depending on the result of the verification, the JButton that enables the user to initiate a further
 * verification, is shown or hided.
 * Intention of this method is to react suitable to an interrupted connection to the JAS when the 
 * client uses operation-mode 'MobileClient'. */
    public boolean testJASConnection() {
/*
 * de:
 * Die Prüfung erfolgt nur wenn das Anwendungsprogramm in der Version Heavyweight-Client oder als MobileClient
 * läuft. Ansonsten ist eine Verbindung zum JAS nicht erforderlich.
 * en:
 * The verification is performed only if the application runs with the version heavyweight-client or
 * MobileClient. Otherwise a connection to the JAS is not needed. */
      if (   (RunVersion == JSBS_StartFrame.CONST_MobileClient)
          || (RunVersion == JSBS_StartFrame.CONST_FatClient)) {}
      else return true;
/*
 * de:
 * Das Prüfen, ob eine Verbindung zum JAS aufgebaut werden kann, wird innerhalb eines 'synchronized'-
 * Block ausgeführt.
 * Grund dafür ist, dass bei einer unterbrochenen Verbindung die Versuche zum Wieder-Verbinden länger
 * dauern können als der Intervall innerhalb des Threads 'JSBS_StartFrame__JASMonitor_Thread'.
 * Ohne 'synchronized' würde dann das Prüfen auf die Verbindung zum JAS mehrmals erfolgen weil die
 * Variable 'bolJASConnectionEstablished' noch nicht auf 'false' gesetzt ist wenn diese Methode aus dem
 * Thread 'JSBS_StartFrame__JASMonitor_Thread' erneut aufgerufen wird.
 * Durch 'synchronize' kann der Code nicht parallel ausgeführt werden - ein zweiter Aufruf der Methode
 * muss 'warten' bis der Code innerhalb des 'synchronized'-Blocks abgearbeitet ist.
 * en:
 * The verification, if a connection to the JAS can be established, is done within a 'synchronized'-block.
 * Reason for that is, that the time for the trials to re-connect to the JAS might be longer than the
 * interval used within the thread 'JSBS_StartFrame__JASMonitor_Thread'.
 * Without the 'synchronized', the verifcation for the connection to the JAS would be done several times
 * when the variable 'bolJASConnectionEstablished' is not already set to 'false' and this method is called
 * again from 'JSBS_StartFrame__JASMonitor_Thread'.
 * By using 'synchronize', the code can not run parallel - a second call of the method has to 'wait'
 * until the code within the 'synchronize'-block is finished. */
      synchronized(this{
/*
 * de:
 * Prüfen, ob die Verbindung zum JAS schon einmal als unterbrochen erkannt wurde.
 * Damit wird die Prüfung auf eine aufrechte Verbindung vermieden weil diese Prüfung durch Wiederhol-
 * Versuche des Betriebssystems und des Java-Runtime-Systems bis zu einer Minute dauern kann wenn
 * keine Verbindung zum JAS aufgebaut werden kann.
 * en:
 * Verify if the connection to the JAS was detected as interrupted before.
 * That avoids a verification for an existing connection as this verification may take up to one minute
 * (caused by repeated trials of the operating-system and Java-Runtime-System) if a connection to the
 * JAS can not be established. */
        if (! bolJASConnectionEstablishedreturn false;
/*
 * de:
 * Aufrufen der Methode, die das Objekt für die Verbindung zum JAS konstruiert.
 * In der aufgerufenen Methode wird bereits generell geprüft, ob die Verbindung zum JAS
 * aufgebaut werden kann.
 * en:
 * Call the method that constructs the object used for the connection to the JAS.
 * The called method contains a general verification if the connection to the JAS can be established. */
        JSBS_StandardEJBBeanRemote remoteJSBS_StandardEJBBean = get_JSBS_StandardEJBBeanRemote();
/*
 * de: Prüfen, ob das Objekt für die Verbindung zum JAS konstruiert wurde.
 * en: Verify if the object for the connection to the JAS was constructed. */
        if (remoteJSBS_StandardEJBBean == null) {
/*
 * de:
 * Objekt konnte nicht konstruiert werden weil keine Verbindung zum JAS möglich ist.
 * Entsprechenden Merker setzen.
 * en: 
 * Object could not be constructes as a connection to the JAS is not possible.
 * Set the appropriate flag. */
          bolJASConnectionEstablished = false;
        }
        else {
/*
 * de:
 * Objekt für die Verbindung zum JAS konstruiert; jetzt abfragen ob die Verbindung
 * auch korrekt funktioniert.
 * en: 
 * Object for the connection to the JAS constructed; verify now if the connection is working.
 * as expected. */
          bolJASConnectionEstablished = remoteJSBS_StandardEJBBean.testJASConnection();
        }
/*
 * de:
 * Prüfung auf eine aufrechte Verbindung zum JAS beendet; 'synchronized'-Block beenden.
 * en: 
 * Verification for an existing connection to the JAS done; end the 'synchronized'-block. */
      }
/*
 * de:
 * Abhängig, ob eine Verbindung zum JAS aufgebaut werden konnte oder nicht, wird im folgenden Code
 * die Schaltfläche (JButton), mit der der Anwender den neuerlichen Aufbau der Verbindung versuchen
 * kann, eingeblendet oder entfernt.
 * en:
 * Depending on the fact, if a connection to the JAS could have been established or not, the following 
 * shows or hides the JButton that allows the user to retry a connection to the JAS. */
/*
 * de: Zuerst wird ein Merker erstellt ob die Schaltfläche bereits sichtbar ist oder nicht.
 * en: First, a flag if the JButton is already visible or not, is created. */
      boolean bolConnectToJASShowing = false;
/*
 * de: Alle 'Komponenten' des JPanel, das die Schaltfläche enthalten kann in ein Array einlesen.
 * en: Read all 'componente' of the JPanel that may contain the JButton into an array. */
      Component comps[] = get_pnl_ConnectToJAS().getComponents();
/*
 * de:
 * In einer for-Schleife die 'Komponenten' prüfen ob ein JButton (Schaltfläche) dabei ist.
 * Bedingt durch das Design dieser Klasse kann das dann nur die Schaltfläche für den Versuch, die
 * Verbindung zum JAS wieder herzustellen, sein. In diesem Fall den entsprechenden Merker setzen.
 * en:
 * Use a for-loop to inspect all 'components' if they contain a JButton. Due to the design of this class
 * this can only be the JButton that enables an user to retry the connection to the JAS.
 * Set the appropriate flag in that case. */
      int intNumberOfComponents = comps.length;
      int intComponentIndex;
      for (intComponentIndex = 0; intComponentIndex < intNumberOfComponents; intComponentIndex++) {
        Component comp = comps[intComponentIndex];
/*
 * de:
 * Prüfen ob die 'Komponente' der gesuchte JButton (Schaltfläche) ist.
 * In diesem Fall den Merker setzen und die for-Schleife beenden.
 * en:
 * Check if the 'component' is the requested JButton. In that case set the flag and end the for-loop. */
        if (comp instanceof JButton) {
          bolConnectToJASShowing = true;
          break;
        }
      }
/*
 * de:
 * Abhängig davon, ob die Schaltfläche angezeigt werden soll (oder nicht) und bereits angezeigt wird
 * (oder nicht) wird die Schaltfläche angezeigt oder entfernt.
 * Zusätzlich wird die Farbe der Ränder der (in der erbenden Klasse) definierten Panels geändert um
 * eine aufrechte oder unterbrochene Verbindung zum JAS visuell zu signalisieren.
 * en:
 * Depending if the JButton should be shown (or not) and is already shown (or not), the JButton is shown
 * or removed.
 * Additionally, the color of the border of the panels (that are defined in the inheriting class) are
 * changed to visually signal an existing or broken connection to the JAS. */
      if ((! bolJASConnectionEstablished) && (! bolConnectToJASShowing)) {
          get_pnl_ConnectToJAS().add(BorderLayout.CENTER, get_btn_ConnectToJAS());
          JSBS_GUIServices.setPanelBordersAlternate(this, structJSBS_UniversalParameters, arrayJPanelBordersToBeColored);
      }
      if (bolJASConnectionEstablished && bolConnectToJASShowing) {
          get_pnl_ConnectToJAS().removeAll();
          JSBS_GUIServices.setPanelBorders(this, structJSBS_UniversalParameters, arrayJPanelBordersToBeColored);
      }
/*
 * de: Warnung, dass die Verbindung zum JAS unterbrochen ist, anzeigen.
 * en: Show the warning that the connection to the JAS is interrupted. */
      if(! bolJASConnectionEstablished) {
/*
 * de:
 * Unterscheiden in welcher Version das Anwendungsprogramm läuft.
 * Damit können verschiedenen Texte bei einer eventuellen Warnung oder fFehlermeldung zugeordnet werden.
 * en:
 * Differentiate which version is used within the application program.
 * This allows to assign different texts at a warning or error-message. */
        String strRunVersionExtension = "";
        if (RunVersion == CONST_FatClient) strRunVersionExtension = "_FatClient";
        if (RunVersion == CONST_MobileClient) strRunVersionExtension = "_MobileClient";
        handleErrorEvent(this.getClass().getName(), "ConnectionToJASFailed" + strRunVersionExtension);
      }
/*
 * de: Werte des Merkers an die aufrufende Methode zurück liefern.
 * en: Return the value of the flag. */
      return bolJASConnectionEstablished;
    }
/*
 * ==============================
 * de: BLOCK MIT DEN METHODEN FÜR WÄHRUNG, SPRACHE UND LAND.
 * en: BLOCK WITH THE METHODS FOR CURRENCY, LANGUAGE AND COUNTRY. */
/*
 * -------------------------------
* de: BLOCK mit ALLGEMEINEN Methoden.
* en: BLOCK with COMMON methods.
* -------------------------------
* de: METHODE zum Übertragen eines Arrays mit Werten der Klasse String in einen Vector.
 * en: METHOD transfer an array with values of class String into a Vector. */
    private Vector<String> convertStringArrayToVector(String[] parmStringArray) {
/* de: Definition der Variable des Vectors, der von dieser Methode zurück geliefert wird.
 * en: Definition of the variable for the vector that is returned by this method. */
      Vector<String> vecReturn = new Vector<String>();
/*
 * de:
 * Prüfen, ob der übergebene Parameter einen null-Wert enthält.
 * In diesem Fall diese Methode sofort beenden und einen leeren Vector zurück liefern.
 * en:
 * Verify, if the passed parameter contains a null-value.
 * In that case end the method immediately and return an empty vector. */
      if (parmStringArray == null) return vecReturn;
/*
 * de:
 * Variable für die Steuerung der for-Schleife definieren und for-Schleife beginnen.
 * en:
 * Define the variables to control the for-loop and start the for-loop. */
      int intArraySize = parmStringArray.length;
      int intArrayIndex;
      for (intArrayIndex = 0; intArrayIndex < intArraySize; intArrayIndex++) {
/*
 * de:
 * Ein Object der Klasse String definieren und den Wert aus dem indizierten Array-Element
 * übertragen. Anschließend den String in den Vector einfügen.
 * en:
 * Define an object of class String and transfer the value from the indexed array-element.
 * Insert the string to the vector thereafter. */
        String locString = parmStringArray[intArrayIndex];
        vecReturn.addElement(locString);
      }
/*
 * de: 'Gefüllten' Vector an die aufrufende Methode zurück liefern.
 * en: Return the 'filled' vector to the calling method. */
      return vecReturn;
    }
/*
 * -------------------------------
 * de:
 * METHODE zum Prüfen, ob ein Element des als Parameter übergebenen Vectors mit der
 * Zeichenkette beginnt, die im Parameter 'parmValueToCompare' übergeben wird.
 *
 * en:
 * METHOD to verify if an element of the vector passes as parameter starts with the
 * string passed in parameter 'parmValueToCompare'. */
    public boolean isValueInVector(Vector<String> parmVector, String parmValueToCompare) {
/*
 * de:
 * Prüfen, ob die übergebenen Parameter einen null-Wert enthalten.
 * In diesem Fall diese Methode sofort beenden und 'false' zurück liefern.
 * en:
 * Verify, if the passed parameters contains a null-values.
 * In that case end the method immediately and return 'false'. */
      if (parmVector == null) return false;
      if (parmValueToCompare == null) return false;
/*
 * de: Zeichenkette für das Bearbeiten eines Elements aus dem Vector.
 * en: String to process one element of the vector. */
      String strVectorElement;
/*
 * de:
 * Variable für die Steuerung der for-Schleife definieren und for-Schleife beginnen.
 * en:
 * Define the variables to control the for-loop and start the for-loop. */
      int intVectorSize = parmVector.size();
      int intVectorIndex;
      for (intVectorIndex = 0; intVectorIndex < intVectorSize; intVectorIndex++) {
/*
 * de: Indiziertes Element aus dem Vector auslesen.
 * en: Read the indexed element out of the vector. */
        strVectorElement = (String) parmVector.elementAt(intVectorIndex);
/*
 * de:
 * Die Prüf-Bedingung ist erfüllt wenn die Zeichenkette des Vector-Elements mit
 * dem zu vergleichenden Wert beginnt. Methode beenden; 'true' zurück liefern.
 * en:
 * The verification is fulfilled if the string of the vector-element starts with
 * the value of the string to be compared. */
        if (strVectorElement.indexOf(parmValueToCompare) == 0) return true;
      }
/*
 * de:
 * Beim Durchlauf der for-Schleife wurde kein Vector-Element gefunden, das mit der
 * im Parameter 'parmValueToCompare' übergebenen Wert beginnt.
 * Deswegen 'false' an die aufrufende Methode zurück liefern.
 * en:
 * Within the for-loop a vector-element beginning with the value passed in
 * parameter 'parmValueToCompare' was not found.
 * Therefore return 'false' to the calling method. */
      return false;
    }
/*
 * -------------------------------
 * BLOCK mit den Methoden für das LAND.
 * -------------------------------
 * de:
 * METHODE zum Lesen aller BO mit den im Anwendungsprogramm definierten, aktuell
 * gültigen Ländern von der Datenbank.
 * Dabei wird geprüft, ob das letzte Lesen von der Datenbank länger zurück liegt
 * als durch den Wert im Parameter 'parmRefreshPeriodsInSeconds' festgelegt -
 * nur dann wird wieder von der Datenbank gelesen.
 *
 * en:
 * METHOD to read all BO with the actually valid countries, defined in the
 * application program, from the database.
 * Within this method is checked if the last read from the database was longer ago
 * as defined by the parameter 'parmRefreshPeriodInSeconds' - only then a read is
 * done from the database again. */
    private void retrieveJSBS_Country_BOC_Set(int parmRefreshPeriodInSeconds) {
/*
 * de:
 * Prüfen, ob das BOC bereits einmal 'konstruiert' wurde -
 * ansonsten das BOC 'konstruieren'.
 * en:
 * Verify, if the BOC was 'constructed' before; otherwise 'construct' it. */
      if (structJSBS_Country_BOC_Set == null) {
/* de: Konstruieren des BOC.
 * en: Construct the BOC. */
        structJSBS_Country_BOC_Set = new JSBS_Country_BOC_Set(this);
/* de: Damit das Set auf jeden Fall neu gelesen wird ein 'uraltes' Datum gesetzt.
 * en: Set an 'ancient' date so that the Set is read in any case. */
        dteJSBS_Country_BOC_Set_LastRead = new Date(0);
      }
/*
 * de:
 * Berechnen der Sekunden, die seit dem letzten Lesen von der Datenbank vergangen sind.
 * en:
 * Calculate the seconds since the last read from the database. */
      long intTimeDiffInSeconds =
            ((new Date()).getTime() - dteJSBS_Country_BOC_Set_LastRead.getTime()) / 1000;
/*
 * de:
 * Methode abbrechen wenn seit dem letzten Lesen von der Datenbank weniger Zeit vergangen
 * ist als der Wert im Parameter.
 * en:
 * Terminate the method if the time-period since the last read from the database is less
 * than the value passed in the parameter. */
      if (intTimeDiffInSeconds <= parmRefreshPeriodInSeconds) return;
/*
 * de:
 * Prüfen, ob eine Verbindung zum JAS (Java Application Server) aufgebaut werden kann.
 * Der folgende Zugriff auf die Datenbank ist möglicherweise der erste nach dem Starten
 * des Anwendungsprogramms und deswegen wird jetzt geprüft, ob überhaupt eine Verbindung
 * zum JAS möglich ist.
 * en:
 * Verify if a connection to the JAS (Java Application Server) can be established.
 * The following access to the database might be the first one after the start of the
 * application program and therefore, now a check is made if a connection to the JAS
 * is possible. */
      testJASConnection();
/*
 * de: 'Holen' aller zum aktuellen Datum gültigen ISO-Land-Codes von der Datenbank.
 * en: Retrieve all ISO-lcountry-codes that are valid at the actual date from the database. */
      structJSBS_Country_BOC_Set.selectAllValid();
/*
 * de:
 * Je nach Status des Datenbank-Zugriffs entscheiden, wie die Verarbeitung weiter gehen soll.
 * en:
 * Decide how to continue the processing depending on the status of the databas-acces. */
      switch (structJSBS_Country_BOC_Set.StatusCode) {
      case JSBS_BO.CONST_OK:
/* de:
 * Datenbank-Zugriff wie erwartet.
 * Datum des letzten Zugriffs neu setzen und dann normal fortsetzen.
 * en:
 * Database-access as expected.
 * Set the date of the last access and continue normal thereafter. */
          dteJSBS_Country_BOC_Set_LastRead = new Date();
          break;
      case JSBS_BO.CONST_NOT_FOUND:
/* de:
 * Auf der Datenbank wurde kein aktuell gültiges Land gefunden.
 * Ist kein Fehler; es werden dann keine Einträge in einer JTable oder JComboBox angezeigt.
 * en:
 * Not a single country, that is actually valid, found on the database.
 * Is not an error; leads to the effect that no entries are shown in a JTable or JComboBox. */
          break;
      default:
/* de:
 * Sonstiger Status aufgetreten.
 * Bedingt durch den Datenbank-Zugriff (select) kann es nur ein Fehler der Datenbank sein
 * der nicht umgangen werden kann.
 * Methode zur Fehlerbehandlung aufrufen.
 * en:
 * Another status occured.
 * In consequence of the database-access (select) it can only be an error of the database
 * which can not be bypassed.
 * Call the method to handle an Error. */
          handleErrorEvent(this.getClass().getName(), "retrieveJSBS_Country_BOC_Set_DBError",
                           Integer.toString(structJSBS_Country_BOC_Set.StatusCode),
                           structJSBS_Country_BOC_Set.StatusMsg);
      }
    }
/*
 * -------------------------------
 * de:
 * Wrapper-METHODE zum Ermitteln der Länder-Bezeichnung (CountryName).
 * Der Code für die 'richtige Arbeit' ist in der nachfolgenden Methode.
 * Als Sprach-Code für die Anzeige des Länder-Namens wird die vom Anwender gewählte
 * Sprache als Parameter übergeben.
 *
 * en:
 * Wrapper-METHOD to get the country-name.
 * The code for the 'real work' is in the following method.
 * As language-code for the display of the country-name the one assigned to the user
 * is passed. */
    private String getCountryName(String parmISOCountryCode) {
      return getCountryName(parmISOCountryCode, structJSBS_UniversalParameters.strLanguageCode);
    }
/*
 * de:
 * METHODE zum Ermitteln der Länder-Bezeichnung (CountryName) für den im Parameter
 * 'parmISOCountryCode' übergebenen Land-Code in der im 'parmLanguageCodeForLabelling'
 * übergebenen Wert für die Sprache.
 *
 * en:
 * METHOD to get the country-name for the country-code passed in the parameter
 * 'parmISOCountryCode'. The language for the country-name is passed in the parameter
 * 'parmLanguageCodeForLabelling'. */
    private String getCountryName(String parmISOCountryCode, String parmLanguageCodeForLabelling) {
/*
 * de:
 * Prüfen, ob der übergebene Parameter 'parmISOCountryCode' einen null-Wert enthält.
 * In diesem Fall diese Methode sofort beenden und eine leere Zeichenkette zurück liefern.
 * en:
 * Verify, if the passed parameter 'parmISOCountryCode' contains a null-value.
 * In that case terminate the method immediately and return an empty string. */
      if (parmISOCountryCode == null) return "";
/*
 * de:
 * Wenn der Wert im 'parmLanguageCodeForLabelling' null ist, wird der Parameter
 * durch den Sprach-Code, der dem Anwender zugeordnet ist, ersetzt.
 * en:
 * If the value in 'parmLanguageCodeForLabelling' is null, the the parameter is
 * replaced by the language-code assigned to the user. */
      if (parmLanguageCodeForLabelling == null)
          parmLanguageCodeForLabelling = structJSBS_UniversalParameters.strLanguageCode;
/*
 * de: Einzelnes BO aus dem Vector für die Bearbeitung innerhalb der for-Schleife.
 * en: Single BO out of the vector for processing within the for-loop. */
      JSBS_Country_BO locJSBS_Country_BO;
/*
 * de: Zeichenkette für den Wert der aus dieser Methode zurück geliefert wird.
 * en: String for the value that is returned from this method. */
      String strReturnValue = "";
/*
 * de:
 * Variable für die Steuerung der for-Schleife definieren und for-Schleife beginnen.
 * en:
 * Define the variables to control the for-loop and start the for-loop. */
      int intArraySize = structJSBS_Country_BOC_Set.vecRecordSet.size();
      int intArrayIndex;
      for (intArrayIndex = 0; intArrayIndex < intArraySize; intArrayIndex++) {
/*
 * de: Indiziertes Element aus dem Vector auslesen.
 * en: Read the indexed element out of the vector. */
        locJSBS_Country_BO = (JSBS_Country_BO)
                structJSBS_Country_BOC_Set.vecRecordSet.elementAt(intArrayIndex);
/*
 * de:
 * Die folgenden 'if' könnten auch als eine Bedingung geschrieben werden. 
 * Damit die Teil-Bedingungen verständlicher kommentiert werden können wird die
 * Redundanz in Kauf genommen.
 * en:
 * The following 'if' could be written as a single condition.
 * It allows more understandable comments if the conditions are split into parts -
 * therefore the redundancy is accepted. */
/*
 * de: Zuerst prüfen, ob der Land-Code überhaupt zutrifft.
 * en: Verify first if the country-code fits. */
        if (locJSBS_Country_BO.ISOCountryCode.compareTo(parmISOCountryCode) == 0) {
/*
 * de:
 * Wenn beide Parameter übereinstimmen dann wurde die eindeutige Bezeichnung für
 * das Land gefunden. Den Namen des Landes zurück liefern und Methode beenden.
 * en:
 * If both parameters fit then the unique name for the country was found.
 * Return the name of the country and end this method. */
          if (locJSBS_Country_BO.LanguageCodeForLabelling.compareTo(parmLanguageCodeForLabelling) == 0)
            return locJSBS_Country_BO.CountryName;
/*
 * de:
 * Wenn der Datensatz aus dem Vector die Standard-Sprache abbildet, dann wird die 
 * Bezeichnung für das Land in der Zeichenkette für die Rückgabe aufgehoben.
 * Möglicherweise folgt noch ein Datensatz mit genauer Übereinstimmung der beiden
 * Parameter-Werte.
 * en:
 * If the dataset from the vector is the one for the default-language, then the
 * country-name is stored in the string for return.
 * Potentially a dataset with the exact comparison to both parameter-values follows. */
          if (   (locJSBS_Country_BO.LanguageCodeForLabelling.trim().length() <= 0)
              && (strReturnValue.length() <= 0))
            strReturnValue = locJSBS_Country_BO.CountryName;
        }
        else {
/*
 * de:
 * Wenn der Länder-Code nicht mit dem Parameter-Wert übereinstimmt und die Zeichenkette
 * für den Namen des Landes einen Wert enthält dann bedeutet das, dass für den gesuchten
 * Wert in 'parmISOCountryCode' ein Standard-Wert gefunden wurde.
 * Diesen Standard-Wert jetzt zurück liefern.
 * en:
 * If the country-code is not equal to the value passed in the parameter  
 * 'parmISOCountryCode' and the string for the country-name contains a value, then
 * the 'default'-country-name for the value passed in parameter 'parmISOCountryCode.
 * Return this default-country-name now. */
          if (strReturnValue.length() > 0)
            return strReturnValue;
        }
     }
/*
 * de:
 * Wenn keine Bezeichnung für das Land gefunden wurde dann ist die Zeichenkette noch
 * immer leer. Zeichenkette jetzt zurück liefern.
 * en:
 * If a country-name was not found for the parameters, then the string is still empty.
 * Return the string now. */
      return strReturnValue;
    }
/*
 * -------------------------------
 * de:
 * Wrapper-METHODEN für das Füllen einer Combobox mit der Auswahlliste für die Länder.
 *
 * en:
 * Wrapper-METHOD to fill a combo-box with the selection-list for the countries. */
    public void fillCountryComboBox(JComboBox parmJComboBox) {
      fillCountryComboBoxWithExclusions(parmJComboBox, 0, null, 600, null);
    }
/* ***** */
    public void fillCountryComboBox(JComboBox parmJComboBox,
                                    int parmCountryMarkerNumber) {
      fillCountryComboBoxWithExclusions(parmJComboBox, parmCountryMarkerNumber,
                                        null, 600, null);
    }
/* ***** */
    public void fillCountryComboBox(JComboBox parmJComboBox,
                                    String parmDisplayLanguageCode) {
      fillCountryComboBoxWithExclusions(parmJComboBox, 0,
                                        parmDisplayLanguageCode, 600, null);
    }
/* ***** */
    public void fillCountryComboBox(JComboBox parmJComboBox,
                                      int parmCountryMarkerNumber,
                                      String parmDisplayLanguageCode) {
      fillCountryComboBoxWithExclusions(parmJComboBox, parmCountryMarkerNumber,
                                      parmDisplayLanguageCode, 600, null);
    }
/* ***** */
    public void fillCountryComboBox(JComboBox parmJComboBox,
                                      int parmCountryMarkerNumber,
                                      String parmDisplayLanguageCode,
                                      int parmRefreshPeriodInSeconds) {
      fillCountryComboBoxWithExclusions(parmJComboBox, parmCountryMarkerNumber,
                                      parmDisplayLanguageCode, parmRefreshPeriodInSeconds, null);
    }
/* ***** */
    public void fillCountryComboBoxWithExclusions(JComboBox parmJComboBox,
                                                  Vector<String> parmExclusionList) {
      fillCountryComboBoxWithExclusions(parmJComboBox, 0,
                                      null, 600, parmExclusionList);
    }
/* ***** */
    public void fillCountryComboBoxWithExclusions(JComboBox parmJComboBox,
                                                  int parmCountryMarkerNumber,
                                                  Vector<String> parmExclusionList) {
      fillCountryComboBoxWithExclusions(parmJComboBox, parmCountryMarkerNumber,
                                      null, 600, parmExclusionList);
    }
/* ***** */
    public void fillCountryComboBoxWithExclusions(JComboBox parmJComboBox,
                                                  String parmDisplayLanguageCode,
                                                  Vector<String> parmExclusionList) {
      fillCountryComboBoxWithExclusions(parmJComboBox, 0,
                                      parmDisplayLanguageCode, 600, parmExclusionList);
    }
/* ***** */
    public void fillCountryComboBoxWithExclusions(JComboBox parmJComboBox,
                                                  int parmCountryMarkerNumber,
                                                  String parmDisplayLanguageCode,
                                                  Vector<String> parmExclusionList) {
      fillCountryComboBoxWithExclusions(parmJComboBox, parmCountryMarkerNumber,
                                      parmDisplayLanguageCode, 600, parmExclusionList);
    }
/*
 * de:
 * METHODE zum Füllen einer JComboBox (im Parameter 'parmJComboBox' übergeben)
 * mit den Ländern, die für die Installation des Anwendungsprogramms erfasst sind.
 * Diese Methode hat die maximale Anzahl an Parametern mit denen die Auswahl der
 * Länder gesteuert werden kann.
 * 'parmCountryMarkerNumber' ist die Einschränkung auf einen Marker für einen
 *      Themenbereich für den das Land 'zugelassen' ist.
 *      Ist der Wert in diesem Parameter '0' dann werden alle Länder zur Auswahl
 *      in der Combobox angezeigt.
 * 'parmDisplayLanguageCode' ist die Festlegung, in welcher Sprache die Bezeichnung
 *      ('CountryName') angezeigt werden soll.
 *      Ist der übergebene Wert 'null' dann wird der vom Anwender gewählte Sprach-Code
 *      (aus 'structJSBS_UniversalParameters.strLanguageCode') verwendet.
 * 'parmRefreshPeriodInSeconds' legt fest, in welchem Intervall das Set mit den
 *      Ländern von der Datenbank gelesen wird.
 * 'parmExclusionList' enthält eine Liste mit jenen Land-Codes, die nicht in der
 *      Auswahlliste der Combobox angezeigt werden sollen.
 *
 * en:
 * METHOD to fill a JComboBox (passed in the parameter 'parmJComboBox') with the
 * countries that are recorded at an installation of the application-program.
 * This method has the maximum number of parameters to control the selection of
 * the countries.
 * 'parmCountryMarkerNumber' ist the limitation to one Marker for an area the
 *      country is 'permitted'.
 *      If the value of this parameter is '0', then all countries are displayed
 *      in the combo-box for selection.
 * 'parmDisplayLanguageCode' ist the definition, in which language the
 *      'CountryName' should be displayed.
 *      If the passed parameter is 'null', the language-code for the user
 *      (defined in 'structJSBS_UniversalParameters.strLanguageCode') is used.
 * 'parmRefreshPeriodInSeconds' defines, in which time interval the set of
 *      countries is read from the database.
 * 'parmExclusionList' contains a list of all country-codes, that should not
 *      be displayed in the list of the combo-box. */
    public void fillCountryComboBoxWithExclusions(JComboBox parmJComboBox,
                                                  int parmCountryMarkerNumber,
                                                  String parmDisplayLanguageCode,
                                                  int parmRefreshPeriodInSeconds,
                                                  Vector<String> parmExclusionList) {
/*
 * de:
 * Jeden Parameter prüfen, ob eventuell ein 'null'-Wert übergeben wurde und
 * in jedem Fall eine Korrektur ausführen.
 * en:
 * Verify each parameter if a null-value was passed and do corrective processing
 * in each case. */
/*
 * de:
 * Wenn keine Combobox übergeben wurde dann kann auch keine gefüllt werden.
 * Methode sofort abbrechen.
 * en:
 * If a combo-box was not passed - no one can be filled.
 * Terminate the method immediately. */
      if (parmJComboBox == null) return;
/*
 * de:
 * Wenn kein Sprach-Code für die Anzeige des Land-Namens übergeben wird dann wird
 * die vom Anwender gewählte Sprache verwendet.
 * en:
 * If no language-code for the display of the country-name was passed, then the
 * language chosen by the user is used. */
      if (parmDisplayLanguageCode == null)
              parmDisplayLanguageCode = structJSBS_UniversalParameters.strLanguageCode;
/*
 * de:
 * Wenn kein Vector mit den aus der Combobox-Liste auszunehmenden Land-Codes
 * übergeben wird, wird ein leerer Vector 'konstruiert'.
 * en:
 * If no Vecor with the country-codes, that should be excluded from the combo-box-list,
 * was passed, then an empty Vector is 'constructed'. */
      if (parmExclusionList == null) parmExclusionList = new Vector<String>();
/*
 * de:
 * Methode aufrufen die prüft, ob der Zeit-Intervall seit dem letzten Lesen von der
 * Datenbank überschritten wurde und bei Bedarf das Set mit den Ländern von der
 * Datenbank neu lesen.
 * en:
 * Call the method that checks, if the time-interval since the last retrieve from
 * the database is expiered and re-read the set with the countries from the database
 * if needed. */
      retrieveJSBS_Country_BOC_Set(parmRefreshPeriodInSeconds);
/*
 * de:
 * Ein BOC-Set konstruieren in dem später jene Länder aufgenommen werden, die
 * für die Auswahlliste in der Combobox ausgewählt sind.
 * en:
 * Construct a BOC-Set that later will be filled with those countries that are 
 * selected later for the display of the selection list within the combo-box. */
      JSBS_Country_BOC_Set structJSBS_Country_BOC_Set_For_ComboBox =
              new JSBS_Country_BOC_Set(this);
/*
 * de:
 * Variable für die Steuerung der for-Schleife definieren und for-Schleife beginnen.
 * en:
 * Define the variables to control the for-loop and start the for-loop. */
      int intVectorSize = structJSBS_Country_BOC_Set.vecRecordSet.size();
      int intVectorIndex;
      for (intVectorIndex = 0; intVectorIndex < intVectorSize; intVectorIndex++) {
/*
 * de:
 * Neues BO für das spätere Einfügen in den Vector für die Anzeige konstruieren
 * und indiziertes Element aus dem Vector auslesen.
 * en:
 * Construct a new BO for later insertion into the vector for display and read
 * the indexed element out of the vector. */
        JSBS_Country_BO structJSBS_Country_BO_Indexed = new JSBS_Country_BO();
        structJSBS_Country_BO_Indexed = (JSBS_Country_BO)
                structJSBS_Country_BOC_Set.vecRecordSet.elementAt(intVectorIndex);
/*
 * de:
 * Für die Anzeige werden nur die Datensätze mit der Standard-Bezeichnung für 
 * den Länder-Namen herangezogen. Diese sind daran erkennbar, dass der Wert
 * im Attribut 'LanguageCodeForLabelling' eine leere Zeichenkette ist.
 * Bei anderen Werten nächsten Durchlauf der for-Schleife beginnen.
 * en:
 * For the display only datasets with the default-country-name are considered.
 * Those can be identified by an empty string as value in the attribut
 * 'LanguageCodeForLabelling'. If there is another value continue with the
 * next pass of the for-loop. */
        if (structJSBS_Country_BO_Indexed.LanguageCodeForLabelling.trim().length() > 0)
            continue;
/*
 * de:
 * Prüfen, ob der Land-Code in der Liste mit den auszunehmenden Codes enthalten ist. 
 * In diesem Fall ebenfalls mit dem nächsten Durchlauf der for-Schleife fortsetzen.
 * en:
 * Verify, if the country-code is in the list with the codes to be excluded.
 * In that case, continue with the next pass of the for-loop, too. */
        if (isValueInVector(parmExclusionList, structJSBS_Country_BO_Indexed.ISOCountryCode))
            continue;
/*
 * de:
 * Prüfen, ob für den Marker-Wert aus dem Parameter der entsprechende Marker 
 * im Datensatz enthalten ist.
 * Bei einem Parameter-Wert '0' werden alle Datensätze in die Anzeigeliste aufgenommen.
 * en:
 * Verify if, for the Marker-value from the parameter, a fitting Marker is within the
 * dataset.
 * If the parameter-value is '0', all datasets are included in the list for display. */
        if (   (parmCountryMarkerNumber == 0)
            || ((parmCountryMarkerNumber == 1) && (structJSBS_Country_BO_Indexed.Marker01))
            || ((parmCountryMarkerNumber == 2) && (structJSBS_Country_BO_Indexed.Marker02))
            || ((parmCountryMarkerNumber == 3) && (structJSBS_Country_BO_Indexed.Marker03))
            || ((parmCountryMarkerNumber == 4) && (structJSBS_Country_BO_Indexed.Marker04))
            || ((parmCountryMarkerNumber == 5) && (structJSBS_Country_BO_Indexed.Marker05))
            || ((parmCountryMarkerNumber == 6) && (structJSBS_Country_BO_Indexed.Marker06))
            || ((parmCountryMarkerNumber == 7) && (structJSBS_Country_BO_Indexed.Marker07))
            || ((parmCountryMarkerNumber == 8) && (structJSBS_Country_BO_Indexed.Marker08))
            || ((parmCountryMarkerNumber == 9) && (structJSBS_Country_BO_Indexed.Marker09))
            || ((parmCountryMarkerNumber == 10) && (structJSBS_Country_BO_Indexed.Marker10))
            || ((parmCountryMarkerNumber == 11) && (structJSBS_Country_BO_Indexed.Marker11))
            || ((parmCountryMarkerNumber == 12) && (structJSBS_Country_BO_Indexed.Marker12))
            || ((parmCountryMarkerNumber == 13) && (structJSBS_Country_BO_Indexed.Marker13))
            || ((parmCountryMarkerNumber == 14) && (structJSBS_Country_BO_Indexed.Marker14))
            || ((parmCountryMarkerNumber == 15) && (structJSBS_Country_BO_Indexed.Marker15))
            || ((parmCountryMarkerNumber == 16) && (structJSBS_Country_BO_Indexed.Marker16))
            || ((parmCountryMarkerNumber == 17) && (structJSBS_Country_BO_Indexed.Marker17))
            || ((parmCountryMarkerNumber == 18) && (structJSBS_Country_BO_Indexed.Marker18))
            || ((parmCountryMarkerNumber == 19) && (structJSBS_Country_BO_Indexed.Marker19))
            || ((parmCountryMarkerNumber == 20) && (structJSBS_Country_BO_Indexed.Marker20))
           ) {}
/*
 * de:
 * Marker stimmt nicht überein; mit dem nächste Durchlauf der for-Schleife fortsetzen.
 * en:
 * Marker does not fit; continue with the next pass of the for-loop. */
        else continue;
/*
 * de:
 * Wenn der Code bis hierher ausgeführt wurde dann soll das Land in der Auswahlliste 
 * der Combobox angezeigt werden.
 * Noch die Bezeichnung des landes in der gewünschten Sprache ermitteln.
 * en:
 * If the code was executed till here then the country should be added to the
 * selection-list of the combo-box.
 * Finally, get the country-name in the chosen language. */
       structJSBS_Country_BO_Indexed.CountryName =
               getCountryName(structJSBS_Country_BO_Indexed.ISOCountryCode,
                               parmDisplayLanguageCode);
/*
 * de:
 * Das einzelne BO für einen Eintrag in der Auswahlliste der Combobox in den 
 * Vector für den Aufbau der Combobox einfügen.
 * en:
 * Add the single BO for one entry in the selection-list of the combo-box into
 * the vector for the build of the combo-box */
        structJSBS_Country_BOC_Set_For_ComboBox.vecRecordSet.addElement(structJSBS_Country_BO_Indexed);
      }
/*
 * de:
 * Vector mit den Rohdaten im BOC aufbauen und Combobox füllen.
 * en:
 * Build the vector with raw-date within the BOC and fill the combo-box */
     structJSBS_Country_BOC_Set_For_ComboBox.buildRawDataVector();
     String[] arrayComboBoxArrangement = {"ISOCountryCode", " - ", "CountryName"};
     JSBS_GUIServices.setListToJComboBox(parmJComboBox,
                               structJSBS_Country_BOC_Set_For_ComboBox.vecRawDisplayData,
                               arrayComboBoxArrangement);
   }
/*
 * -------------------------------
 * BLOCK mit den Methoden für die WÄHRUNG.
 * -------------------------------
 * de:
 * METHODE zum Lesen aller BO mit den im Anwendungsprogramm definierten, aktuell
 * gültigen Währungen von der Datenbank.
 * Dabei wird geprüft, ob das letzte Lesen von der Datenbank länger zurück liegt
 * als durch den Wert im Parameter 'parmRefreshPeriodsInSeconds' festgelegt -
 * nur dann wird wieder von der Datenbank gelesen.
 *
 * en:
 * METHOD to read all BO with the actually valid currencies, defined in the
 * application program, from the database.
 * Within this method is checked if the last read from the database was longer ago
 * as defined by the parameter 'parmRefreshPeriodInSeconds' - only then a read is
 * done from the database again. */
    private void retrieveJSBS_Currency_BOC_Set(int parmRefreshPeriodInSeconds) {
/*
 * de:
 * Prüfen, ob das BOC bereits einmal 'konstruiert' wurde -
 * ansonsten das BOC 'konstruieren'.
 * en:
 * Verify, if the BOC was 'constructed' before; otherwise 'construct' it. */
      if (structJSBS_Currency_BOC_Set == null) {
/* de: Konstruieren des BOC.
 * en: Construct the BOC. */
        structJSBS_Currency_BOC_Set = new JSBS_Currency_BOC_Set(this);
/* de: Damit das Set auf jeden Fall neu gelesen wird ein 'uraltes' Datum gesetzt.
 * en: Set an 'ancient' date so that the Set is read in any case. */
        dteJSBS_Currency_BOC_Set_LastRead = new Date(0);
      }
/*
 * de:
 * Berechnen der Sekunden, die seit dem letzten Lesen von der Datenbank vergangen sind.
 * en:
 * Calculate the seconds since the last read from the database. */
      long intTimeDiffInSeconds =
            ((new Date()).getTime() - dteJSBS_Currency_BOC_Set_LastRead.getTime()) / 1000;
/*
 * de:
 * Methode abbrechen wenn seit dem letzten Lesen von der Datenbank weniger Zeit vergangen
 * ist als der Wert im Parameter.
 * en:
 * Terminate the method if the time-period since the last read from the database is less
 * than the value passed in the parameter. */
      if (intTimeDiffInSeconds <= parmRefreshPeriodInSeconds) return;
/*
 * de:
 * Prüfen, ob eine Verbindung zum JAS (Java Application Server) aufgebaut werden kann.
 * Der folgende Zugriff auf die Datenbank ist möglicherweise der erste nach dem Starten
 * des Anwendungsprogramms und deswegen wird jetzt geprüft, ob überhaupt eine Verbindung
 * zum JAS möglich ist.
 * en:
 * Verify if a connection to the JAS (Java Application Server) can be established.
 * The following access to the database might be the first one after the start of the
 * application program and therefore, now a check is made if a connection to the JAS
 * is possible. */
      testJASConnection();
/*
 * de: 'Holen' aller zum aktuellen Datum gültigen ISO-Währung-Codes von der Datenbank.
 * en: Retrieve all ISO-currency-codes that are valid at the actual date from the database. */
      structJSBS_Currency_BOC_Set.selectAllValid();
/*
 * de:
 * Je nach Status des Datenbank-Zugriffs entscheiden, wie die Verarbeitung weiter gehen soll.
 * en:
 * Decide how to continue the processing depending on the status of the databas-acces. */
      switch (structJSBS_Currency_BOC_Set.StatusCode) {
      case JSBS_BO.CONST_OK:
/* de:
 * Datenbank-Zugriff wie erwartet.
 * Datum des letzten Zugriffs neu setzen und dann normal fortsetzen.
 * en:
 * Database-access as expected.
 * Set the date of the last access and continue normal thereafter. */
          dteJSBS_Currency_BOC_Set_LastRead = new Date();
          break;
      case JSBS_BO.CONST_NOT_FOUND:
/* de:
 * Auf der Datenbank wurde keine aktuell gültige Währung gefunden.
 * Ist kein Fehler; es werden dann keine Einträge in einer JTable oder JComboBox angezeigt.
 * en:
 * Not a single currency, that is actually valid, found on the database.
 * Is not an error; leads to the effect that no entries are shown in a JTable or JComboBox. */
          break;
      default:
/* de:
 * Sonstiger Status aufgetreten.
 * Bedingt durch den Datenbank-Zugriff (select) kann es nur ein Fehler der Datenbank sein
 * der nicht umgangen werden kann.
 * Methode zur Fehlerbehandlung aufrufen.
 * en:
 * Another status occured.
 * In consequence of the database-access (select) it can only be an error of the database
 * which can not be bypassed.
 * Call the method to handle an Error. */
          handleErrorEvent(this.getClass().getName(), "retrieveJSBS_Currency_BOC_Set_DBError",
                           Integer.toString(structJSBS_Currency_BOC_Set.StatusCode),
                           structJSBS_Currency_BOC_Set.StatusMsg);
      }
    }
/*
 * -------------------------------
 * de:
 * Wrapper-METHODE zum Ermitteln der Währungs-Bezeichnung (CurrencyName).
 * Der Code für die 'richtige Arbeit' ist in der nachfolgenden Methode.
 * Als Sprach-Code für die Anzeige des Währungs-Namens wird die vom Anwender gewählte
 * Sprache als Parameter übergeben.
 *
 * en:
 * Wrapper-METHOD to get the currency-name.
 * The code for the 'real work' is in the following method.
 * As language-code for the display of the currency-name the one assigned to the user
 * is passed. */
    private String getCurrencyName(String parmISOCurrencyCode) {
      return getCurrencyName(parmISOCurrencyCode, structJSBS_UniversalParameters.strLanguageCode);
    }
/*
 * de:
 * METHODE zum Ermitteln der Währungs-Bezeichnung (CurrencyName) für den im Parameter
 * 'parmISOCurrencyCode' übergebenen Währungs-Code in der im 'parmLanguageCodeForLabelling'
 * übergebenen Wert für die Sprache.
 *
 * en:
 * METHOD to get the currency-name for the currency-code passed in the parameter
 * 'parmISOCurrencyCode'. The language for the currency-name is passed in the parameter
 * 'parmLanguageCodeForLabelling'. */
    private String getCurrencyName(String parmISOCurrencyCode, String parmLanguageCodeForLabelling) {
/*
 * de:
 * Prüfen, ob der übergebene Parameter 'parmISOCurrencyCode' einen null-Wert enthält.
 * In diesem Fall diese Methode sofort beenden und eine leere Zeichenkette zurück liefern.
 * en:
 * Verify, if the passed parameter 'parmISOCurrencyCode' contains a null-value.
 * In that case terminate the method immediately and return an empty string. */
      if (parmISOCurrencyCode == null) return "";
/*
 * de:
 * Wenn der Wert im 'parmLanguageCodeForLabelling' null ist, wird der Parameter
 * durch den Sprach-Code, der dem Anwender zugeordnet ist, ersetzt.
 * en:
 * If the value in 'parmLanguageCodeForLabelling' is null, the the parameter is
 * replaced by the language-code assigned to the user. */
      if (parmLanguageCodeForLabelling == null)
          parmLanguageCodeForLabelling = structJSBS_UniversalParameters.strLanguageCode;
/*
 * de: Einzelnes BO aus dem Vector für die Bearbeitung innerhalb der for-Schleife.
 * en: Single BO out of the vector for processing within the for-loop. */
      JSBS_Currency_BO locJSBS_Currency_BO;
/*
 * de: Zeichenkette für den Wert der aus dieser Methode zurück geliefert wird.
 * en: String for the value that is returned from this method. */
      String strReturnValue = "";
/*
 * de:
 * Variable für die Steuerung der for-Schleife definieren und for-Schleife beginnen.
 * en:
 * Define the variables to control the for-loop and start the for-loop. */
      int intArraySize = structJSBS_Currency_BOC_Set.vecRecordSet.size();
      int intArrayIndex;
      for (intArrayIndex = 0; intArrayIndex < intArraySize; intArrayIndex++) {
/*
 * de: Indiziertes Element aus dem Vector auslesen.
 * en: Read the indexed element out of the vector. */
        locJSBS_Currency_BO = (JSBS_Currency_BO)
                structJSBS_Currency_BOC_Set.vecRecordSet.elementAt(intArrayIndex);
/*
 * de:
 * Die folgenden 'if' könnten auch als eine Bedingung geschrieben werden. 
 * Damit die Teil-Bedingungen verständlicher kommentiert werden können wird die
 * Redundanz in Kauf genommen.
 * en:
 * The following 'if' could be written as a single condition.
 * It allows more understandable comments if the conditions are split into parts -
 * therefore the redundancy is accepted. */
/*
 * de: Zuerst prüfen, ob der Währungs-Code überhaupt zutrifft.
 * en: Verify first if the currency-code fits. */
        if (locJSBS_Currency_BO.ISOCurrencyCode.compareTo(parmISOCurrencyCode) == 0) {
/*
 * de:
 * Wenn beide Parameter übereinstimmen dann wurde die eindeutige Bezeichnung für
 * die Währung gefunden. Den Namen der Währung zurück liefern und Methode beenden.
 * en:
 * If both parameters fit then the unique name for the currency was found.
 * Return the name of the currency and end this method. */
          if (locJSBS_Currency_BO.LanguageCodeForLabelling.compareTo(parmLanguageCodeForLabelling) == 0)
            return locJSBS_Currency_BO.CurrencyName;
/*
 * de:
 * Wenn der Datensatz aus dem Vector die Standard-Sprache abbildet, dann wird die 
 * Bezeichnung für die Währung in der Zeichenkette für die Rückgabe aufgehoben.
 * Möglicherweise folgt noch ein Datensatz mit genauer Übereinstimmung der beiden
 * Parameter-Werte.
 * en:
 * If the dataset from the vector is the one for the default-language, then the
 * currency-name is stored in the string for return.
 * Potentially a dataset with the exact comparison to both parameter-values follows. */
          if (   (locJSBS_Currency_BO.LanguageCodeForLabelling.trim().length() <= 0)
              && (strReturnValue.length() <= 0))
            strReturnValue = locJSBS_Currency_BO.CurrencyName;
        }
        else {
/*
 * de:
 * Wenn der Währungs-Code nicht mit dem Parameter-Wert übereinstimmt und die Zeichenkette
 * für den Namen der Währung einen Wert enthält dann bedeutet das, dass für den gesuchten
 * Wert in 'parmISOCurrencyCode' ein Standard-Wert gefunden wurde.
 * Diesen Standard-Wert jetzt zurück liefern.
 * en:
 * If the currency-code is not equal to the value passed in the parameter  
 * 'parmISOCurrencyCode' and the string for the currency-name contains a value, then
 * the 'default'-currency-name for the value passed in parameter 'parmISOCurrencyCode.
 * Return this default-currency-name now. */
          if (strReturnValue.length() > 0)
            return strReturnValue;
        }
     }
/*
 * de:
 * Wenn keine Bezeichnung für die Währung gefunden wurde dann ist die Zeichenkette noch
 * immer leer. Zeichenkette jetzt zurück liefern.
 * en:
 * If a currency-name was not found for the parameters, then the string is still empty.
 * Return the string now. */
      return strReturnValue;
    }
/*
 * -------------------------------
 * de:
 * Wrapper-METHODEN für das Füllen einer Combobox mit der Auswahlliste für die Währungen.
 *
 * en:
 * Wrapper-METHOD to fill a combo-box with the selection-list for the currencies. */
    public void fillCurrencyComboBox(JComboBox parmJComboBox) {
      fillCurrencyComboBoxWithExclusions(parmJComboBox, 0, null, 600, null);
    }
/* ***** */
    public void fillCurrencyComboBox(JComboBox parmJComboBox,
                                    int parmCurrencyMarkerNumber) {
      fillCurrencyComboBoxWithExclusions(parmJComboBox, parmCurrencyMarkerNumber,
                                        null, 600, null);
    }
/* ***** */
    public void fillCurrencyComboBox(JComboBox parmJComboBox,
                                    String parmDisplayLanguageCode) {
      fillCurrencyComboBoxWithExclusions(parmJComboBox, 0,
                                        parmDisplayLanguageCode, 600, null);
    }
/* ***** */
    public void fillCurrencyComboBox(JComboBox parmJComboBox,
                                      int parmCurrencyMarkerNumber,
                                      String parmDisplayLanguageCode) {
      fillCurrencyComboBoxWithExclusions(parmJComboBox, parmCurrencyMarkerNumber,
                                      parmDisplayLanguageCode, 600, null);
    }
/* ***** */
    public void fillCurrencyComboBox(JComboBox parmJComboBox,
                                      int parmCurrencyMarkerNumber,
                                      String parmDisplayLanguageCode,
                                      int parmRefreshPeriodInSeconds) {
      fillCurrencyComboBoxWithExclusions(parmJComboBox, parmCurrencyMarkerNumber,
                                      parmDisplayLanguageCode, parmRefreshPeriodInSeconds, null);
    }
/* ***** */
    public void fillCurrencyComboBoxWithExclusions(JComboBox parmJComboBox,
                                                  Vector<String> parmExclusionList) {
      fillCurrencyComboBoxWithExclusions(parmJComboBox, 0,
                                      null, 600, parmExclusionList);
    }
/* ***** */
    public void fillCurrencyComboBoxWithExclusions(JComboBox parmJComboBox,
                                                  int parmCurrencyMarkerNumber,
                                                  Vector<String> parmExclusionList) {
      fillCurrencyComboBoxWithExclusions(parmJComboBox, parmCurrencyMarkerNumber,
                                      null, 600, parmExclusionList);
    }
/* ***** */
    public void fillCurrencyComboBoxWithExclusions(JComboBox parmJComboBox,
                                                  String parmDisplayLanguageCode,
                                                  Vector<String> parmExclusionList) {
      fillCurrencyComboBoxWithExclusions(parmJComboBox, 0,
                                      parmDisplayLanguageCode, 600, parmExclusionList);
    }
/* ***** */
    public void fillCurrencyComboBoxWithExclusions(JComboBox parmJComboBox,
                                                  int parmCurrencyMarkerNumber,
                                                  String parmDisplayLanguageCode,
                                                  Vector<String> parmExclusionList) {
      fillCurrencyComboBoxWithExclusions(parmJComboBox, parmCurrencyMarkerNumber,
                                      parmDisplayLanguageCode, 600, parmExclusionList);
    }
/*
 * de:
 * METHODE zum Füllen einer JComboBox (im Parameter 'parmJComboBox' übergeben)
 * mit den Währungen, die für die Installation des Anwendungsprogramms erfasst sind.
 * Diese Methode hat die maximale Anzahl an Parametern mit denen die Auswahl der
 * Währungen gesteuert werden kann.
 * 'parmCurrencyMarkerNumber' ist die Einschränkung auf einen Marker für einen
 *      Themenbereich für den die Währung 'zugelassen' ist.
 *      Ist der Wert in diesem Parameter '0' dann werden alle Währungen zur Auswahl
 *      in der Combobox angezeigt.
 * 'parmDisplayLanguageCode' ist die Festlegung, in welcher Sprache die Bezeichnung
 *      ('CurrencyName') angezeigt werden soll.
 *      Ist der übergebene Wert 'null' dann wird der vom Anwender gewählte Sprach-Code
 *      (aus 'structJSBS_UniversalParameters.strLanguageCode') verwendet.
 * 'parmRefreshPeriodInSeconds' legt fest, in welchem Intervall das Set mit den
 *      Währungen von der Datenbank gelesen wird.
 * 'parmExclusionList' enthält eine Liste mit jenen Währungs-Codes, die nicht in der
 *      Auswahlliste der Combobox angezeigt werden sollen.
 *
 * en:
 * METHOD to fill a JComboBox (passed in the parameter 'parmJComboBox') with the
 * currencies that are recorded at an installation of the application-program.
 * This method has the maximum number of parameters to control the selection of
 * the countries.
 * 'parmCurrencyMarkerNumber' ist the limitation to one Marker for an area the
 *      currency is 'permitted'.
 *      If the value of this parameter is '0', then all currencies are displayed
 *      in the combo-box for selection.
 * 'parmDisplayLanguageCode' ist the definition, in which language the
 *      'CurrencyName' should be displayed.
 *      If the passed parameter is 'null', the language-code for the user
 *      (defined in 'structJSBS_UniversalParameters.strLanguageCode') is used.
 * 'parmRefreshPeriodInSeconds' defines, in which time interval the set of
 *      currencies is read from the database.
 * 'parmExclusionList' contains a list of all currency-codes, that should not
 *      be displayed in the list of the combo-box. */
    public void fillCurrencyComboBoxWithExclusions(JComboBox parmJComboBox,
                                                  int parmCurrencyMarkerNumber,
                                                  String parmDisplayLanguageCode,
                                                  int parmRefreshPeriodInSeconds,
                                                  Vector<String> parmExclusionList) {
/*
 * de:
 * Jeden Parameter prüfen, ob eventuell ein 'null'-Wert übergeben wurde und
 * in jedem Fall eine Korrektur ausführen.
 * en:
 * Verify each parameter if a null-value was passed and do corrective processing
 * in each case. */
/*
 * de:
 * Wenn keine Combobox übergeben wurde dann kann auch keine gefüllt werden.
 * Methode sofort abbrechen.
 * en:
 * If a combo-box was not passed - no one can be filled.
 * Terminate the method immediately. */
      if (parmJComboBox == null) return;
/*
 * de:
 * Wenn kein Sprach-Code für die Anzeige des Spreachnamens übergeben wird dann wird
 * die vom Anwender gewählte Sprache verwendet.
 * en:
 * If no language-code for the display of the language-name was passed, then the
 * language chosen by the user is used. */
      if (parmDisplayLanguageCode == null)
              parmDisplayLanguageCode = structJSBS_UniversalParameters.strLanguageCode;
/*
 * de:
 * Wenn kein Vector mit den aus der Combobox-Liste auszunehmenden Währungs-Codes
 * übergeben wird, wird ein leerer Vector 'konstruiert'.
 * en:
 * If no Vecor with the currency-codes, that should be excluded from the combo-box-list,
 * was passed, then an empty Vector is 'constructed'. */
      if (parmExclusionList == null) parmExclusionList = new Vector<String>();
/*
 * de:
 * Methode aufrufen die prüft, ob der Zeit-Intervall seit dem letzten Lesen von der
 * Datenbank überschritten wurde und bei Bedarf das Set mit den Währungen von der
 * Datenbank neu lesen.
 * en:
 * Call the method that checks, if the time-interval since the last retrieve from
 * the database is expiered and re-read the set with the currencies from the database
 * if needed. */
      retrieveJSBS_Currency_BOC_Set(parmRefreshPeriodInSeconds);
/*
 * de:
 * Ein BOC-Set konstruieren in dem später jene Währungen aufgenommen werden, die
 * für die Auswahlliste in der Combobox ausgewählt sind.
 * en:
 * Construct a BOC-Set that later will be filled with those currencies that are 
 * selected later for the display of the selection list within the combo-box. */
      JSBS_Currency_BOC_Set structJSBS_Currency_BOC_Set_For_ComboBox =
              new JSBS_Currency_BOC_Set(this);
/*
 * de:
 * Variable für die Steuerung der for-Schleife definieren und for-Schleife beginnen.
 * en:
 * Define the variables to control the for-loop and start the for-loop. */
      int intVectorSize = structJSBS_Currency_BOC_Set.vecRecordSet.size();
      int intVectorIndex;
      for (intVectorIndex = 0; intVectorIndex < intVectorSize; intVectorIndex++) {
/*
 * de:
 * Neues BO für das spätere Einfügen in den Vector für die Anzeige konstruieren
 * und indiziertes Element aus dem Vector auslesen.
 * en:
 * Construct a new BO for later insertion into the vector for display and read
 * the indexed element out of the vector. */
        JSBS_Currency_BO structJSBS_Currency_BO_Indexed = new JSBS_Currency_BO();
        structJSBS_Currency_BO_Indexed = (JSBS_Currency_BO)
                structJSBS_Currency_BOC_Set.vecRecordSet.elementAt(intVectorIndex);
/*
 * de:
 * Für die Anzeige werden nur die Datensätze mit der Standard-Bezeichnung für 
 * den Währungs-Namen herangezogen. Diese sind daran erkennbar, dass der Wert
 * im Attribut 'LanguageCodeForLabelling' eine leere Zeichenkette ist.
 * Bei anderen Werten nächsten Durchlauf der for-Schleife beginnen.
 * en:
 * For the display only datasets with the default-currency-name are considered.
 * Those can be identified by an empty string as value in the attribut
 * 'LanguageCodeForLabelling'. If there is another value continue with the
 * next pass of the for-loop. */
        if (structJSBS_Currency_BO_Indexed.LanguageCodeForLabelling.trim().length() > 0)
            continue;
/*
 * de:
 * Prüfen, ob der Währungs-Code in der Liste mit den auszunehmenden Codes enthalten ist. 
 * In diesem Fall ebenfalls mit dem nächsten Durchlauf der for-Schleife fortsetzen.
 * en:
 * Verify, if the currency-code is in the list with the codes to be excluded.
 * In that case, continue with the next pass of the for-loop, too. */
        if (isValueInVector(parmExclusionList, structJSBS_Currency_BO_Indexed.ISOCurrencyCode))
            continue;
/*
 * de:
 * Prüfen, ob für den Marker-Wert aus dem Parameter der entsprechende Marker 
 * im Datensatz enthalten ist.
 * Bei einem Parameter-Wert '0' werden alle Datensätze in die Anzeigeliste aufgenommen.
 * en:
 * Verify if, for the Marker-value from the parameter, a fitting Marker is within the
 * dataset.
 * If the parameter-value is '0', all datasets are included in the list for display. */
        if (   (parmCurrencyMarkerNumber == 0)
            || ((parmCurrencyMarkerNumber == 1) && (structJSBS_Currency_BO_Indexed.Marker01))
            || ((parmCurrencyMarkerNumber == 2) && (structJSBS_Currency_BO_Indexed.Marker02))
            || ((parmCurrencyMarkerNumber == 3) && (structJSBS_Currency_BO_Indexed.Marker03))
            || ((parmCurrencyMarkerNumber == 4) && (structJSBS_Currency_BO_Indexed.Marker04))
            || ((parmCurrencyMarkerNumber == 5) && (structJSBS_Currency_BO_Indexed.Marker05))
            || ((parmCurrencyMarkerNumber == 6) && (structJSBS_Currency_BO_Indexed.Marker06))
            || ((parmCurrencyMarkerNumber == 7) && (structJSBS_Currency_BO_Indexed.Marker07))
            || ((parmCurrencyMarkerNumber == 8) && (structJSBS_Currency_BO_Indexed.Marker08))
            || ((parmCurrencyMarkerNumber == 9) && (structJSBS_Currency_BO_Indexed.Marker09))
            || ((parmCurrencyMarkerNumber == 10) && (structJSBS_Currency_BO_Indexed.Marker10))
            || ((parmCurrencyMarkerNumber == 11) && (structJSBS_Currency_BO_Indexed.Marker11))
            || ((parmCurrencyMarkerNumber == 12) && (structJSBS_Currency_BO_Indexed.Marker12))
            || ((parmCurrencyMarkerNumber == 13) && (structJSBS_Currency_BO_Indexed.Marker13))
            || ((parmCurrencyMarkerNumber == 14) && (structJSBS_Currency_BO_Indexed.Marker14))
            || ((parmCurrencyMarkerNumber == 15) && (structJSBS_Currency_BO_Indexed.Marker15))
            || ((parmCurrencyMarkerNumber == 16) && (structJSBS_Currency_BO_Indexed.Marker16))
            || ((parmCurrencyMarkerNumber == 17) && (structJSBS_Currency_BO_Indexed.Marker17))
            || ((parmCurrencyMarkerNumber == 18) && (structJSBS_Currency_BO_Indexed.Marker18))
            || ((parmCurrencyMarkerNumber == 19) && (structJSBS_Currency_BO_Indexed.Marker19))
            || ((parmCurrencyMarkerNumber == 20) && (structJSBS_Currency_BO_Indexed.Marker20))
           ) {}
/*
 * de:
 * Marker stimmt nicht überein; mit dem nächste Durchlauf der for-Schleife fortsetzen.
 * en:
 * Marker does not fit; continue with the next pass of the for-loop. */
        else continue;
/*
 * de:
 * Wenn der Code bis hierher ausgeführt wurde dann soll die Währung in der Auswahlliste 
 * der Combobox angezeigt werden.
 * Noch die Bezeichnung der Währung in der gewünschten Sprache ermitteln.
 * en:
 * If the code was executed till here then the currency should be added to the
 * selection-list of the combo-box.
 * Finally, get the currency-name in the chosen language. */
       structJSBS_Currency_BO_Indexed.CurrencyName =
               getCurrencyName(structJSBS_Currency_BO_Indexed.ISOCurrencyCode,
                               parmDisplayLanguageCode);
/*
 * de:
 * Das einzelne BO für einen Eintrag in der Auswahlliste der Combobox in den 
 * Vector für den Aufbau der Combobox einfügen.
 * en:
 * Add the single BO for one entry in the selection-list of the combo-box into
 * the vector for the build of the combo-box */
        structJSBS_Currency_BOC_Set_For_ComboBox.vecRecordSet.addElement(structJSBS_Currency_BO_Indexed);
      }
/*
 * de:
 * Vector mit den Rohdaten im BOC aufbauen und Combobox füllen.
 * en:
 * Build the vector with raw-date within the BOC and fill the combo-box */
     structJSBS_Currency_BOC_Set_For_ComboBox.buildRawDataVector();
     String[] arrayComboBoxArrangement = {"ISOCurrencyCode", " - ", "CurrencyName"};
     JSBS_GUIServices.setListToJComboBox(parmJComboBox,
                               structJSBS_Currency_BOC_Set_For_ComboBox.vecRawDisplayData,
                               arrayComboBoxArrangement);
   }
/*
 * -------------------------------
 * BLOCK mit den Methoden für die SPRACHE.
 * -------------------------------
 * de:
 METHODE zum Prüfen, ob der als Parameter übergebene Code für die Sprache im Anwendungsprogramm
 als 'möglich' definiert ist.
 * 'Möglich' bedeutet, dass der geprüfte Code für die Sprache in der Variablen
 'arrayApplicationImplementedLanguages' enthalten ist.
 * Dieses Array kann in der erbenden Klasse überschrieben werden und damit werden alle für das
 * Anwendungsprogramm implementierten Sprachen festgelegt.
 * Für eine Installation des entwickelten Anwendungsprogramm müssen dann jene Sprachen 
 * ausgewählt werden, die von Anwendern der jeweiligen Installation verwendet werden können.
 * en:
 * METHOD to verify if the code for the language, that is passed as parameter, is defined as
 * 'possible' in the application-program.
 * 'Possible' means, that the code for the language to be verified is contained in the variable 
 * 'arrayApplicationImplementedLanguages'.
 * This array can be overwritten in the inheriting class and this defines all languages that are
 * implemented in the application program.
 * For an installation of the developed application-program, all those languages have to be selected
 * that can be used by users of the dedicated installation. */
    public boolean isLanguageForApplication(String parmLanguageCode) {
/*
 * de:
 * Prüfen, ob der übergebene Parameter nicht 'null' ist; damit werden spätere Fehler verhindert.
 * en:
 * Verify if the passed parameter is not 'null'; that prevents errors later in the code. */
      if (parmLanguageCode == nullreturn false;
/*
 * de:
 * Variablen für die for-Schleife definieren und dann for-Schleife für das Vergleichen beginnen.
 * en:
 * Define the variables for the for-loop and start the for-loop for the comparison thereafter. */
      int intArraySize = arrayApplicationImplementedLanguages.length;
      int intArrayIndex;
      for (intArrayIndex = 0; intArrayIndex < intArraySize; intArrayIndex++) {
/*
 * de:
 * Vergleichen ob der Sprach-Code des untersuchten Array-Elements mit dem Wert im Parameter übereinstimmt.
 * Dann diese Methode abbrechen und 'true' an die aufrufende Methode zurück liefern.
 * en:
 * Compare if the language-code of the inspected array-element is the same as the value passed as parameter.
 * If matching, quit this method and return 'true' to the calling method. */
        if (arrayApplicationImplementedLanguages[intArrayIndex].compareTo(parmLanguageCode) == 0)
            return true;
      }
/*
 * de:
 * Sprach-Code aus dem Parameter nicht im Array der 'möglichen' Sprachen:
 * 'false' an die aufrufende Methode zurück liefern.
 * en:
 * Language-code passed as parameter is not within the array with the 'possible' languages;
 * return false to the calling method. */
      return false;
    }
/*
 * -------------------------------
* de:
 * METHODE zum Lesen aller BO mit den im Anwendungsprogramm definierten, aktuell
 * gültigen Sprachen von der Datenbank.
 * Dabei wird geprüft, ob das letzte Lesen von der Datenbank länger zurück liegt
 * als durch den Wert im Parameter 'parmRefreshPeriodsInSeconds' festgelegt -
 * nur dann wird wieder von der Datenbank gelesen.
 *
 * en:
 * METHOD to read all BO with the actually valid languages, defined in the
 * application program, from the database.
 * Within this method is checked if the last read from the database was longer ago
 * as defined by the parameter 'parmRefreshPeriodInSeconds' - only then a read is
 * done from the database again. */
    private void retrieveJSBS_Language_BOC_Set(int parmRefreshPeriodInSeconds) {
/*
 * de:
 * Prüfen, ob das BOC bereits einmal 'konstruiert' wurde -
 * ansonsten das BOC 'konstruieren'.
 * en:
 * Verify, if the BOC was 'constructed' before; otherwise 'construct' it. */
      if (structJSBS_Language_BOC_Set == null) {
/* de: Konstruieren des BOC.
 * en: Construct the BOC. */
        structJSBS_Language_BOC_Set = new JSBS_Language_BOC_Set(this);
/* de: Damit das Set auf jeden Fall neu gelesen wird, wird ein 'uraltes' Datum gesetzt.
 * en: Set an 'ancient' date so that the Set is read in any case. */
        dteJSBS_Language_BOC_Set_LastRead = new Date(0);
      }
/*
 * de:
 * Berechnen der Sekunden, die seit dem letzten Lesen von der Datenbank vergangen sind.
 * en:
 * Calculate the seconds since the last read from the database. */
      long intTimeDiffInSeconds =
            ((new Date()).getTime() - dteJSBS_Language_BOC_Set_LastRead.getTime()) / 1000;
/*
 * de:
 * Methode abbrechen wenn seit dem letzten Lesen von der Datenbank weniger Zeit vergangen
 * ist als der Wert im Parameter.
 * en:
 * Terminate the method if the time-period since the last read from the database is less
 * than the value passed in the parameter. */
      if (intTimeDiffInSeconds <= parmRefreshPeriodInSeconds) return;
/*
 * de:
 * Prüfen, ob eine Verbindung zum JAS (Java Application Server) aufgebaut werden kann.
 * Der folgende Zugriff auf die Datenbank ist möglicherweise der erste nach dem Starten
 * des Anwendungsprogramms und deswegen wird jetzt geprüft, ob überhaupt eine Verbindung
 * zum JAS möglich ist.
 * en:
 * Verify if a connection to the JAS (Java Application Server) can be established.
 * The following access to the database might be the first one after the start of the
 * application program and therefore, now a check is made if a connection to the JAS
 * is possible. */
      testJASConnection();
/*
 * de: 'Holen' aller zum aktuellen Datum gültigen ISO-Sprach-Codes von der Datenbank.
 * en: Retrieve all ISO-language-codes that are valid at the actual date from the database. */
      structJSBS_Language_BOC_Set.selectAllValid();
/*
 * de:
 * Je nach Status des Datenbank-Zugriffs entscheiden, wie die Verarbeitung weiter gehen soll.
 * en:
 * Decide how to continue the processing depending on the status of the database-access. */
      switch (structJSBS_Language_BOC_Set.StatusCode) {
      case JSBS_BO.CONST_OK:
/* de:
 * Datenbank-Zugriff wie erwartet.
 * Datum des letzten Zugriffs neu setzen und dann normal fortsetzen.
 * en:
 * Database-access as expected.
 * Set the date of the last access and continue normal thereafter. */
          dteJSBS_Language_BOC_Set_LastRead = new Date();
          break;
      case JSBS_BO.CONST_NOT_FOUND:
/* de:
 * Auf der Datenbank wurde keine aktuell gültige Sprache gefunden.
 * Jene Sprache verwenden, die beim Starten des Anwendungsprogramms als Parameter mitgegeben
 * wurde und die jetzt in der Struktur mit den Universal-Parametern zu finden ist.
 * en:
 * Not a single language, that is actually valid, found on the database.
 * Use that language that was passed as parameter when the application was started; that 
 * language can be found within the structure with the Universal-Parameters. */
          JSBS_Language_BO locBO = new JSBS_Language_BO();
          locBO.ISOLanguageCodestructJSBS_UniversalParameters.strLanguageCode;
          structJSBS_Language_BOC_Set.vecRecordSet.addElement(locBO);
          structJSBS_Language_BOC_Set.buildRawDataVector();
          break;
      default:
/* de:
 * Sonstiger Status aufgetreten.
 * Bedingt durch den Datenbank-Zugirff (select) kann es nur ein Fehler der Datenbank sein
 * der nicht umgangen werden kann.
 * Methode zur Fehlerbehandlung aufrufen.
 * en:
 * Another status occured.
 * In consequence of the database-access (select) it can only be an error of the database
 * which can not be bypassed.
 * Call the method to handle an Error. */
          handleErrorEvent(this.getClass().getName(), "retrieveJSBS_Language_BOC_Set_DBError",
                           Integer.toString(structJSBS_Language_BOC_Set.StatusCode),
                           structJSBS_Language_BOC_Set.StatusMsg);
      }
    }
/*
 * -------------------------------
 * de:
 * Wrapper-METHODE zum Ermitteln der Sprach-Bezeichnung (LanguageName).
 * Der Code für die 'richtige Arbeit' ist in der nachfolgenden Methode.
 * Als Sprach-Code für die Anzeige des Sprach-Namens wird die vom Anwender gewählte
 * Sprache als Parameter übergeben.
 *
 * en:
 * Wrapper-METHOD to get the language-name.
 * The code for the 'real work' is in the following method.
 * As language-code for the display of the language-name the one assigned to the user
 * is passed. */
    private String getLanguageName(String parmISOLanguageCode) {
      return getLanguageName(parmISOLanguageCode, structJSBS_UniversalParameters.strLanguageCode);
    }
/*
 * de:
 * METHODE zum Ermitteln der Sprach-Bezeichnung (LanguageName) für die im Parameter
 * 'parmISOLanguageCode' Sprache in der im 'parmLanguageCodeForLabelling'
 * übergebenen Wert für die Sprache.
 *
 * en:
 * METHOD to get the language-name for the language passed in the parameter
 * 'parmISOLanguageCode'. The language for the language-name is passed in the parameter
 * 'parmLanguageCodeForLabelling'. */
    private String getLanguageName(String parmISOLanguageCode, String parmLanguageCodeForLabelling) {
/*
 * de:
 * Prüfen, ob der übergebene Parameter 'parmISOLanguageCode' einen null-Wert enthält.
 * In diesem Fall diese Methode sofort beenden und eine leere Zeichenkette zurück liefern.
 * en:
 * Verify, if the passed parameter 'parmISOLanguageCode' contains a null-value.
 * In that case terminate the method immediately and return an empty string. */
      if (parmISOLanguageCode == null) return "";
/*
 * de:
 * Wenn der Wert im 'parmLanguageCodeForLabelling' null ist, wird der Parameter
 * durch den Sprach-Code, der dem Anwender zugeordnet ist, ersetzt.
 * en:
 * If the value in 'parmLanguageCodeForLabelling' is null, the the parameter is
 * replaced by the language-code assigned to the user. */
      if (parmLanguageCodeForLabelling == null)
          parmLanguageCodeForLabelling = structJSBS_UniversalParameters.strLanguageCode;
/*
 * de: Einzelnes BO aus dem Vector für die Bearbeitung innerhalb der for-Schleife.
 * en: Single BO out of the vector for processing within the for-loop. */
      JSBS_Language_BO locJSBS_Language_BO;
/*
 * de: Zeichenkette für den Wert der aus dieser Methode zurück geliefert wird.
 * en: String for the value that is returned from this method. */
      String strReturnValue = "";
/*
 * de:
 * Variable für die Steuerung der for-Schleife definieren und for-Schleife beginnen.
 * en:
 * Define the variables to control the for-loop and start the for-loop. */
      int intArraySize = structJSBS_Language_BOC_Set.vecRecordSet.size();
      int intArrayIndex;
      for (intArrayIndex = 0; intArrayIndex < intArraySize; intArrayIndex++) {
/*
 * de: Indiziertes Element aus dem Vector auslesen.
 * en: Read the indexed element out of the vector. */
        locJSBS_Language_BO = (JSBS_Language_BO)
                structJSBS_Language_BOC_Set.vecRecordSet.elementAt(intArrayIndex);
/*
 * de:
 * Die folgenden 'if' könnten auch als eine Bedingung geschrieben werden. 
 * Damit die Teil-Bedingungen verständlicher kommentiert werden können wird die
 * Redundanz in Kauf genommen.
 * en:
 * The following 'if' could be written as a single condition.
 * It allows more understandable comments if the conditions are split into parts -
 * therefore the redundancy is accepted. */
/*
 * de: Zuerst prüfen, ob der Sprach-Code überhaupt zutrifft.
 * en: Verify first if the language-code fits. */
        if (locJSBS_Language_BO.ISOLanguageCode.compareTo(parmISOLanguageCode) == 0) {
/*
 * de:
 * Wenn beide Parameter übereinstimmen dann wurde die eindeutige Bezeichnung für
 * die Sprache gefunden. Den Namen der Sprache zurück liefern und Methode beenden.
 * en:
 * If both parameters fit, then the unique name for the language was found.
 * Return the name of the language and end this method. */
          if (locJSBS_Language_BO.LanguageCodeForLabelling.compareTo(parmLanguageCodeForLabelling) == 0)
            return locJSBS_Language_BO.LanguageName;
/*
 * de:
 * Wenn der Datensatz aus dem Vector die Standard-Sprache abbildet, dann wird die 
 * Bezeichnung für die Sprache in der Zeichenkette für die Rückgabe aufgehoben.
 * Möglicherweise folgt noch ein Datensatz mit genauer Übereinstimmung der beiden
 * Parameter-Werte.
 * en:
 * If the dataset from the vector is the one for the default-language, then the
 * language-name is stored in the string for return.
 * Potentially a dataset with the exact comparison to both parameter-values follows. */
          if (   (locJSBS_Language_BO.LanguageCodeForLabelling.trim().length() <= 0)
              && (strReturnValue.length() <= 0))
            strReturnValue = locJSBS_Language_BO.LanguageName;
        }
        else {
/*
 * de:
 * Wenn der Sprach-Code nicht mit dem Parameter-Wert übereinstimmt und die Zeichenkette
 * für den Namen der Sprache einen Wert enthält dann bedeutet das, dass für den gesuchten
 * Wert in 'parmISOLanguageCode' ein Standard-Wert gefunden wurde.
 * Diesen Standard-Wert jetzt zurück liefern.
 * en:
 * If the language-code is not equal to the value passed in the parameter  
 * 'parmISOLanguageCode' and the string for the language-name contains a value, then
 * the 'default'-language-name for the value passed in parameter 'parmISOLanguageCode.
 * Return this default-language-name now. */
          if (strReturnValue.length() > 0)
            return strReturnValue;
        }
     }
/*
 * de:
 * Wenn keine Bezeichnung für die Parameter gefunden wurde dann ist die Zeichenkette noch
 * immer leer. Zeichenkette jetzt zurück liefern.
 * en:
 * If a language-name was not found for the parameters, then the string is still empty.
 * Return the string now. */
      return strReturnValue;
    }
/*
 * -------------------------------
 * de:
 * Wrapper-METHODEN für das Füllen einer Combobox mit der Auswahlliste für die Sprachen.
 *
 * en:
 * Wrapper-METHOD to fill a combo-box with the selection-list for the languages. */
    public void fillLanguageComboBox(JComboBox parmJComboBox) {
      fillLanguageComboBoxWithExclusions(parmJComboBox, 0, null, 600, null);
    }
/* ***** */
    public void fillLanguageComboBox(JComboBox parmJComboBox,
                                      int parmLanguageMarkerNumber) {
      fillLanguageComboBoxWithExclusions(parmJComboBox, parmLanguageMarkerNumber,
                                      null, 600, null);
    }
/* ***** */
    public void fillLanguageComboBox(JComboBox parmJComboBox,
                                      String parmDisplayLanguageCode) {
      fillLanguageComboBoxWithExclusions(parmJComboBox, 0,
                                      parmDisplayLanguageCode, 600, null);
    }
/* ***** */
    public void fillLanguageComboBox(JComboBox parmJComboBox,
                                      int parmLanguageMarkerNumber,
                                      String parmDisplayLanguageCode) {
      fillLanguageComboBoxWithExclusions(parmJComboBox, parmLanguageMarkerNumber,
                                      parmDisplayLanguageCode, 600, null);
    }
/* ***** */
    public void fillLanguageComboBox(JComboBox parmJComboBox,
                                      int parmLanguageMarkerNumber,
                                      String parmDisplayLanguageCode,
                                      int parmRefreshPeriodInSeconds) {
      fillLanguageComboBoxWithExclusions(parmJComboBox, parmLanguageMarkerNumber,
                                      parmDisplayLanguageCode, parmRefreshPeriodInSeconds, null);
    }
/* ***** */
    public void fillLanguageComboBoxWithExclusions(JComboBox parmJComboBox,
                                                  Vector<String> parmExclusionList) {
      fillLanguageComboBoxWithExclusions(parmJComboBox, 0,
                                      null, 600, parmExclusionList);
    }
/* ***** */
    public void fillLanguageComboBoxWithExclusions(JComboBox parmJComboBox,
                                                  int parmLanguageMarkerNumber,
                                                  Vector<String> parmExclusionList) {
      fillLanguageComboBoxWithExclusions(parmJComboBox, parmLanguageMarkerNumber,
                                      null, 600, parmExclusionList);
    }
/* ***** */
    public void fillLanguageComboBoxWithExclusions(JComboBox parmJComboBox,
                                                  String parmDisplayLanguageCode,
                                                  Vector<String> parmExclusionList) {
      fillLanguageComboBoxWithExclusions(parmJComboBox, 0,
                                      parmDisplayLanguageCode, 600, parmExclusionList);
    }
/* ***** */
    public void fillLanguageComboBoxWithExclusions(JComboBox parmJComboBox,
                                                  int parmLanguageMarkerNumber,
                                                  String parmDisplayLanguageCode,
                                                  Vector<String> parmExclusionList) {
      fillLanguageComboBoxWithExclusions(parmJComboBox, parmLanguageMarkerNumber,
                                      parmDisplayLanguageCode, 600, parmExclusionList);
    }
/*
 * de:
 * METHODE zum Füllen einer JComboBox (im Parameter 'parmJComboBox' übergeben)
 * mit den Sprachen, die für die Installation des Anwendungsprogramms erfasst sind.
 * Diese Methode hat die maximale Anzahl an Parametern mit denen die Auswahl der
 * Sprachen gesteuert werden kann.
 * 'parmLanguageMarkerNumber' ist die Einschränkung auf einen Marker für einen
 *      Themenbereich für den die Sprache 'zugelassen' ist.
 *      Ist der Wert in diesem Parameter '0' dann werden alle Sprachen zur Auswahl
 *      in der Combobox angezeigt.
 * 'parmDisplayLanguageCode' ist die Festlegung, in welcher Sprache die Bezeichnung
 *      ('LanguageName') angezeigt werden soll.
 *      Ist der übergebene Wert 'null' dann wird der vom Anwender gewählte Sprach-Code
 *      (aus 'structJSBS_UniversalParameters.strLanguageCode') verwendet.
 * 'parmRefreshPeriodInSeconds' legt fest, in welchem Intervall das Set mit den
 *      Sprachen von der Datenbank gelesen wird.
 * 'parmExclusionList' enthält eine Liste mit jenen Sprach-Codes, die nicht in der
 *      Auswahlliste der Combobox angezeigt werden sollen.
 *
 * en:
 * METHOD to fill a JComboBox (passed in the parameter 'parmJComboBox') with the
 * languages that are recorded at an installation of the application-program.
 * This method has the maximum number of parameters to control the selection of
 * the languages.
 * 'parmLanguageMarkerNumber' is the limitation to one Marker for an area the
 *      language is 'permitted'.
 *      If tha value of this parameter is '0', then all languages are displayed
 *      in the combo-box for selection.
 * 'parmDisplayLanguageCode' is the definition, in which language the
 *      'LanguageName' should be displayed.
 *      If the passed parameter is 'null', the language-code for the user
 *      (defined in 'structJSBS_UniversalParameters.strLanguageCode') is used.
 * 'parmRefreshPeriodInSeconds' defines, in which time interval the set of
 *      languages is read from the database.
 * 'parmExclusionList' contains a list of all language-codes, that should not
 *      be displayed in the list of the combo-box. */
    public void fillLanguageComboBoxWithExclusions(JComboBox parmJComboBox,
                                                  int parmLanguageMarkerNumber,
                                                  String parmDisplayLanguageCode,
                                                  int parmRefreshPeriodInSeconds,
                                                  Vector<String> parmExclusionList) {
/*
 * de:
 * Jeden Parameter prüfen, ob eventuell ein 'null'-Wert übergeben wurde und
 * in jedem Fall eine Korrektur ausführen.
 * en:
 * Verify each parameter if a null-value was passed and do corrective processing
 * in each case. */
/*
 * de:
 * Wenn keine Combobox übergeben wurde dann kann auch keine gefüllt werden.
 * Methode sofort abbrechen.
 * en:
 * If a combo-box was not passed - no one can be filled.
 * Terminate the method immediately. */
      if (parmJComboBox == null) return;
/*
 * de:
 * Wenn kein Sprach-Code für die Anzeige des Währungs-Namens übergeben wird dann wird
 * die vom Anwender gewählte Sprache verwendet.
 * en:
 * If no language-code for the display of the currency-name was passed, then the
 * language chosen by the user is used. */
      if (parmDisplayLanguageCode == null)
              parmDisplayLanguageCode = structJSBS_UniversalParameters.strLanguageCode;
/*
 * de:
 * Wenn kein Vector mit den aus der Combobox-Liste auszunehmenden Sprach-Codes
 * übergeben wird, wird ein leerer Vector 'konstruiert'.
 * en:
 * If no Vecor with the language-codes, that should be excluded from the combo-box-list,
 * was passed, then an empty Vector is 'constructed'. */
      if (parmExclusionList == null) parmExclusionList = new Vector<String>();
/*
 * de:
 * Methode aufrufen die prüft, ob der Zeit-Intervall seit dem letzten Lesen von der
 * Datenbank überschritten wurde und bei Bedarf das Set mit den Sprachen von der
 * Datenbank neu lesen.
 * en:
 * Call the method that checks, if the time-interval since the last retrieve from
 * the database is expired and to re-read the set with the languages from the database
 * if needed. */
      retrieveJSBS_Language_BOC_Set(parmRefreshPeriodInSeconds);
/*
 * de:
 * Ein BOC-Set konstruieren in dem später jene Sprachen aufgenommen werden, die
 * für die Auswahlliste in der Combobox ausgewählt sind.
 * en:
 * Construct a BOC-Set that later will be filled with those languages that are 
 * selected for the display of the selection list within the combo-box. */
      JSBS_Language_BOC_Set structJSBS_Language_BOC_Set_For_ComboBox =
              new JSBS_Language_BOC_Set(this);
/*
 * de:
 * Variable für die Steuerung der for-Schleife definieren und for-Schleife beginnen.
 * en:
 * Define the variables to control the for-loop and start the for-loop. */
      int intVectorSize = structJSBS_Language_BOC_Set.vecRecordSet.size();
      int intVectorIndex;
      for (intVectorIndex = 0; intVectorIndex < intVectorSize; intVectorIndex++) {
/*
 * de:
 * Neues BO für das spätere Einfügen in den Vector für die Anzeige konstruieren
 * und indiziertes Element aus dem Vector auslesen.
 * en:
 * Construct a new BO for later insertion into the vector for display and read
 * the indexed element out of the vector. */
        JSBS_Language_BO structJSBS_Language_BO_Indexed = new JSBS_Language_BO();
        structJSBS_Language_BO_Indexed = (JSBS_Language_BO)
                structJSBS_Language_BOC_Set.vecRecordSet.elementAt(intVectorIndex);
/*
 * de:
 * Für die Anzeige werden nur die Datensätze mit der Standard-Bezeichnung für 
 * den Sprachen-Namen herangezogen. Diese sind daran erkennbar, dass der Wert
 * im Attribut 'LanguageCodeForLabelling' eine leere Zeichenkette ist.
 * Bei anderen Werten nächsten Durchlauf der for-Schleife beginnen.
 * en:
 * For the display only datasets with the default-language-name are considered.
 * Those can be identified by an empty string as value in the attribut
 * 'LanguageCodeForLabelling'. If there is another value continue with the
 * next pass of the for-loop. */
        if (structJSBS_Language_BO_Indexed.LanguageCodeForLabelling.trim().length() > 0)
            continue;
/*
 * de:
 * Prüfen, ob der Sprach-Code in der Liste mit den auszunehmenden Codes enthalten ist. 
 * In diesem Fall ebenfalls mit dem nächsten Durchlauf der for-Schleife fortsetzen.
 * en:
 * Verify, if the language-code is in the list with the codes to be excluded.
 * In that case, continue with the next pass of the for-loop, too. */
        if (isValueInVector(parmExclusionList, structJSBS_Language_BO_Indexed.ISOLanguageCode))
            continue;
/*
 * de:
 * Prüfen, ob für den Marker-Wert aus dem Parameter der entsprechende Marker 
 * im Datensatz enthalten ist.
 * Bei einem Parameter-Wert '0' werden alle Datensätze in die Anzeigeliste aufgenommen.
 * en:
 * Verify if, for the Marker-value from the parameter, a fitting Marker is within the
 * dataset.
 * If the parameter-value is '0', all datasets are included in the list for display. */
        if (   (parmLanguageMarkerNumber == 0)
            || ((parmLanguageMarkerNumber == 1) && (structJSBS_Language_BO_Indexed.Marker01))
            || ((parmLanguageMarkerNumber == 2) && (structJSBS_Language_BO_Indexed.Marker02))
            || ((parmLanguageMarkerNumber == 3) && (structJSBS_Language_BO_Indexed.Marker03))
            || ((parmLanguageMarkerNumber == 4) && (structJSBS_Language_BO_Indexed.Marker04))
            || ((parmLanguageMarkerNumber == 5) && (structJSBS_Language_BO_Indexed.Marker05))
            || ((parmLanguageMarkerNumber == 6) && (structJSBS_Language_BO_Indexed.Marker06))
            || ((parmLanguageMarkerNumber == 7) && (structJSBS_Language_BO_Indexed.Marker07))
            || ((parmLanguageMarkerNumber == 8) && (structJSBS_Language_BO_Indexed.Marker08))
            || ((parmLanguageMarkerNumber == 9) && (structJSBS_Language_BO_Indexed.Marker09))
            || ((parmLanguageMarkerNumber == 10) && (structJSBS_Language_BO_Indexed.Marker10))
            || ((parmLanguageMarkerNumber == 11) && (structJSBS_Language_BO_Indexed.Marker11))
            || ((parmLanguageMarkerNumber == 12) && (structJSBS_Language_BO_Indexed.Marker12))
            || ((parmLanguageMarkerNumber == 13) && (structJSBS_Language_BO_Indexed.Marker13))
            || ((parmLanguageMarkerNumber == 14) && (structJSBS_Language_BO_Indexed.Marker14))
            || ((parmLanguageMarkerNumber == 15) && (structJSBS_Language_BO_Indexed.Marker15))
            || ((parmLanguageMarkerNumber == 16) && (structJSBS_Language_BO_Indexed.Marker16))
            || ((parmLanguageMarkerNumber == 17) && (structJSBS_Language_BO_Indexed.Marker17))
            || ((parmLanguageMarkerNumber == 18) && (structJSBS_Language_BO_Indexed.Marker18))
            || ((parmLanguageMarkerNumber == 19) && (structJSBS_Language_BO_Indexed.Marker19))
            || ((parmLanguageMarkerNumber == 20) && (structJSBS_Language_BO_Indexed.Marker20))
           ) {}
/*
 * de:
 * Marker stimmt nicht überein; mit dem nächste Durchlauf der for-Schleife fortsetzen.
 * en:
 * Marker does not fit; continue with the next pass of the for-loop. */
        else continue;
/*
 * de:
 * Wenn der Code bis hierher ausgeführt wurde dann soll die Sprache in der Auswahlliste 
 * der Combobox angezeigt werden.
 * Noch die Bezeichnung der Sprache in der gewünschten Sprache ermitteln.
 * en:
 * If the code was executed till here then the language should be added to the
 * selection-list of the combo-box.
 * Finally, get the language-name in the chosen language. */
       structJSBS_Language_BO_Indexed.LanguageName =
               getLanguageName(structJSBS_Language_BO_Indexed.ISOLanguageCode,
                               parmDisplayLanguageCode);
/*
 * de:
 * Das einzelne BO für einen Eintrag in der Auswahlliste der Combobox in den 
 * Vector für den Aufbau der Combobox einfügen.
 * en:
 * Add the single BO for one entry in the selection-list of the combo-box into
 * the vector for the build of the combo-box. */
        structJSBS_Language_BOC_Set_For_ComboBox.vecRecordSet.addElement(structJSBS_Language_BO_Indexed);
      }
/*
 * de:
 * Vector mit den Rohdaten im BOC aufbauen und Combobox füllen.
 * en:
 * Build the vector with raw-date within the BOC and fill the combo-box. */
     structJSBS_Language_BOC_Set_For_ComboBox.buildRawDataVector();
     String[] arrayComboBoxArrangement = {"ISOLanguageCode", " - ", "LanguageName"};
     JSBS_GUIServices.setListToJComboBox(parmJComboBox,
                               structJSBS_Language_BOC_Set_For_ComboBox.vecRawDisplayData,
                               arrayComboBoxArrangement);
   }
}

zum Inhaltsverzeichnis

Erklärungen und Anwendungsbeispiele

XXX 

zum Inhaltsverzeichnis

Verwandte Dokumentation

Dokument

Inhalt

Tutorial: JavaScout ProjectAssist, Start-Frame Grundlagen (Java_Fatclient_01) – Klasse für das StartFrame eröffnen > Code am Ende des Schrittes  

Dieser Schritt des Tutorials beschreibt im Detail, wie eine Klasse für ein Start-Frame eines Anwendungsprogramms (Command-Center) eröffnet wird und wie dabei von der hier dokumentierten Basisklasse 'geerbt' wird.

Leitfaden für die Entwicklung von Heavyweight-Clients mit dem JS-FCF – Alle Schritte zur Entwicklung des StartFrames  

Dieser Leitfaden enthält die notwendigen Tätigkeiten für die Entwicklung eines StartFrame eines Anwendungsprogramms (auch als Command-Center bekannt). Dabei wird auch von dieser Basisklasse 'geerbt' und erläutert wann und wie einzelne Methoden dieser Basisklasse vom StartFrame des Anwendungsprogramms aufgerufen werden müssen. 

zum Inhaltsverzeichnis