Da in unserem Framework die TextBox eh einen Wrapper hat, kann dem TextBoxWrapper eine beliebige Anzahl Dokoratoren mitgegeben werden:
public
SuggestBoxWrapper(AbstractView view, String id, SuggestOracle oracle,
TextBoxDecorator... decorators) {
this(view, id, oracle);
for (TextBoxDecorator textBoxDecorator : decorators) {
textBoxDecorator.attachToWidget(getWidget().getTextBox());
}
}
Die Dekoratoren kennen ihren Decoree und registrieren sich bei ihm als KeyPressHandler:
public abstract class TextBoxDecorator implements KeyPressHandler
{
private static final int CH_SPACE = ' ';
/**
* Verbindet diesen
Decorator mit der TextBox.
*
* @param textBox -- die zum
Dekorierer gehörende Textbox.
*/
public void
attachToWidget(TextBoxBase textBox) {
textBox.addKeyPressHandler(this);
}
Der Dekorator empfängt dann die Events der Textbox und kann dementprechend handeln:
@Override
public void
onKeyPress(KeyPressEvent event) {
char ch = event.getCharCode();
if (!(Character.isLetterOrDigit(ch) || isControlCode(ch))) {
event.preventDefault();
}
}
Da der Dekorator seinen Decoree (die TextBox) kennt, könnte man natürlich auch den Text beliebig verändern und so komplexe Formatiere implementieren.
Keine Kommentare:
Kommentar veröffentlichen