XML-Bindung in der Swing-Benutzerschnittstelle

Alle Formulare in der Swing-Benutzerschnittstelle folgen dem Model View Controller-(MVC-)Paradigma. Das Formular selbst fungiert als Ansicht (View) und enthält daher lediglich die Darstellungslogik. Die gesamte Geschäftslogik befindet sich in einer separaten Controllerklasse.

Das Modell für jedes Formular ist ein XML-DOM-Element.

Zur weiteren Vereinfachung der Darstellungslogik unterstützen die Kernklassen in < yfs> eine Form von XMLBinding von verschiedenen Steuerelementtypen an das DOM-Modell. Der Formularersteller hat dadurch die Möglichkeit, die verschiedenen Steuerelemente in einem Formular an verschiedene Teile des DOM zu binden. Dabei gewährleistet die Infrastruktur, dass DOM und Steuerelemente zur Laufzeit synchronisiert werden. DOM-Änderungen werden im Steuerelement nachvollzogen und umgekehrt.

Die folgenden Steuerelemente können gebunden werden:
  • Javax.swing.JTextComponent (und Unterklassen)
  • Javax.swing.JTable

Die Steuerung der Bindungssemantik wird unten ausführlich beschrieben.

Allgemeine Bindung für alle Steuerelemente

Teile einer Eingabe-XML können auf der Basis eines XMLBindingString an Steuerelemente gebunden werden. Jede Zeichenfolge wird in XSL-Syntax ausgewertet und die erste Übereinstimmung als Wert der Bindung verwendet.

Die gebundene XML kann beispielsweise wie folgt aussehen:

	<Order OrderNo='23' OrderDate='20010101' >	
     	<ShipToAddress City='Nashua' />
	</Order>

Die folgende Tabelle illustriert XMLBinding.

XML-Bindungszeichenfolge Beispielwert
Xml:/Order/@OrderNo 23
Xml:/Order/@OrderDate 20010101
Xml:/Order/ShipToAddress/@City Nashua
Xml:/Order/ShipToAddress Wird zum ShipToAddress-Knoten ausgewertet

Namenseigenschaft

Jedes Swing-Steuerelement hat einen Bean-Eigenschaftsnamen, der mit der Funktion setName(String) eingestellt werden kann. Der Wert dieser Eigenschaft muss ein XMLBindingString sein, der XMLData für die Bindung an dieses Steuerelement angibt.

Bindung für JText-Feld

Neben der Namenseigenschaft können Sie für jedes Textfeld die folgenden JTextField-Eigenschaften festlegen:

Eigenschaft "Syntax"

Datentyp

Es werden nur die Werte Integer, Date und String unterstützt.

txtField1.putClientProperty("YFCXMLBinding.dataType",
"Integer")
txtField1.putClientProperty("YFCXMLBinding.dataType",
"Date")
txtField1.putClientProperty("YFCXMLBinding.dataType",
"String")

associatedLabel

Dies ist das JLabel, das dem Textfeld zugeordnet ist.

txtField1.putClientProperty("YFCXMLBinding.associatedLabel",
"lblField1")

Obligatorisch

Wenn die Eigenschaft Mandatory auf "true" festgelegt ist und das Feld leer gelassen wird, ändert die zugehörige Beschriftung des Textfelds ihre Farbe.

Dieses Verhalten wird vom lostfocus-Ereignis des Textfelds gesteuert.

txtField1.putClientProperty("YFCXMLBinding.isMandatory",
"true")