Flash Player 10 e versioni successive, Adobe AIR 1.5 e versioni successive
È possibile aggiungere listener di eventi a un'istanza in modo analogo a quanto avviene per altri oggetti di visualizzazione. Ad esempio, si può rilevare la presenza del cursore del mouse sopra una riga di testo o il clic da parte dell'utente su una riga. L'esempio seguente permette di rilevare entrambi gli eventi. Quando si porta il cursore del mouse sopra la riga, il cursore diventa un cursore per pulsante; quando si fa clic sulla riga, il cursore cambia colore.
package
{
import flash.text.engine.*;
import flash.ui.Mouse;
import flash.display.Sprite
import flash.events.MouseEvent;
import flash.events.EventDispatcher;
public class EventHandlerExample extends Sprite
{
var textBlock:TextBlock = new TextBlock();
public function EventHandlerExample():void
{
var str:String = "I'll change color if you click me.";
var fontDescription:FontDescription = new FontDescription("Arial");
var format:ElementFormat = new ElementFormat(fontDescription, 18);
var textElement = new TextElement(str, format);
textBlock.content = textElement;
createLine(textBlock);
}
private function createLine(textBlock:TextBlock):void
{
var textLine:TextLine = textBlock.createTextLine(null, 500);
textLine.x = 30;
textLine.y = 30;
addChild(textLine);
textLine.addEventListener("mouseOut", mouseOutHandler);
textLine.addEventListener("mouseOver", mouseOverHandler);
textLine.addEventListener("click", clickHandler);
}
private function mouseOverHandler(event:MouseEvent):void
{
Mouse.cursor = "button";
}
private function mouseOutHandler(event:MouseEvent):void
{
Mouse.cursor = "arrow";
}
function clickHandler(event:MouseEvent):void {
if(textBlock.firstLine)
removeChild(textBlock.firstLine);
var newFormat:ElementFormat = textBlock.content.elementFormat.clone();
switch(newFormat.color)
{
case 0x000000:
newFormat.color = 0xFF0000;
break;
case 0xFF0000:
newFormat.color = 0x00FF00;
break;
case 0x00FF00:
newFormat.color = 0x0000FF;
break;
case 0x0000FF:
newFormat.color = 0x000000;
break;
}
textBlock.content.elementFormat = newFormat;
createLine(textBlock);
}
}
}
Mirroring di eventi
È inoltre possibile fare corrispondere gli eventi applicati a un blocco di testo, o porzione dello stesso, a un dispatcher di eventi. Innanzi tutto, creare un'istanza EventDispatcher e assegnarla alla proprietà
eventMirror
di un'istanza TextElement. Se il blocco di testo è costituito da un solo elemento testuale, il motore del testo rende speculari gli eventi per l'intero blocco di testo. Se il blocco di testo è costituito da più elementi testuali, il motore del testo rende speculari gli eventi soltanto per le istanze TextElement per le quali è stata impostata la proprietà
eventMirror
. Il testo dell'esempio seguente è costituito da tre elementi: la parola "Click", la parola "here" e la stringa "to see me in italic". Nell'esempio viene assegnato un dispatcher di eventi al secondo elemento testuale, la parola "here", e viene aggiunto un listener di eventi, il metodo
clickHandler()
. Il metodo
clickHandler()
trasforma il testo in corsivo e sostituisce il contenuto del terzo elemento testuale affinché contenga la frase "Click here to see me in normal font!".
package
{
import flash.text.engine.*;
import flash.ui.Mouse;
import flash.display.Sprite;
import flash.events.MouseEvent;
import flash.events.EventDispatcher;
public class EventMirrorExample extends Sprite
{
var fontDescription:FontDescription = new FontDescription("Helvetica", "bold");
var format:ElementFormat = new ElementFormat(fontDescription, 18);
var textElement1 = new TextElement("Click ", format);
var textElement2 = new TextElement("here ", format);
var textElement3 = new TextElement("to see me in italic! ", format);
var textBlock:TextBlock = new TextBlock();
public function EventMirrorExample()
{
var myEvent:EventDispatcher = new EventDispatcher();
myEvent.addEventListener("click", clickHandler);
myEvent.addEventListener("mouseOut", mouseOutHandler);
myEvent.addEventListener("mouseOver", mouseOverHandler);
textElement2.eventMirror=myEvent;
var groupVector:Vector.<ContentElement> = new Vector.<ContentElement>;
groupVector.push(textElement1, textElement2, textElement3);
var groupElement:GroupElement = new GroupElement(groupVector);
textBlock.content = groupElement;
createLines(textBlock);
}
private function clickHandler(event:MouseEvent):void
{
var newFont:FontDescription = new FontDescription();
newFont.fontWeight = "bold";
var newFormat:ElementFormat = new ElementFormat();
newFormat.fontSize = 18;
if(textElement3.text == "to see me in italic! ") {
newFont.fontPosture = FontPosture.ITALIC;
textElement3.replaceText(0,21, "to see me in normal font! ");
}
else {
newFont.fontPosture = FontPosture.NORMAL;
textElement3.replaceText(0, 26, "to see me in italic! ");
}
newFormat.fontDescription = newFont;
textElement1.elementFormat = newFormat;
textElement2.elementFormat = newFormat;
textElement3.elementFormat = newFormat;
createLines(textBlock);
}
private function mouseOverHandler(event:MouseEvent):void
{
Mouse.cursor = "button";
}
private function mouseOutHandler(event:MouseEvent):void
{
Mouse.cursor = "arrow";
}
private function createLines(textBlock:TextBlock):void
{
if(textBlock.firstLine)
removeChild (textBlock.firstLine);
var textLine:TextLine = textBlock.createTextLine (null, 300);
textLine.x = 15;
textLine.y = 20;
addChild (textLine);
}
}
}
Le funzioni
mouseOverHandler()
e
mouseOutHandler()
trasformano il cursore in un cursore per pulsante quando si trova sulla parola "here" e lo riportano alla forma di una freccia quando non si trova più su tale parola.
|
|
|