Здравствуйте, коллеги-сценаристы,
Я пытался настроить компонент сетки данных. До сих пор я был в состоянии настроить ячейки, используя собственный cellRenderer. Я хотел бы изменить внешний вид заголовка, используя собственный headerRenderer, но из всех, которые я пытался сделать, не получается.
Это мой текущий код headerRenderer.
package {
import fl.controls.dataGridClasses.HeaderRenderer;
import flash.text.TextFormat;
import flash.filters.BevelFilter;
import flash.text.TextField;
import flash.display.Sprite;
public class PlayListHeaderRenderer extends HeaderRenderer {
public function PlayListHeaderRenderer() {
var format:TextFormat = new TextFormat("Arial", 12);
format.color = 0xffff00;
format.bold = true;
var upSkinBg:Sprite = new Sprite();
upSkinBg.graphics.lineStyle(0.1,0x999999);
upSkinBg.graphics.beginFill(0x666666);
upSkinBg.graphics.drawRect(0,0,10,10);
upSkinBg.graphics.endFill();
var downSkinBg:Sprite = new Sprite();
downSkinBg.graphics.lineStyle(0.1,0x999999);
downSkinBg.graphics.beginFill(0x0000cc);
downSkinBg.graphics.drawRect(0,0,10,10);
downSkinBg.graphics.endFill();
var overSkinBg:Sprite = new Sprite();
overSkinBg.graphics.lineStyle(0.1,0x999999);
overSkinBg.graphics.beginFill(0x0000ff);
overSkinBg.graphics.drawRect(0,0,10,10);
overSkinBg.graphics.endFill();
var selectedUpSkinBg:Sprite = new Sprite();
selectedUpSkinBg.graphics.lineStyle(0.1,0x999999);
selectedUpSkinBg.graphics.beginFill(0x0000cc);
selectedUpSkinBg.graphics.drawRect(0,0,10,10);
selectedUpSkinBg.graphics.endFill();
var selectedDownSkinBg:Sprite = new Sprite();
selectedDownSkinBg.graphics.lineStyle(0.1,0x999999);
selectedDownSkinBg.graphics.beginFill(0x0000cc);
selectedDownSkinBg.graphics.drawRect(0,0,10,10);
selectedDownSkinBg.graphics.endFill();
var selectedOverSkinBg:Sprite = new Sprite();
selectedOverSkinBg.graphics.lineStyle(0.1,0x999999);
selectedOverSkinBg.graphics.beginFill(0x0000ff);
selectedOverSkinBg.graphics.drawRect(0,0,10,10);
selectedOverSkinBg.graphics.endFill();
setStyle("textFormat", format);
setStyle("upSkin", upSkinBg);
setStyle("downSkin", downSkinBg);
setStyle("overSkin", overSkinBg);
setStyle("selectedUpSkin", selectedUpSkinBg);
setStyle("selectedDownSkin", selectedDownSkinBg);
setStyle("selectedOverSkin", selectedOverSkinBg);
}
}
}
Внутри моей настоящей программы я делаю что-то вроде:
dgPL.setStyle("headerRenderer", PlayListHeaderRenderer);
, чтобы попытаться установить класс headerRenderer, который я создал, на имя сетки данных dgPL. Но это не работает. Из того, что я нашел в Интернете, класс headerRenderer должен действовать точно так же, как и класс cellRenderer, при разработке и реализации. Я не могу найти примеров людей, использующих пользовательский класс headerRenderer, или примеров того, как его создать. Так что любая помощь будет полезна, если я сообщу, где я ошибся при разработке своего класса или внедрении его в свою программу.
Также я пытаюсь выяснить, как добавить Marquee к ячейкам той же таблицы данных, чтобы, если содержимое в ячейке было слишком длинным для размера ячейки, оно прокручивалось по ячейке, когда пользователь переворачивает список содержания данных. У меня возникли проблемы с выяснением того, как получить новую строку, назначенную для ячейки, без переопределения содержимого поставщика данных для этой конкретной строки в сетке данных.
Из моих поисков в Интернете я нашел способ создать выделение для textFields. Я не могу понять, как применить его к самой сетке данных.
Код для маркизы следующий:
var tf:TextField = new TextField();
tf.defaultTextFormat = dtf;
tf.text = dgPL.getItemAt(evt.rowIndex.toString()).Artist + " ";
tf.x = tf.y = 300;
addChild(tf);
var t:Timer = new Timer(200);
t.addEventListener(
TimerEvent.TIMER,
function(ev:TimerEvent): void
{
tf.text = tf.text.substr(1) + tf.text.charAt(0);
}
);
t.start();
Прямо сейчас выделение работает, создавая textField и выполняя выделение таким образом, но это не самый эффективный способ сделать это вообще из-за проблем выравнивания при прокрутке содержимого в сетке данных.
Я знаю, как работает Marquee. Я просто не понимаю, как применить этот Marquee к самим ячейкам данных. Я знаю, как захватить содержимое моей ячейки без каких-либо проблем и как переопределить его для работы с выделением. Я просто не уверен, как назначить его обратно самой ячейке, не отменяя постоянно источник данных.
Любая помощь по любой из этих тем будет принята с благодарностью.
С уважением,
Тим