Apache flex 灵活文本输入焦点
在我的Air应用程序中,我有两个焦点问题。 事实上,当我试图用tab键在表单中移动时,顺序并不好。 第二点,即使光标位于文本输入中,焦点边框也不可见 找到下面的部分代码 用于使用tab键移动Apache flex 灵活文本输入焦点,apache-flex,actionscript-3,air,Apache Flex,Actionscript 3,Air,在我的Air应用程序中,我有两个焦点问题。 事实上,当我试图用tab键在表单中移动时,顺序并不好。 第二点,即使光标位于文本输入中,焦点边框也不可见 找到下面的部分代码 用于使用tab键移动 this.focusManager.activate(); this.focusManager.setFocus(this.fdNom); 我的文本输入CSS s|TextInput { focusColor: #33CC00; color : #343434; font-we
this.focusManager.activate();
this.focusManager.setFocus(this.fdNom);
我的文本输入CSS
s|TextInput
{
focusColor: #33CC00;
color : #343434;
font-weight : normal;
font-family: Helvetica ;
font-size : 12;
}
我的表格
<s:Form x="0" y="94" id="foPerso" width="100%" height="100%"
includeInLayout="true" includeIn="tb1"
backgroundColor="#FFFFF">
<s:layout>
<s:FormLayout gap="3" paddingLeft="0"/>
</s:layout>
<s:HGroup width="100%" gap="3" horizontalAlign="left" resizeMode="noScale"
verticalAlign="baseline" >
<s:DropDownList id="cbQualite" dataProvider="{DP_PAT_CIVIL}"
selectedItem="{getSelectedItem(DP_PAT_CIVIL, objectPatient.paQualPatient)}"
change="objectPatient.paQualPatient = event.currentTarget.selectedItem.label"/>
<s:FormItem label="Nom" >
<s:TextInput id="fdNom" width="200"
text="@{objectPatient.paNomU}"
/>
</s:FormItem>
<s:FormItem label="Prénom" >
<s:TextInput id="fdPrenom" width="200" text="@{objectPatient.paPrenom}"/>
</s:FormItem>
<s:DropDownList id="cbDossier1" dataProvider="{DP_PAT_DOS1}" width="118" height="22" tabIndex="3"
change="objectPatient.paQualPatient = event.currentTarget.selectedItem.label"
/>
<s:FormItem label="" >
<s:TextInput id="fDossier1" width="90" paddingRight="5" text="@{objectPatient.paDossier1}"/>
</s:FormItem>
</s:HGroup>
我的表格在自定义标题窗口组件上
感谢您的帮助(1)我可能只允许Flex处理选项卡,而不是自己管理它
(2) 您是否为没有焦点外观的TextInput使用自定义外观?使用TextInput tabindex属性操作taborder。Flex将根据组件在MXML中添加的顺序自动为您设置选项卡顺序。如果您的MXML如下所示:
<?xml version="1.0" encoding="utf-8"?>
<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009"
xmlns:s="library://ns.adobe.com/flex/spark"
xmlns:mx="library://ns.adobe.com/flex/mx"
minWidth="200" minHeight="200">
<s:TextInput id="textInput1"
x="0" y="0"
text="TEXT INPUT #1" />
<s:ComboBox id="comboBox2"
x="0" y="60">
<s:dataProvider>
<mx:ArrayList>
<fx:String>Red</fx:String>
<fx:String>Orange</fx:String>
<fx:String>Yellow</fx:String>
<fx:String>Blue</fx:String>
<fx:String>Green</fx:String>
</mx:ArrayList>
</s:dataProvider>
</s:ComboBox>
<s:TextInput id="textInput2"
x="0" y="30"
text="TEXT INPUT #2" />
</s:Application>
至于焦点边框,除非在组件上设置自定义外观,否则组件周围仍应具有默认的蓝色焦点边框。
组合框
组件也可以接收焦点,没有问题。确保您没有将选项卡focusenabled
属性设置为false
。我找到了解决方案的一部分,但我需要您帮助完成
事实上,使用spark Window可以很好地工作,但我创建的窗口就是这样的,焦点是不可见的。怎么了
var wdetcorr:wDetailCorrespondant = new wDetailCorrespondant();
wdetcorr.monIdCorresp = correspDG.selectedItem.crIndex;
var wOptions:NativeWindowInitOptions = new NativeWindowInitOptions();
wOptions.systemChrome = NativeWindowSystemChrome.NONE;
wOptions.transparent = false;
var fnwDetailPatient:FlexNativeWindow = new FlexNativeWindow(wdetcorr, wOptions);
fnwDetailPatient.activate();
FlexNativeWindow代码为:
package fr.ui.windowSkin
{
import flash.display.NativeWindow;
import flash.display.NativeWindowInitOptions;
import flash.events.Event;
import flash.events.KeyboardEvent;
import flash.ui.Keyboard;
import mx.core.IUIComponent;
import mx.core.IVisualElement;
import mx.core.IVisualElementContainer;
import mx.core.UIComponent;
import mx.events.*;
import mx.managers.WindowedSystemManager;
[Event(name="creationComplete", type="mx.events.FlexEvent")]
public class FlexNativeWindow extends NativeWindow implements IFlexNativeWindow
{
private var _systemManager:WindowedSystemManager;
private var _content:UIComponent;
private var _window:IVisualElementContainer;
public function FlexNativeWindow(window:IVisualElementContainer, initOptions:NativeWindowInitOptions = null)
{
super(initOptions);
_window = window;
addEventListener(Event.ACTIVATE, windowActivateHandler);
}
public function addElement(control:IVisualElement):void
{
_window.addElement(control);
}
public function removeElement(control:IVisualElement):void
{
_window.removeElement(control);
}
private function windowActivateHandler(event:Event):void
{
event.preventDefault();
event.stopImmediatePropagation();
removeEventListener(Event.ACTIVATE, windowActivateHandler);
if (stage)
{
if (!_systemManager)
_systemManager = new WindowedSystemManager(IUIComponent(_window));
stage.addChild(_systemManager);
dispatchEvent(new FlexEvent(FlexEvent.CREATION_COMPLETE));
stage.addEventListener(Event.RESIZE, windowResizeHandler);
stage.addEventListener(KeyboardEvent.KEY_DOWN, keyDownListener);
}
}
private function keyDownListener (e:KeyboardEvent):void {
if (e.keyCode == Keyboard.ESCAPE) {
stage.nativeWindow.dispatchEvent(new Event("myEventClose", true));
stage.nativeWindow.close();
}
}
private function windowResizeHandler(event:Event):void
{
// prise en compte de la valeur mini
UIComponent(_window).height = stage.stageHeight;
UIComponent(_window).width = stage.stageWidth;
}
}
}(1)如何操作-(2)我的TextInput没有自定义外观。感谢您的帮助(1)删除所有关于setFocus()的逻辑。Flex已经为您覆盖了选项卡。(2) 您使用的焦点颜色是否可能与背景的对比度不够?试试#FF0000,看看它是否可见。我找到了解决方案。当我更改windows扩展类时(tilewindow的窗口界面,所有组件的焦点都很好。感谢您的帮助。我尝试过这样做,但它似乎只适用于文本输入,而不适用于combobox@isabelle,这是因为您使用的是DropDownList而不是ComboBox。我不使用ComboBox,因为ComboBox是可编辑的,我不想显示表单的代码,即焦点边框和制表符顺序应该自动完成,除非你搞乱了什么。
package fr.ui.windowSkin
{
import flash.display.NativeWindow;
import flash.display.NativeWindowInitOptions;
import flash.events.Event;
import flash.events.KeyboardEvent;
import flash.ui.Keyboard;
import mx.core.IUIComponent;
import mx.core.IVisualElement;
import mx.core.IVisualElementContainer;
import mx.core.UIComponent;
import mx.events.*;
import mx.managers.WindowedSystemManager;
[Event(name="creationComplete", type="mx.events.FlexEvent")]
public class FlexNativeWindow extends NativeWindow implements IFlexNativeWindow
{
private var _systemManager:WindowedSystemManager;
private var _content:UIComponent;
private var _window:IVisualElementContainer;
public function FlexNativeWindow(window:IVisualElementContainer, initOptions:NativeWindowInitOptions = null)
{
super(initOptions);
_window = window;
addEventListener(Event.ACTIVATE, windowActivateHandler);
}
public function addElement(control:IVisualElement):void
{
_window.addElement(control);
}
public function removeElement(control:IVisualElement):void
{
_window.removeElement(control);
}
private function windowActivateHandler(event:Event):void
{
event.preventDefault();
event.stopImmediatePropagation();
removeEventListener(Event.ACTIVATE, windowActivateHandler);
if (stage)
{
if (!_systemManager)
_systemManager = new WindowedSystemManager(IUIComponent(_window));
stage.addChild(_systemManager);
dispatchEvent(new FlexEvent(FlexEvent.CREATION_COMPLETE));
stage.addEventListener(Event.RESIZE, windowResizeHandler);
stage.addEventListener(KeyboardEvent.KEY_DOWN, keyDownListener);
}
}
private function keyDownListener (e:KeyboardEvent):void {
if (e.keyCode == Keyboard.ESCAPE) {
stage.nativeWindow.dispatchEvent(new Event("myEventClose", true));
stage.nativeWindow.close();
}
}
private function windowResizeHandler(event:Event):void
{
// prise en compte de la valeur mini
UIComponent(_window).height = stage.stageHeight;
UIComponent(_window).width = stage.stageWidth;
}
}