Zurück   Flashforum > Flex und AIR > Flex programmieren

Antwort
 
LinkBack Themen-Optionen Ansicht
Alt 10-11-2008, 20:52   #1 (permalink)
T-Noblesse
 
Benutzerbild von sobo
 
Registriert seit: Jun 2006
Ort: München
Beiträge: 308
UIComponent und createChildren()

Hallo,
ich versuche, mich nach einiger Zeit wieder in Flex zurechtzufinden und stoße auf Probleme:

Ich habe eine Klasse MainMenu, die von UIComponent abgeleitet ist. Diese enthält Instanz von MenuBar.
Mit folgendem Code versuche ich, MainMenu anzuzeigen:
Code:
public function MainMenu() : void {	
	super();
	menuCollection = new XMLListCollection(menuList);			
}
		
override protected function createChildren():void{
	super.createChildren();	
	menuBar = new AcceleratorMenuBar();
	menuBar.labelField="@label";
	menuBar.addEventListener(MouseEvent.CLICK, handleMenuFunction);
	menuBar.dataProvider = menuCollection;
	menuBar.setFocus();
	addChild(menuBar);
}
In der Application binde ich MenuBar ein:
Code:
<toppanel:MainMenu x="0" y="0" width="100%" height="29">				
</toppanel:MainMenu>
Das ganze hat in MXML schon funktioniert. Ich möchte es aber in as umsetzen. Es scheint mir ein einfacher, offensichtlicher (zumindest für einen Flexer) Fehler zu sein.

Kann mir jemand weiterhelfen?

Danke!
Gruß,
sobo
sobo ist offline   Mit Zitat antworten
Alt 11-11-2008, 02:38   #2 (permalink)
agedoubleju
Gast
 
Beiträge: n/a
Aus dem Script geht weder hervor, welcher Fehler auftritt, noch wie es funktioniert. Da müsstest du ein paar Infos mehr rausrücken...
  Mit Zitat antworten
Alt 11-11-2008, 06:28   #3 (permalink)
T-Noblesse
 
Benutzerbild von sobo
 
Registriert seit: Jun 2006
Ort: München
Beiträge: 308
Ok sorry, also hier die ganze Klasse:

Code:
package com.bla.toppanel {
	import com.bla.event.OpenDocumentEvent;
	import com.bla.view.toppanel.menuClasses.*;
	
	import flash.events.*;
	import flash.utils.getDefinitionByName;
	import mx.events.ItemClickEvent;
	import mx.collections.ArrayCollection;
	import mx.collections.XMLListCollection;
	import mx.controls.Alert;
	import mx.core.UIComponent;

	public class MainMenu extends UIComponent{

		public var _accelerators : ArrayCollection;
		private var itemEvents : Object;

		[Bindable]
		public var menuList : XMLList; 

		[Bindable]
		public var menuCollection : XMLListCollection;
		
		private var menuBar:AcceleratorMenuBar;
		
		public function MainMenu() : void {	
			super();
			itemEvents = new Object();
			updateXMLList();
			menuCollection = new XMLListCollection(menuList);
			parseAccelerators(menuList);
			addEventListener(KeyboardEvent.KEY_UP, itemListener, false, 0, true);
			
		}
		
		override protected function createChildren():void{
			super.createChildren();
			menuBar = new AcceleratorMenuBar();
			menuBar.labelField="@label";
			menuBar.addEventListener(MouseEvent.CLICK, handleMenuFunction);
			menuBar.dataProvider = menuCollection;
			menuBar.setFocus();
			addChild(menuBar);
		}

		private function updateXMLList() : void {
			var path : String = "com.binais.buzzword.event.";
			menuList = <>
						<menu label={resourceManager.getString('language', 'document')}>
							<menuitem label={resourceManager.getString('language', 'new')} data="file_new"/>
							...
						</menu>
						</>;
						
			menuCollection = new XMLListCollection(menuList);
			parseAccelerators(menuList);
		}

		
		private function parseAccelerators( xml : XMLList ) : void {
			_accelerators = new ArrayCollection();
				
			for each( var child:XML in xml.menuitem ) {
				if( String(child.@accelerator) ) {
					var item : Accelerator = Accelerator.fromString(child.@accelerator);
					item.data = String(child.@data);
					_accelerators.addItem(item);
				}
				if(String(child.@itemEvent)) {
					itemEvents[String(child.@data)] = String(child.@itemEvent);
				}
			}
		}

		private function itemListener(e:Event):void{
			if(e is KeyboardEvent){
				for each( var accelerator:Accelerator in _accelerators ) {
					if( accelerator.test(e as KeyboardEvent)) handleMenuFunction(accelerator.data as String);
				}
			}
			else if(e is ItemClickEvent) handleMenuFunction((e as ItemClickEvent).item.@data);
		}

		private function handleMenuFunction( menuItem:String) : void {
			for (var itemData:String in itemEvents) {
				if(itemData == menuItem) {
					var e : Class = getDefinitionByName(itemEvents[itemData]) as Class;
					dispatchEvent(new e());
				}
			}
			Alert.show("Menu item selected: " + menuItem);
		}			
	}
}
Und das Einbinden:

Code:
<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" xmlns:toppanel="com.bla.view.toppanel.*" xmlns:control="com.bla.control.*">
	<mx:Style source="assets/css/Main.css"/>
	<toppanel:MainMenu x="0" y="0" width="100%" height="29">				
	</toppanel:MainMenu>	
</mx:Application>
sobo ist offline   Mit Zitat antworten
Alt 11-11-2008, 06:45   #4 (permalink)
T-Noblesse
 
Benutzerbild von sobo
 
Registriert seit: Jun 2006
Ort: München
Beiträge: 308
Es hat sich erledigt. Die MenuBar Instanz hatte kein Breite und keine Höhe.

Trotzdem danke!
Gruß,
sobo
sobo ist offline   Mit Zitat antworten
Alt 12-11-2008, 11:44   #5 (permalink)
Perverted Hermit
 
Benutzerbild von Omega Psi
 
Registriert seit: Mar 2004
Ort: Delmenhorst
Beiträge: 12.142
Ich würde dir noch empfehlen, measure zu überschreiben.
Omega Psi ist offline   Mit Zitat antworten
Antwort

Lesezeichen

Stichworte
flex, komponente, menubar

Themen-Optionen
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks sind an
Pingbacks sind an
Refbacks sind an



Alle Zeitangaben in WEZ +1. Es ist jetzt 04:28 Uhr.

Domains, Webhosting & Vserver von Host Europe
Unterstützt das Flashforum!
Adobe User Group


Copyright ©1999 – 2012 Marc Thiele