Bonjour,
j'essai de créer un petit compteur dans une fenêtre StandardWindow, j'ai 2 boutons + et - pour modifier la valeur du compteur. Et je n'arrive pas à trouver comment mettre à jour l'affichage. 1) Comment puis-je raffraichir newTextEntryFor ? 2) L'utilisation de "newTextEntryFor" est elle juste ? ou faut il utiliser un autre élément (newLabel par exemple) ? Ci-dessous le code : Object subclass: #TNumber instanceVariableNames: 'tnumber window tnumberRow' classVariableNames: '' poolDictionaries: '' category: NTest' disableTnumber ^ false initialize super initialize. tnumber := 12. self window addMorph: self tnumberRow frame: (0@0.1 corner: 1@0.9). self window openInWorld. self window extent: 120@120 tnumber ^ tnumber. tnumberDec tnumber := tnumber - 1. tnumberInc tnumber := tnumber + 1. tnumberRow ^ tnumberRow ifNil: [ tnumberRow := self window newColumn: { self window newLabel: 'Compteur'. self window newRow: { self window newButtonFor: self getState: nil action: #tnumberDec arguments: nil getEnabled: nil label: '-' help: nil. self window newTextEntryFor: self getText: #tnumber setText: nil getEnabled: #disableTnumber help: nil. self window newButtonFor: self getState: nil action: #tnumberInc arguments: nil getEnabled: nil label: '+' help: nil. }.}. tnumberRow.]. window ^ window ifNil: [ window := StandardWindow labelled: 'TNumber'. window ] Merci. Cordialement. |
Salut,
2011/4/11 Frédéric FERRERE <[hidden email]> Bonjour, tnumberDec tnumber := tnumber - 1. self changed: #tnumber. "qui correspond au sélecteur passé dans newTextEntryFor." self changed: #tnumber.tnumberInc tnumber := tnumber + 1.
Etant donné que le widget est juste un affichage, un label semble plus approprié.
As-tu regardé http://www.pharocasts.com/2011/02/pharo-gui-with-polymorph.html ? Laurent Laffont - @lolgzs Pharo Smalltalk Screencasts: http://www.pharocasts.com/ Blog: http://magaloma.blogspot.com/
Developer group: http://cara74.seasidehosting.st
|
2011/4/12 Frédéric FERRERE <[hidden email]>
Non car ça utilise le dependency model / design pattern observer. C'est à dire que le widget "s'abonne" au model lorsque self window
newTextEntryFor: self "<- le modèle " getText: #tnumber setText: nil getEnabled: #disableTnumber help: nil. et donc le changed: permet de notifier tous les abonnés.
Regarde Object>>changed:, Object>>addDependent: et MorphicModel>>model:
Laurent.
|
2011/4/12 laurent laffont <[hidden email]>:
>> J'avais essayé avec ça : >> >> self window changed: #tnumber. >> >> ça me paraissait plus logique d'envoyer le message de rafraichissement sur >> l'élément graphique window (StandardWindow). >> Il y a des choses qui m'échappent :) En fait, #changed: permet simplement d'indiquer que les données (le modèle) ont changées. Chaque vue se met alors à jour si besoin. Regarde http://fr.wikipedia.org/wiki/Mod%C3%A8le-Vue-Contr%C3%B4leur -- Damien Cassou http://damiencassou.seasidehosting.st "Lambdas are relegated to relative obscurity until Java makes them popular by not having them." James Iry |
Free forum by Nabble | Edit this page |