Вот что я сделал - то же самое решение, описанное J_A_X, но с кодом, потому что я думаю, что способ, которым Adobe устанавливает положение, немного сбивает с толку, если вы новичок в ActionScript. Мне нравится подход ChRapO, но я решил попытаться соответствовать тому, как компонент MX DateField устанавливает положение этих элементов.
Мой расширенный класс DateField:
package com.escalationpoint.tagger.view.component
{
import mx.controls.DateField;
import mx.core.mx_internal;
use namespace mx_internal;
public class DateField extends mx.controls.DateField
{
public function DateField()
{
super();
}
override protected function updateDisplayList(unscaledWidth:Number, unscaledHeight:Number):void
{
// Unfortunate that we can't call super.super.updateDisplayList
// since we're redoing work done in super.updateDisplayList. Oh, well...
super.updateDisplayList(unscaledWidth, unscaledHeight);
var w:Number = unscaledWidth;
var h:Number = unscaledHeight;
var arrowWidth:Number = downArrowButton.getExplicitOrMeasuredWidth();
var arrowHeight:Number = downArrowButton.getExplicitOrMeasuredHeight();
textInput.setActualSize(w - arrowWidth - 2, h);
textInput.move(arrowWidth + 4, 0);
downArrowButton.setActualSize(arrowWidth, arrowHeight);
downArrowButton.move(0, Math.round((h - arrowHeight) / 2));
}
}
}
Сравните с методом updateDisplayList в исходном компоненте DateField:
override protected function updateDisplayList(unscaledWidth:Number,
unscaledHeight:Number):void
{
super.updateDisplayList(unscaledWidth, unscaledHeight);
var w:Number = unscaledWidth;
var h:Number = unscaledHeight;
var arrowWidth:Number = downArrowButton.getExplicitOrMeasuredWidth();
var arrowHeight:Number = downArrowButton.getExplicitOrMeasuredHeight();
downArrowButton.setActualSize(arrowWidth, arrowHeight);
downArrowButton.move(w - arrowWidth, Math.round((h - arrowHeight) / 2));
textInput.setActualSize(w - arrowWidth - 2, h);
}