> Inhalt: JavaScout Base-System (JSBS)

JSBS_UnstoredChangesDialog – Basisklasse mit Methoden zur Anzeige des Hinweises, dass Daten geändert aber nicht gespeichert wurden.

* 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:
2010-05-14

Inhaltsverzeichnis

Code 
Erklärungen und Anwendungsbeispiele 
Verwandte Dokumentation
 

Code

package js_base.frame;

import
java.awt.*;
import
java.awt.event.*;
import
java.net.*;
import
javax.swing.*;

import
js_base.bo.JSBS_BO;
import js_base.boc.JSBS_FramePosition_BOC;
import js_base.xml.JSBS_XML_ErrorMessages;

/**
 *
 * @author kurt[at]javascout(dot)biziz
 * @date 2008-08-04
 *
 * @description
 * de:

 *  Frame zum Anzeigen einer Rückfrage an den Anwender wenn Daten geändert aber nicht
 *  gespeichert wurden.
 * 
 *  Diese Klasse kann 'konstruiert' werden wenn das Fenster geschlossen werden soll oder

 *  die Daten eines anderen Datensatzes angezeigt werden sollen obwohl die angezeigten
 *  Daten verändert und noch nicht gespeichert wurden.
 *
 *  Der Text zur Anzeige der Information wird aus der XML-Struktur in der Datei
 *  'ErrorMessages.xml' (im Verzeichnis TEXT.ln - wobei ln durch den ISO-code der Sprache
 *  ersetzt wird) gelesen.
 * en:

 *  Frame to inform the user that displayed data was changed and not already stored and to
 *  get a confirmation from the user what to do.
 * 
 *  This class can be constructed when the window should be closed or data of another dataset

 *  should be displayed and the already displayed data was changed and not already saved.
 *
 *  The informative text is held in a XML-structure in the file named 'ErrorMessages.xml'
 *  in the directory TEXT.ln (where ln is replaced by the ISO-code of the language).
 *
 * @change-log
 * when      who          why
 * --------------------------------------------------------
 *
 */

public class JSBS_UnstoredChangesDialog extends JDialog
                            
implements ActionListener, KeyListener, WindowListener {
/*
 * de:

 * Referenz auf das 'Start-Frame', auch als 'CommandCenter' oder 'CC' bezeichnet.
 * Das 'CC' enthält die generellen Werte des Anwendungsprogramms.
 * en:
 * Reference to the 'Start-Frame', also referred as 'Command-Center' or 'CC'.
 * The 'CC' helds general values of the application. */
    
private JSBS_StartFrame frmCC = null;
/*
 * de:

 * Frame in dem das Ereignis ausgelöst wurde und welches gesperrt ist
 * solange dieser Dialog angezeigt wird.
 * en:
 * Frame where the Error- or Warning-Event was triggered and which is locked
 * as long as this Dialog is shown. */
    
private JSBS_TaskFrame frmParent = null;
/*
 * de: Variable die beim Aufrufen des 'Constructors' übergeben wurden.

 * en: Variables that are passed with the call of the constructor. */
    
private boolean bol_Storeable;
/*
 * de: Wert mit der Auswahl des Anwenders (über die Schaltfläche) in diesem Dialog.

 * en: Values with the choice of the user (clicking a Button) in this dialog. */
    
public static String CONST_PROCESS_STORE = "S";
    
public static String CONST_PROCESS_DISCARD = "D";
    
public static String CONST_PROCESS_BACK = "B";
    public String strProcessIndicator = "";
/*
 * de: Text für den Hinweis an den Anwender (aus der Datei mit der XML-Struktur).

 * en: text with the information for the user (from the file with the XML-structure). */
    
private String strUserInfoText = "";
/*
 * de: Name der Datei mit dem Graphischen Symbol für die Schaltfläche 'btn_WarningIcon'.

 * en: Name of the file with the Icon for the Button 'btn_WarningIcon'. */
    
private String strIconFileNameIncludingDirectory = "";
/*
 * de:
 * Text der in der 'Title-Bar' des aufrufenden Frames angezeigt wird.
 * Als Teil der Information angezeigt, die dem Anwender Hinweise gibt, welches Frame
 * betroffen ist wenn er das gesamte Anwendungsprogramm beendet und damit die noch
 * offenen Task-Frames automatisch geschlossen werden.

 * en:
 * Text of the 'Title-Bar' of the calling Frame.
 * Shown as part of the Information to give the user guidance, which frame ist concerned
 * when he closes the whole application and thereby open task-frames automatically. 
*/
    
private String strCallingFrameTitleBarText = "";
/*
 * de:
 * Schaltfläche die 'angeklickt' wird wenn die Eingabe-Taste auf der Tastatur
 * betätigt wird.
 * Diese Variable kann dynamisch durch das Anwendungsprogramm mit einem Wert versorgt
 * werden und damit kann dem Anwender signalisiert werden welche Schaltfläche als
 * nächstes empfohlen wird.
 * en:
 * Button that is 'clicked' 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. */
   private JButton btnEnterTriggeredButton = null;
/*
 * de:
 * Flags (Merker) zum merken ob 'Modifier'-Tasten (Alt, Steuerung, Umschalten)
 * betätigt wurden,
 * Diese Merker werden gebraucht weil Tasten-Kombinationen 'hintereinander' von der
 * Tastatur an das Anwendungsprogramm 'geliefert' werden
 * en:
 * Flags to keep if 'modifier'-keys were typed.
 * Those flags are necessary as key-combinations are delivered from the keyboard
 * to the application as sequential key-strokes. */
   private boolean bolAltKeyModifier = false;
   private boolean bolCtrlKeyModifier = false;
   private boolean bolShiftKeyModifier = false;
/*
 * de:
 * Business-Object, dass die Information über Größe (Breite, Höhe) und Position
 * (Abstand zwischen linker oberer Ecke des Monitors und linker oberer Ecke des Frames)
 * in Bildpunkten speichert.
 * Weiters enthält dieses BO 10 Arrays für die Aufnahme von Spaltenbreiten von JTables.
 * Diese Struktur kann von Task-Frames, die von dieser Basisklasse erben, verwendet werden.
 * en:

 * Business-Object that stores the information about the Frame-Size (width, height)
 * and Position (distance between the upper-left corner of the frame from the
 * upper-left corner of the display-screen) in pixels.
 * Further, this BO holds 10 arrays to describe the column-widths of JTables.
 * Those structure can be utilized by Task-Frames inheriting this base-class. */
   public JSBS_FramePosition_BOC structJSBS_FramePosition_BOC;
/*
 * de: GUI-Elemente für das Layout des Dialogs.

 * en: GUI-elements for the layout of the dialog. */
     protected JPanel pnl_Main;
     protected JScrollPane pnl_UserInfoScroll;
     protected JTextArea txt_UserInfo;
     protected JButton btn_WarningIcon;
     protected JButton btn_Back;
     protected JButton btn_Store;
     protected JButton btn_Discard;
/*
 * -------------------------------
 * de: Constructor dieser Klasse.

 * en: Constructor of this class. */
    public JSBS_UnstoredChangesDialog(JSBS_TaskFrame parmParent, boolean parmStoreable) {
/*
 * de:
 * Superklasse verwenden um diesen Dialog an ein Frame zu binden und den Dialog
 * 'modal' zu machen. 'Modal' bedeutet, dass das Frame für Eingaben des Benutzers
 * 'gesperrt' ist solange der Dialog angezeigt wird.
 * en:

 * Use the superclass to 'attach' this Dialog to a Frame and make it 'modal'.
 * 'Modal' means, that the Frame is 'locked' (for user-entries) while the Dialog
 * is shown. */
      
super(parmParent, true);
/*
 * de: Übertragen der als Parameter übergebenen Werte auf die Variablen dieser Klasse.

 * en: Transfer the values passed as parameters to the variables of this class. */
      frmCC = parmParent.frmCC;
      frmParent = parmParent;
      bol_Storeable = parmStoreable;
/*
 * de:

 * Setzen einer Standard-Auswahl für den Fall, dass der Anwender das Dialog-Fenster
 * schließt ohne eine Auswahl per Schaltfläche gewählt zu haben.
 * en:
 * Set a selection for the case that the user closes the Dialog-window without clicking
 * a Button for a choice. */
      if (bol_StoreablestrProcessIndicator CONST_PROCESS_STORE;
      else strProcessIndicator CONST_PROCESS_DISCARD;
/*
 * de: Starten der Verarbeitung des Codes

 * en: Start processing of the code. */
      initialize_before_frame();
      initialize_frame();
      initialize_after_frame();
    }

/*
 * -------------------------------
 * de: Methode mit dem Code der ausgeführt wird bevor die GUI aufgebaut wird.

 * en: Method with code that is executed before the GUI is built. */
    private void initialize_before_frame() {
/*
 * de:
 * 'Konstruieren' des BOC mit den Positions-Informationen des Fensters
 * und bestimmter GUI-Elemente (z.B. die Breite der Spalten in einer JTable).
 * en:
 * 'Construct'
the BOC containing Position-informations of the frame
 * and certain GUI-Elements (e.g. column-size within a JTable). */
      structJSBS_FramePosition_BOC = new JSBS_FramePosition_BOC(frmParent);
    }
/*
 * de: Methode mit dem Code zum Aufbau der Benutzer-Oberfläche (GUI).

 * en: Method with code to build the User-Interface (GUI). */
    private void initialize_frame() {
/*
 * de: Fenster ('Dialog') mit der GUI 'bauen'.

 * en: Build the GUI-window ('Dialog'). */
        setSize(700, 550);
        setContentPane(get_pnl_Main());
/*
 * de:
 * Bearbeiten der GUI-Elemente mit den sprach-spezifischen Texten und
 *
anderen Layout-Spezifikationen.
 * en:
 *
Process the GUI-Elements with the language-specific texts and other
 *
layout-specifications. */
        JSBS_GUIServices.processLanguageDependantElements(frmCC, this);
        JSBS_GUIServices.setButtonBorders(get_pnl_Main(),frmCC.structJSBS_UniversalParameters);
        JSBS_GUIServices.setPanelBorders(get_pnl_Main(),frmCC.structJSBS_UniversalParameters);
/*
 * de: Informations-Text auf die GUI-Elemente übertragen.
 * en: Transfer the information-text to the GUI-elements. */
        fillGUIElementsWithValues();
/*
 * de: Schaltfläche, die durch die 'Eingabe'-Taste ausgelöst wird festlegen und Rand färben.
 * en: Define the Button that is triggered by the 'Enter'-Key and color the border. */
        btnEnterTriggeredButton = get_btn_Back();
        JSBS_GUIServices.setButtonBorders(get_pnl_Main(),
                                          frmCC.structJSBS_UniversalParameters,
                                          get_btn_Back());
/*
 * de: Listeners zu den GUI-Elementen hinzufügen.

 * en: Add the Listeners to the GUI-elements. */
        addListeners(get_pnl_Main());
/*
 * de: Größe und Position des Fenster beim letzten Schließen wieder herstellen.

 * en: Restore size and position at the time of last closing. */
        setFramePosition();
/*
 * de: Dialog anzeigen.

 * en: Show the Dialog. */
        setVisible(true);
    }
/*
 * de: Methode mit dem Code der nach der Anzeige der GUI ausgeführt wird.

 * en: Method with code to be processed after the GUI was shown. */
    private void initialize_after_frame() {
/*
 * Will contain the processing for writing to the Log-File. */
    }
/*
 * ********************
 * de: GUI-Elemente erstellen.

 * en: Create the GUI-elements. */
    protected JPanel get_pnl_Main() {
/* 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());
/*
 * Define GridBagConstraints for the element to be added. */
          GridBagConstraints gbc_pnl_UserInfoScroll = new GridBagConstraints();
          gbc_pnl_UserInfoScroll.
gridx = 0;
          gbc_pnl_UserInfoScroll.
gridy = 0;
          gbc_pnl_UserInfoScroll.
gridwidth = 2;
          gbc_pnl_UserInfoScroll.
gridheight = 6;
          gbc_pnl_UserInfoScroll.fill = GridBagConstraints.BOTH;
          gbc_pnl_UserInfoScroll.
weightx = 5;
          gbc_pnl_UserInfoScroll.
weighty = 0;
          gbc_pnl_UserInfoScroll.
anchor = GridBagConstraints.CENTER;
          gbc_pnl_UserInfoScroll.
insets = new Insets(3,3,3,3);
/* Add the element to the panel; element-position is controlled by GridBagConstraints. */
          get_pnl_Main().add(get_pnl_UserInfoScroll(), gbc_pnl_UserInfoScroll);
/*
 * Define GridBagConstraints for the element to be added. */
          GridBagConstraints gbc_btn_WarningIcon = new GridBagConstraints();
          gbc_btn_WarningIcon.
gridx = 2;
          gbc_btn_WarningIcon.
gridy = 0;
          gbc_btn_WarningIcon.
gridwidth = 1;
          gbc_btn_WarningIcon.
gridheight = 3;
          gbc_btn_WarningIcon.
fill = GridBagConstraints.BOTH;
          gbc_btn_WarningIcon.
weightx = 1;
          gbc_btn_WarningIcon.
weighty = 1;
          gbc_btn_WarningIcon.
anchor = GridBagConstraints.CENTER;
          gbc_btn_WarningIcon.
insets = new Insets(3,3,3,3);
/* Add the element to the panel; element-position is controlled by GridBagConstraints. */
          get_pnl_Main().add(get_btn_WarningIcon(), gbc_btn_WarningIcon);
/*
 * Define GridBagConstraints for the element to be added. */
          GridBagConstraints gbc_btn_Back = new GridBagConstraints();
          gbc_btn_Back.
gridx = 2;
          gbc_btn_Back.
gridy = 3;
          gbc_btn_Back.
fill = GridBagConstraints.BOTH;
          gbc_btn_Back.
weightx = 1;
          gbc_btn_Back.
weighty = 1;
          gbc_btn_Back.
anchor = GridBagConstraints.CENTER;
          gbc_btn_Back.
insets = new Insets(3,3,3,3);
/* Add the element to the panel; element-position is controlled by GridBagConstraints. */
          get_pnl_Main().add(get_btn_Back(), gbc_btn_Back);
/*
 * Define GridBagConstraints for the element to be added. */
          GridBagConstraints gbc_btn_Store = new GridBagConstraints();
          gbc_btn_Store.
gridx = 2;
          gbc_btn_Store.
gridy = 4;
          gbc_btn_Store.
fill = GridBagConstraints.BOTH;
          gbc_btn_Store.
weightx = 1;
          gbc_btn_Store.
weighty = 1;
          gbc_btn_Store.
anchor = GridBagConstraints.CENTER;
          gbc_btn_Store.
insets = new Insets(3,3,3,3);
/* Add the element to the panel; element-position is controlled by GridBagConstraints. */
          get_pnl_Main().add(get_btn_Store(), gbc_btn_Store);
/*
 * Define GridBagConstraints for the element to be added. */
          GridBagConstraints gbc_btn_Discard = new GridBagConstraints();
          gbc_btn_Discard.
gridx = 2;
          gbc_btn_Discard.
gridy = 5;
          gbc_btn_Discard.
fill = GridBagConstraints.BOTH;
          gbc_btn_Discard.
weightx = 1;
          gbc_btn_Discard.
weighty = 1;
          gbc_btn_Discard.
anchor = GridBagConstraints.CENTER;
          gbc_btn_Discard.
insets = new Insets(3,3,3,3);
/* Add the element to the panel; element-position is controlled by GridBagConstraints. */
          get_pnl_Main().add(get_btn_Discard(), gbc_btn_Discard);
        }
        
catch (Throwable Exc) {
          System.
out.println("Error while building pnl_Main in class JSBS_UnstoredChangesDialog");
          Exc.printStackTrace();
        }
      }
      return pnl_Main;
    }
/*
 * ******************** */
    public JScrollPane get_pnl_UserInfoScroll() {
/* Auto-create the GUI-element if it does not already exist. */
      
if (pnl_UserInfoScroll == null) {
        try {
          pnl_UserInfoScroll
= new JScrollPane();
          pnl_UserInfoScroll
.setName("pnl_UserInfoScroll");
          pnl_UserInfoScroll.setAutoscrolls(true);
          pnl_UserInfoScroll.setMinimumSize(new Dimension(200,100));
          pnl_UserInfoScroll
.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED);
          pnl_UserInfoScroll
.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);
          pnl_UserInfoScroll.setEnabled(false);
          pnl_UserInfoScroll.setViewportView(get_txt_UserInfo());
        }
        
catch (Throwable Exc) {
          System.
out.println("Error while building pnl_UserInfoScroll in class JSBS_UnstoredChangesDialog");
          Exc.printStackTrace();
        }
      }
      return pnl_UserInfoScroll;
    }
/*
 * ******************** */
    public JTextArea get_txt_UserInfo() {
/* Auto-create the GUI-element if it does not already exist. */
      
if (txt_UserInfo == null) {
        try {
          txt_UserInfo
= new JTextArea();
          txt_UserInfo
.setName("txt_UserInfo");
          txt_UserInfo
.setMinimumSize(new Dimension(300,200));
/* Do not allow editing of the element as it is intended for display only. */
          txt_UserInfo.setEditable(false);
        }
        
catch (Throwable Exc) {
          System.
out.println("Error while building txt_UserInfo in class JSBS_UnstoredChangesDialog");
          Exc.printStackTrace();
        }
      }
      return txt_UserInfo;
    }
/*
 * ******************** */
    public JButton get_btn_WarningIcon() {
/* Auto-create the GUI-element if it does not already exist. */
      
if (btn_WarningIcon == null) {
        try {
          btn_WarningIcon
= new JButton();
          btn_WarningIcon
.setName("btn_WarningIcon");
/* de: Bei dieser Schaltfläche den Text unterhalb des Graphischen Symbols (Icons) platzieren.
 * en: Place the text below the Icon at this button. */
          btn_WarningIcon
.setVerticalAlignment(SwingConstants.TOP);
          btn_WarningIcon
.setHorizontalAlignment(SwingConstants.CENTER);
          btn_WarningIcon
.setVerticalTextPosition(SwingConstants.BOTTOM);
          btn_WarningIcon
.setHorizontalTextPosition(SwingConstants.CENTER);
/* de: Bei einem Mausklick auf diese Schaltfläche einen ActionEvent auslösen.
 * en: Trigger an ActionEvent when this button is clicked with the mouse. */
          btn_WarningIcon
.setActionCommand("btn_WarningIcon");
          btn_WarningIcon
.addActionListener(this);
        }
        
catch (Throwable Exc) {
          System.
out.println("Error while building btn_WarningIcon in class JSBS_UnstoreChangesDialog");
          Exc.printStackTrace();
        }
      }
      return btn_WarningIcon;
    }
/*
 * ******************** */
    public JButton get_btn_Back() {
/* Auto-create the GUI-element if it does not already exist. */
      
if (btn_Back == null) {
        try {
          btn_Back
= new JButton();
          btn_Back
.setName("btn_Back");
          btn_Back
.setHorizontalAlignment(SwingConstants.LEADING);
          btn_Back
.setActionCommand("btn_Back");
          btn_Back
.addActionListener(this);
        }
        
catch (Throwable Exc) {
          System.
out.println("Error while building btn_Back in class JSBS_UnstoreChangesDialog");
          Exc.printStackTrace();
        }
      }
      return btn_Back;
    }
/*
 * ******************** */
    public JButton get_btn_Store() {
/* Auto-create the GUI-element if it does not already exist. */
      
if (btn_Store == null) {
        try {
          btn_Store
= new JButton();
          btn_Store
.setName("btn_Store");
          btn_Store
.setHorizontalAlignment(SwingConstants.LEADING);
          btn_Store
.setActionCommand("btn_Store");
          btn_Store
.addActionListener(this);
        }
        
catch (Throwable Exc) {
          System.
out.println("Error while building btn_Store in class JSBS_UnstoreChangesDialog");
          Exc.printStackTrace();
        }
      }
      return btn_Store;
    }
/*
 * ******************** */
    public JButton get_btn_Discard() {
/* Auto-create the GUI-element if it does not already exist. */
      
if (btn_Discard == null) {
        try {
          btn_Discard
= new JButton();
          btn_Discard
.setName("btn_Discard");
          btn_Discard
.setHorizontalAlignment(SwingConstants.LEADING);
          btn_Discard
.setActionCommand("btn_Discard");
          btn_Discard
.addActionListener(this);
        }
        
catch (Throwable Exc) {
          System.
out.println("Error while building btn_Discard in class JSBS_UnstoreChangesDialog");
          Exc.printStackTrace();
        }
      }
      return btn_Discard;
    }
/*
 * de:
 * Methode um die GUI-Elemente mit den individuellen Werten zu füllen.
 * Anschließend werden die Verarbeitungen, die nach dem Aufbau der GUI notwendig sind
 * ausgeführt.

 * en:
 * Method to fill the GUI-elements with individual values.
 * Thereafter follows the processing that has to be done after the GUI is built. 
*/
    private void fillGUIElementsWithValues() {
/*
 * de: Text der Title-Bar aus dem als Parameter übergebenen Task-Frame holen.

 * en: Get the text of the Title-Bar from the Task-Frame passed as parameter. */

        
strCallingFrameTitleBarText frmParent.getTitle();
/*
 * de: Initialisieren der XML-Struktur mit den Fehler- und Warn-Hinweisen.

 * en: Initialize the XML-structure with Error- and Warning-Messages. */
     JSBS_XML_ErrorMessages structJSBS_XML_ErrorMessages =
        
new JSBS_XML_ErrorMessages(frmCC);
/*
 * de: Prüfen ob die XML-Struktur ohne Fehler konstruiert wurde.

 * en: Verify if the XML-structure was constructed without an error. */
      if (structJSBS_XML_ErrorMessages.StatusCode == structJSBS_XML_ErrorMessages.CONST_OK) {
/*
 * de:

 * Abhängig vom Parameter ob die geänderten Daten fehlerfrei sind und gespeichert werden können:

 * Erklärungs-Text für die Schaltflächen holen.
 * en:

 * Depending on the parameter if the changed data are error-free and can be stored:
 * Fetch the explanatory text for the Buttons. */
        if (bol_Storeable)
          
strUserInfoText = structJSBS_XML_ErrorMessages.getStoreableExplanationText();
        
else
          
strUserInfoText = structJSBS_XML_ErrorMessages.getNotStoreableExplanationText();
      }
      
else {
/*
 * de: XML-Struktur konnte nicht geladen werden; Minimal-Nachricht anzeigen.

 * en: XML-structure could not be loaded; show minimum-message. */

        
strUserInfoText = "Unable to load file with Error-Messages";
      }
/*
 * de: Integrieren des Title-Bar-Textes des aufrufenden Frames.

 * en: Integrate the Title-Bar-Text of the calling frame. */

      integrateTitleBarTextIntoMessageText();
/*
 * de: Übertragen des Textes in das GUI-Element.

 * en: Transfer the text to the GUI-Element. */

      JSBS_GUIServices.setStringWithNewLineToJTextArea(get_txt_UserInfo(), strUserInfoText);
/*
 * de: Prüfen ob die XML-Struktur ohne Fehler konstruiert wurde.

 * en: Verify if the XML-structure was constructed without an error. */
      if (structJSBS_XML_ErrorMessages.StatusCode == structJSBS_XML_ErrorMessages.CONST_OK) {
/*
 * de:
 * Datei-Name für das Graphische Symbol zur Anzeige auf 'btn_WarningIcon' aus der
 * XML-Struktur auslesen.

 * en:
 * Get the file-name for the Icon to be displayed on 'btn_WarningIcon' out of the
 * XML-structure. */

        
strIconFileNameIncludingDirectory
            structJSBS_XML_ErrorMessages.getWarningIconFileName();
/*
 * de:

 * Wenn ein Wert für den Datei-Namen zurück geliefert wurde dann erweitern des Datei-Namens

 * um das komplette Verzeichnis und Anzeigen des Graphischen Symbols auf der Schaltfläche.
 * en:

 * If a value for the file-name was returned then extend the file-name by the complete
 * directory and display of the Icon on the Button. */
        if (strIconFileNameIncludingDirectory.length() > 0) {
          
strIconFileNameIncludingDirectory =
            
frmCC.structJSBS_UniversalParameters.strGraphicElementsDirectoryName +
              
strIconFileNameIncludingDirectory;
          get_btn_WarningIcon().setIcon(
new ImageIcon(strIconFileNameIncludingDirectory));
        }
      }
/*
 * de:
 * Wenn die Daten nicht gespeichert werden können dann wird die Schaltfläche btn_Store inaktiviert.

 * en:
 * If the data can not be stored then the button btn_Store is disabled. */
      get_btn_Store().setEnabled(bol_Storeable);
    }
/*
 * de:
 * Methode um den Text aus der Title-Bar des verursachenden Task-Frame in die Nachricht an
 * den Anwender zu integrieren.
 * Damit wird beim automatischen Schliessen der Frames dem Anwender mitgeteilt, welches Frame
 * nicht automatisch geschlossen werden kann.

 * en:
 * Method to integrate the text of the Title-Bar of the Task-Frame causing this Dialog in
 * the message-text presented to the user.
 * If the frames are closed automatically, the the user gets a clue which frame can not be
 * closed automatically. 
*/
    private void integrateTitleBarTextIntoMessageText() {
/* 
 * de:
 * Ersetzen in einer for-Schleife weil für einen Parameter auch mehrere Platzhalter

 * erlaubt sind.
 * Zuerst wird ein Flag gesetzt das signalisiert, ob der Parameter-Wert in den Text

 * eingefügt wurde oder nicht.

 * en:
 * Replacement within a for-loop because for one parameter there is more than

 * one placeholder allowed.

 * First, a flag is set signalling if the parameter-value is already inserted into

 * the text.
  */
      boolean bolNotAlreadyReplaced = true;
      String strPlaceholder = "%FrameTitle%";
      for (;;) {
/*
 * de: Prüfen ob ein 'Platzhalter' vorhanden ist.
 * en: Check if a 'placeholder' is present. */

        int intPlaceholderIndex = strUserInfoText.indexOf(strPlaceholder);
        if (intPlaceholderIndex >= 0) {
/*
 * de: Fehler-Text in 2 Teile aufteilen und den 'Platzhalter' entfernen.
 * en: Split error-text into 2 parts to eliminate 'placeholder' string. */
          String strLeftPart =
                
strUserInfoText.substring(0, intPlaceholderIndex);
          String strRightPart =
                
strUserInfoText.substring(intPlaceholderIndex + strPlaceholder.length());
/* 
 * de: Zusammensetzen mit dem Parameter-Wert.

 * en: Concatenate including parameter-value. */
          strUserInfoText = strLeftPart + strCallingFrameTitleBarText + strRightPart;
/* 
 * de: Flag signalisieren lassen, dass der Parameter-Wert bereits eingefügt wurde.

 * en: Let the flag signal that the parameter-value
was already inserted. */
          bolNotAlreadyReplaced = false;
        }
        else {
/* 
 * de:

 * Platzhalter nicht gefunden; Wert des Parameters in einer neuen Zeile anhängen.
 * Aber nur wenn der Wert noch nicht in den Text eingefügt wurde und der Parameter
 * auch einen Text enthält.

 * en:

 * Placeholder not found; append value in a new line.
 * But do this only if the parameter-value was not already inserted into the text and the
 * value contains text. */
          if (bolNotAlreadyReplaced && (strCallingFrameTitleBarText.trim().length() > 0)) {
            strUserInfoText += "\n" strCallingFrameTitleBarText;
          }
/* 
 * de: for-Schleife abbrechen.

 * en: End the for-loop. */
          break;
        }
      }
    }
/*
 * -------------------------------
 * de:
 * Methode, die den KeyListener zu einem GUI-Element und
allen seinen untergeordneten
 * Komponenten hinzufügt.
 * 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.
 *
 * en:
 * Method that adds the KeyListener to a GUI-element and all its subordinate components.
 * This method inspects each 'Container' for components and calls itself for each component
 * and passes that component as parameter. */
    private void addListeners(Container parmContainer) {
/* de: KeyListener werden zu jedem Typ eines GUI-Elementeshinzugefügt.
 * en: KeyListener are added to any type of a GUI-element. */
      
parmContainer.addKeyListener(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);
      }

    }
/*
 * -------------------------------
 * 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 muß, dann muß 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 = frmCC.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 zusammen mit der interface WindowListener 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.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) {
      this.dispose();
    }
    public void windowClosing(WindowEvent e) {
/* de: Methode aufrufen, die Größe und Position des JFrame auf der Datenbank speichert.
 * en: Call the method that stores size and position of the JFrame to the database. */

      storeFramePosition();

      this.dispose();
    }
    public void windowDeactivated(WindowEvent e) {
    }
    public void windowDeiconified(WindowEvent e) {
    }
    public void windowIconified(WindowEvent e) {
    }
    public void windowOpened(WindowEvent e) {
    }
/*
 * -------------------------------
 * de:
 * Methode zum 'Holen' der Eigenschaften (Größe und Postion) des Frames und der Spaltenbreiten
 * für JTables von der Datenbank und Anpassen von Größe und Position des Frames
 * 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. */
/*
 * de:
 * Die folgende Methode muss von der erbenden Klasse (Teilprogramm / Task-Frame mit der spezifischen
 * Geschäftsanwendung) aufgerufen werden nachdem die Verbindung zur Datenbank (oder zum EJB-Server)
 * hergestellt ist und das JFrame konstruiert wurde.
 * en:

 * 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: Holen der FramePosition-Eigenschaften von der Datenbank.
 * en: Retrieve the FramePosition-properties from the database. */
       structJSBS_FramePosition_BOC.getValidByUserKnownKey(this.getClass().getName(),
                                      
frmCC.structJSBS_UniversalParameters.strUserName);
/* de:
 * Nachdem die Datenbank-Tabelle 'Parameter' im Anwendungprogramm, das diese Klasse erbt, nicht
 * erstellt sein kann führt ein Fehler beim Zugriff auf die Datenbank nicht zu einem Ereignis
 * über das der Benutzer informiert wird.
 * Der Unterschied zwischen fehlerfreier Abfrage und Auftreten eines Fehler ist nur, wie das BOS
 * mit Daten 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 BOS is supplied with values. */
     
if (structJSBS_FramePosition_BOC.StatusCode == JSBS_BO.CONST_OK) {
/* de: Eigenschaften auf der Tabelle 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;
 * Dieses BO mit dem Namen des JFrame und des Benutzer versorgen - für den Fall, dass das
 * BO beim Schließen des Fenster gespeichert 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 = frmCC.structJSBS_UniversalParameters.strUserName;
      }
    }
/*
 * de:
 * Die folgende Methode wird aufgerufen wenn das JFrame (Window) geschlossen wird.
 * Innerhalb dieser Methode wird die Größe und Position des JFrame ermittelt und in 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() {
/* 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;
/* Get the properties from the frame; the properties can be derived as type 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;
/* 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();
    }

/*
 * -------------------------------
 * de:
 * Methode die aufgerufen wird wenn ein GUI-Element mit zugewiesenem 'ActionListener'
 * angeklickt wurde.
 * en:
 * Method that is triggered when a GUI-element with attached 'ActionListener'
 * is clicked. */
    public void actionPerformed(ActionEvent e) {
/* 
 * de:
 * Ermitteln des 'ActionCommand'.
 * Dieser wurde dem GUI-Element mit der Methode 'setActionCommand' zugewiesen.
 * en:
 * Derive the 'ActionCommand'.
 * That was attached to the GUI-element through the method 'setActionCommand'. */
      
String cmd = e.getActionCommand();
/*
 * de: Feststellen welchen ActionCommand übergeben wurde und die passende Aktion ausführen.
 * en: Check which ActionCommand was handed over and perform the appropriate action.
 * */
      if (cmd.equals("btn_WarningIcon")) {
/* de: Diese Schaltfläche wird auch für den Aufruf der Hilfe-Information genutzt.
 * en: This JButton is also used to call the 'Help'-Information. */

        String strHelpFileName =
          frmCC.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 =
              frmCC.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();}
          }
        }
      }
/*
 * de:
 * Bei den übrigen Schaltflächen wird der jeweilige Process-Indicator gesetzt (dieser
 * muss dann im Frame, das diesen Dialog aufgerufen hat abgefragt werden und damit die
 * weiter Verarbeitung gesteuert werden)
und dieser Dialog geschlossen.
 * en:
 * With the other JButton, the Process-Indicator is set (this has to lead to further
 * processing
in the Frame that called this Dialog) and this Dialog is closed. */
      if (cmd.equals("btn_Back")) {
        strProcessIndicator CONST_PROCESS_BACK;
/* de: Methode aufrufen, die Größe und Position des JFrame auf der Datenbank speichert.
 * en: Call the method that stores size and position of the JFrame to the database. */

        storeFramePosition();
        this.dispose();
      }

      if (cmd.equals("btn_Store")) {
        strProcessIndicator CONST_PROCESS_STORE;
/* de: Methode aufrufen, die Größe und Position des JFrame auf der Datenbank speichert.
 * en: Call the method that stores size and position of the JFrame to the database. */

        storeFramePosition();
        this.dispose();
      }

      if (cmd.equals("btn_Discard")) {
        strProcessIndicator CONST_PROCESS_DISCARD;
/* de: Methode aufrufen, die Größe und Position des JFrame auf der Datenbank speichert.
 * en: Call the method that stores size and position of the JFrame to the database. */

        storeFramePosition();
        this.dispose();
      }
    }
}

zum Inhaltsverzeichnis

Erklärungen und Anwendungsbeispiele

xxx

zum Inhaltsverzeichnis

Verwandte Dokumentation

Dokument

Inhalt

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

Dieser Leitfaden enthält die notwendigen Tätigkeiten für die Entwicklung eines StartFrame (auch als Command-Center bekannt).
Das StartFrame stellt die Möglichkeiten bereit, verschiedene TaskFrames für die Bearbeitung von Geschäftsfällen aufzurufen.
Weiters ist im StartFrame jener Programm-Code enthalten, der die Verbindung zum Datenbanksystem bzw. zum Java-Application-Server (JAS) herstellt.

zum Inhaltsverzeichnis