어쩔수 없이 쓰고 있지만, 어중간하게 곳곳에서 문제를 일으켜 주시는 플렉스 덕분에 좌우충돌중;;(객체지향은 절반만 지원하고..;;)
TextArea와 달리 X랄 맞게 동작하는 (max)VerticalScrollPosition 때문에 제작.

기본적으로 MSN이나 게임내 채팅창처럼 동작.
1. VBox에 내용이 추가될 때마다 제일 아래로 정렬
2. 내용 확인을 위해 스크롤을 중간으로 이동하면 새로운 메시지가 들어와도 아래로 정렬하지 않음.
3. 스크롤을 제일 아래로 내리면 그 이후로는 다시 아래로 정렬

이벤트 생성했다 지웠다 하는 방법 말고 더 좋은 방법이 있을듯도 한데 귀찮아서 여기까지 -_-;

<?xml version="1.0" encoding="utf-8"?>

<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="vertical" creationComplete="init();" viewSourceURL="srcview/index.html">

    <mx:Script>

        <![CDATA[

            import mx.controls.Text;

            import mx.controls.TextInput;

            import mx.events.ScrollEvent;

            import mx.events.FlexEvent;

           

            public static var UPDATE_EVENT_REMOVED:int = 0;        // 이벤트 없음 혹은 삭제됨

            public static var UPDATE_EVENT_ADDED:int = 1;        // 이벤트 있음

            private var isUpdateEvent:int = VBoxScrollExam.UPDATE_EVENT_REMOVED;

           

            private function init():void {

                // VBox 업데이트 처리할 이벤트 등록

                vb.addEventListener(FlexEvent.UPDATE_COMPLETE, onUpdate);

                isUpdateEvent = VBoxScrollExam.UPDATE_EVENT_ADDED;

 

                // VBox 스크롤을 조작할 처리할 이벤트               

                vb.addEventListener(ScrollEvent.SCROLL, onScroll);

            }

           

            private function onUpdate(event:FlexEvent):void {

                // 스크롤 위치를 아래로 유지

                vb.verticalScrollPosition = vb.maxVerticalScrollPosition;

            }

           

            private function onScroll(event:ScrollEvent):void {

                // UpdateEvent등록이 안된 상태에서, 스크롤 포지션을 아래로 이동하면

                if(isUpdateEvent == VBoxScrollExam.UPDATE_EVENT_REMOVED && event.position >= vb.maxVerticalScrollPosition) {

                    vb.addEventListener(FlexEvent.UPDATE_COMPLETE, onUpdate);

                    isUpdateEvent = VBoxScrollExam.UPDATE_EVENT_ADDED;

                   

                    lblUpdateEventState.text = "UPDATE_EVENT_ADDED";

                }

                // UpdateEvent 등록된 상태에서, 스크롤을 위로 이동하면

                else if(isUpdateEvent == VBoxScrollExam.UPDATE_EVENT_ADDED && event.position < vb.maxVerticalScrollPosition) {

                    vb.removeEventListener(FlexEvent.UPDATE_COMPLETE, onUpdate);

                    isUpdateEvent = VBoxScrollExam.UPDATE_EVENT_REMOVED;

                    

                    lblUpdateEventState.text = "UPDATE_EVENT_REMOVED";           

                }

            }

           

            // 텍스트 추가

            private function onAddItemText(event:MouseEvent):void {

                var t:Text = new Text();

                t.htmlText = "<font color='#ff0000'>텍스트 테스트입니다</font>\n" +

                                "ABCDEFGHIJKLMN\n";

                t.selectable = false;

                t.percentWidth = 100;

                vb.addChild(t);

            }

           

            // 텍스트입력박스 추가

            private function onAddItemTextInput(event:MouseEvent):void {

                var ti:TextInput = new TextInput();

                ti.text = "Text Input";

                ti.percentWidth = 100;

                vb.addChild(ti);

            }

        ]]>

    </mx:Script>

    <mx:HBox>

        <mx:Button label="AddItem(TEXT)" click="onAddItemText(event);"/>

        <mx:Button label="AddItem(TEXTINPUT)" click="onAddItemTextInput(event);"/>

    </mx:HBox>

    <mx:VBox id="vb" height="200" width="280" verticalScrollPolicy="on" horizontalScrollPolicy="off" verticalGap="0" cornerRadius="0" borderStyle="solid">

    </mx:VBox>

    <mx:Label width="250" id="lblUpdateEventState" text="state"/>

</mx:Application>


[실행화면]

+ Recent posts

티스토리 툴바