cambiare la posizione di un componente in diversi stati
-
26-10-2019 - |
Domanda
Ciao mio brava gente di StackOverflow,
Recentemente, stavo costruendo un componente in cui una certa componente di DropDownList con id = languageCombo, deve essere trasferito in modo dinamico, come gli Stati change..here è il codice per i due stati: iniziale e chaingrp. voglio il componente DropDownList al cambiamento da una posizione X in stato iniziale in un'altra posizione X = 500 nella funzione tree_changeHandler quando lo stato è chiamato chaingrp ma il componente dropdownlist non cambia. qualcuno mi potrebbe indicare che cosa il problema potrebbe essere?
Grazie
<?xml version="1.0" encoding="utf-8"?>
<s:Group xmlns:fx="http://ns.adobe.com/mxml/2009"
xmlns:s="library://ns.adobe.com/flex/spark"
xmlns:mx="library://ns.adobe.com/flex/mx"
xmlns:components="components.*"
xmlns:searchComponents="searchComponents.*"
minHeight="500" minWidth="500">
<fx:Metadata>
[Event(name="SearchClick", type="eventClass.SelectedTableEvent")]
</fx:Metadata>
<fx:Script>
<![CDATA[
import eventClass.SelectedTableEvent;
import mx.collections.ArrayCollection;
import mx.events.ListEvent;
import mx.events.TreeEvent;
import spark.events.IndexChangeEvent;
namespace simo="http://www.simo-project.org/simo";
[Bindable]
public var parentXmlCopy:XML;
[Bindable]
public var treeXml:XML;
[Bindable]
private var newXml:XML;
private var transferredname:String;
public var modelType:String;
public var selectedModelchainIndex:int;
public var selectedTaskIndex:int;
public function set variables(_xml:XML):void{
parentXmlCopy = _xml;
}
private function languageChange(event:Event):void{
trace("languageChange");
var cb:DropDownList=event.target as DropDownList;
var temp:Object=cb.selectedItem;
var chain:Array=[];
for (var i:int=0; i < cb.dataProvider.length; i++)
{
if(cb.dataProvider[i].label == temp.label)
{
chain.push(cb.dataProvider[i].locale);
resourceManager.localeChain=chain;
}
}
}
protected function tree_changeHandler(event:ListEvent):void
{
use namespace simo;
var selectedItem:XML;
transferredname = tree.selectedItem.localName();
switch (transferredname){
case "chain_group" : currentState = "chaingroup";
languageCombo.X = 500;
selectedItem = XML(tree.selectedItem);
trace(selectedItem);
this.chainGrpId.displayChainGrp(selectedItem);
break;
}
}
private function treeLabel(item:Object):String
{
return item.localName();
}
]]>
</fx:Script>
<s:states>
<s:State name="initial"/>
<s:State name="chaingroup"/>
</s:states>
<s:HGroup><!--overall outer Hgroup-->
<s:HGroup gap="8">
<s:HGroup gap="5">
<s:VGroup height="460" paddingLeft="10" paddingTop="5">
<s:HGroup gap="3">
<searchComponents:AutoComplete/>
<s:Button
id="searchBT"
height="24"
width="24"
skinClass="skins.searchBTskin"/>
</s:HGroup>
<s:List id="treeDP" height="120" width="180" labelField="@name"
change="treeDP_changeHandler(event)">
<s:dataProvider>
<s:XMLListCollection source="{parentXmlCopy.children()}" />
</s:dataProvider>
</s:List>
<s:Button id="delListBT" label="delList"/>
<s:HGroup gap="70">
<s:Button
id="backBT"
label="back"
height="24"
width="24"
/>
<s:Button
id="nextBT"
label="next"
height="24"
width="24"
/>
</s:HGroup>
<mx:Tree id="tree" dataProvider="{treeXml}" labelField="{treeXml.localName()}"
top="72" left="50" labelFunction="treeLabel"
maxHorizontalScrollPosition="20"
maxVerticalScrollPosition="10"
showRoot="true"
change="tree_changeHandler(event)"
height="225" width="180"/>
<s:Button id="delTreeBT" label="delTree"/>
</s:VGroup>
<s:Group includeIn="chaingroup/>
</s:HGroup>
</s:HGroup>
<s:HGroup paddingLeft="200" paddingTop="5"
x.modelOperation="-38" y.modelOperation="-22" width.modelOperation="737"
x.modelPrediction="-18" y.modelPrediction="-20">
<s:DropDownList id="languageCombo" width="150" change="languageChange(event)" includeIn="initial"
dataProvider="{new ArrayCollection([{locale:'fi_FI',label:'Suomi'}, {locale:'en_US', label:'English'}])}"
prompt="{resourceManager.getString('modelChainUI','lang')}"
x.chaingroup="900"
x.condition="900"
x.modelchain="900"
x.task="900"/>
</s:HGroup>
</s:HGroup><!--overall hgroup ends here!-->
<s:VGroup gap="5" paddingLeft="10"
x.chaingroup="144" y.chaingroup="-69" height.chaingroup="148">
<components:ChainGroup id="chainGrpId" includeIn="chaingroup"/>
</s:VGroup>
Soluzione
Il tuo languageCombo
è dentro HGroup
. HGroup
è un contenitore con disposizione orizzontale. Layout orizzontale non considera alcun x
e y
coordinate di bambini (a causa di esso è layout orizzontale).
Forse è meglio usare semplice Group
(tenendo a mente il vostro HGroup
ha un solo bambino - layout in modo orizzontale non ha senso)?