Здравствуйте, коллеги-скрипторы.
Я пытался настроить компонент datagrid. До сих пор мне удавалось настраивать ячейки с помощью пользовательского 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 в ячейки одной и той же сетки данных, чтобы, если содержимое в ячейке слишком длинное для размера ячейки, оно прокручивалось по ячейке, когда пользователь прокручивает список данных. содержания. Часть, с которой у меня возникли проблемы, - это выяснить, как получить новую строку, назначенную ячейке, без постоянного переопределения содержимого поставщика данных для этой конкретной строки в сетке данных.
Из моего поиска в Интернете я нашел способ создать шатер для текстовых полей. Чего я не могу понять, так это того, как применить его к самой сетке данных.
Код для бегущей строки выглядит следующим образом:
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();
Прямо сейчас выделение работает путем создания текстового поля и выполнения выделения таким образом, но это не самый эффективный способ сделать это вообще из-за проблем с выравниванием при прокрутке содержимого в сетке данных.
Я знаю, как работает бегущая строка, я просто не понимаю, как применить эту бегущую строку к самим ячейкам сетки данных. Я знаю, как получить содержимое моей ячейки без каких-либо проблем и как переопределить его для работы бегущей строки. Я просто не уверен, как назначить его обратно самой ячейке, не переопределяя поставщика данных навсегда.
Любая помощь по любой из этих тем будет принята с благодарностью.
С уважением, Тим