2010-11-16 38 views
2

Supposons que j'ai une classe:Modèle d'observateur pour JTextField?

class Boy 
{ 
     int age = 25; 
} 

J'ai un JTextField, l'âge, qui met à jour le champ d'instance « âge » du garçon. Alternativement, si l'âge du garçon est changé d'une autre manière (peut-être, setAge()), je dois être capable de refléter ce changement dans JTextField.

L'utilisation du modèle d'observateur est un moyen. Dans ce cas, suis-je obligé de créer une nouvelle classe JTextFieldThatObserves (qui hérite de JTextField et implémente Observer)

Le JTextField par défaut est-il incapable de faire ce dont j'ai besoin?

+1

Vous n'êtes pas * forcé * de créer un JTextFieldThatObserves. Vous pouvez simplement créer un observateur qui appelle setText() sur votre plaine JTextField. Favoriser la délégation sur l'héritage. – Todd

Répondre

2

Java n'est pas livré avec un cadre de reliure automatique pour les composants Swing et les champs d'un objet. C'est l'un de ses défauts majeurs!

Je crains que le seul mécanisme pour ce faire est d'utiliser le modèle d'observateur sur le widget et l'objet et vigilant des cycles infinis.

Une chose utile dans ces cas est un PropertyEditor car il vous évite de créer un gazillion différentes classes d'écouteur/événement.

0

Si vous allez faire plus qu'une quantité triviale de ce genre de chose, je vous suggère fortement d'investir un peu de temps à apprendre l'un des cadres de liaison disponibles pour Java. J'utilise personnellement Better Beans Bindings.