TextField

TextField 是用于显示和编辑文本的 DisplayObject。它提供从标签显示到输入表单的文本相关功能。

继承

classDiagram
    DisplayObject <|-- InteractiveObject
    InteractiveObject <|-- TextField

    class TextField {
        +text: String
        +textColor: Number
        +type: String
        +setTextFormat()
    }

属性

文本相关

属性类型说明
textstring文本字段中的当前文本字符串
htmlTextstring包含文本字段内容的 HTML 表示
lengthnumber文本字段中的字符数(只读)
maxCharsnumber文本字段可以包含的最大字符数(0 表示无限制)
restrictstring指示用户可以输入到文本字段中的字符集
defaultTextFormatTextFormat指定应用于文本的格式
stopIndexnumber设置文本的任意显示结束位置(默认:-1)

显示相关

属性类型说明
widthnumber显示对象的宽度(像素)
heightnumber显示对象的高度(像素)
textWidthnumber文本的宽度(像素)(只读)
textHeightnumber文本的高度(像素)(只读)
autoSizestring控制文本字段的自动调整大小和对齐(“none”、“left”、“center”、“right”)
autoFontSizeboolean控制文本大小的自动调整大小和对齐(默认:false)
wordWrapboolean表示文本字段是否自动换行的布尔值(默认:false)
multilineboolean指示字段是否为多行文本字段(默认:false)
numLinesnumber文本行数(只读)

边框和背景相关

属性类型说明
backgroundboolean指定文本字段是否具有背景填充(默认:false)
backgroundColornumber文本字段背景的颜色(默认:0xffffff)
borderboolean指定文本字段是否具有边框(默认:false)
borderColornumber文本字段边框的颜色(默认:0x000000)

轮廓相关

属性类型说明
thicknessnumber轮廓的文本宽度,可以用 0 禁用(默认:0)
thicknessColornumber轮廓文本的十六进制格式颜色(默认:0)

输入相关

属性类型说明
typestring文本字段的类型(“static”、“dynamic”、“input”)(默认:“static”)
focusboolean文本字段是否具有焦点(默认:false)
focusVisibleboolean控制文本字段闪烁线的可见性(默认:false)
focusIndexnumber文本字段焦点位置的索引(默认:-1)
selectIndexnumber文本字段选择位置的索引(默认:-1)
compositionStartIndexnumber文本字段的组合开始索引(默认:-1)
compositionEndIndexnumber文本字段的组合结束索引(默认:-1)

滚动相关

属性类型说明
scrollXnumberx 轴上的滚动位置(默认:0)
scrollYnumbery 轴上的滚动位置(默认:0)
scrollEnabledboolean控制滚动功能的开/关(默认:true)
xScrollShapeShape用于 x 滚动条显示的 Shape 对象(只读)
yScrollShapeShape用于 y 滚动条显示的 Shape 对象(只读)

方法

方法返回值说明
appendText(newText: string)void将 newText 参数指定的字符串附加到文本字段文本的末尾
insertText(newText: string)void将文本添加到文本字段的焦点位置
deleteText()void删除文本字段的选择范围
getLineText(lineIndex: number)string返回 lineIndex 参数指定的行的文本
replaceText(newText: string, beginIndex: number, endIndex: number)void将 beginIndex 和 endIndex 参数指定的字符范围替换为 newText 参数的内容
selectAll()void选择文本字段中的所有文本
copy()void复制文本字段的选择
paste()void将复制的文本粘贴到选择范围
setFocusIndex(stageX: number, stageY: number, selected?: boolean)void设置文本字段的焦点位置
keyDown(event: KeyboardEvent)void处理按键按下事件

TextFormat

用于设置文本样式的类。

属性

属性类型说明
fontString字体名称
sizeNumber字体大小
colorNumber文本颜色
boldBoolean粗体
italicBoolean斜体
alignString对齐(“left”、“center”、“right”)
leadingNumber行间距(像素)
letterSpacingNumber字母间距(像素)

使用示例

基本文本显示

const { TextField } = next2d.text;

const textField = new TextField();
textField.text = "Hello, Next2D!";
textField.x = 100;
textField.y = 100;

stage.addChild(textField);

应用 TextFormat

const { TextField, TextFormat } = next2d.text;

const textField = new TextField();
textField.text = "样式文本";

// 创建 TextFormat
const format = new TextFormat();
format.font = "Arial";
format.size = 24;
format.color = 0x3498db;
format.bold = true;

// 应用格式
textField.setTextFormat(format);

// 设置为默认格式
textField.defaultTextFormat = format;

stage.addChild(textField);

自动大小

const { TextField } = next2d.text;

const textField = new TextField();
textField.autoSize = "left";  // 自动扩展以适应文本
textField.text = "此文本将自动调整字段大小";

stage.addChild(textField);

多行文本

const { TextField } = next2d.text;

const textField = new TextField();
textField.width = 200;
textField.multiline = true;
textField.wordWrap = true;
textField.text = "这是多行文本。它将自动换行。";

stage.addChild(textField);

输入字段

const { TextField } = next2d.text;

const inputField = new TextField();
inputField.type = "input";
inputField.width = 200;
inputField.height = 30;
inputField.border = true;
inputField.borderColor = 0xcccccc;
inputField.background = true;
inputField.backgroundColor = 0xffffff;

// 占位符替代
inputField.text = "";

// 输入限制(仅数字)
inputField.restrict = "0-9";

// 输入事件
inputField.addEventListener("change", function(event) {
    console.log("输入值:", event.target.text);
});

stage.addChild(inputField);

密码字段

const { TextField } = next2d.text;

const passwordField = new TextField();
passwordField.type = "input";
passwordField.displayAsPassword = true;
passwordField.width = 200;
passwordField.height = 30;
passwordField.border = true;
passwordField.borderColor = 0xcccccc;

stage.addChild(passwordField);

HTML 文本

const { TextField } = next2d.text;

const textField = new TextField();
textField.width = 300;
textField.multiline = true;
textField.htmlText = '<font face="Arial" size="20" color="#3498db">' +
    '<b>粗体文本</b><br/>' +
    '<i>斜体文本</i><br/>' +
    '<font color="#e74c3c">红色文本</font>' +
    '</font>';

stage.addChild(textField);

可滚动文本

const { TextField } = next2d.text;

const textField = new TextField();
textField.width = 200;
textField.height = 100;
textField.multiline = true;
textField.wordWrap = true;
textField.border = true;
textField.text = "长文本...\n".repeat(20);

// 滚动操作
function scrollUp() {
    if (textField.scrollY > 0) {
        textField.scrollY -= 10;
    }
}

function scrollDown() {
    textField.scrollY += 10;
}

stage.addChild(textField);

动态文本更新

const { TextField, TextFormat } = next2d.text;

const scoreField = new TextField();
scoreField.autoSize = "left";

const format = new TextFormat();
format.font = "Arial";
format.size = 32;
format.color = 0xffffff;
scoreField.defaultTextFormat = format;

let score = 0;

function updateScore(points) {
    score += points;
    scoreField.text = "分数: " + score;
}

updateScore(0);
stage.addChild(scoreField);

文本轮廓效果

const { TextField, TextFormat } = next2d.text;

const textField = new TextField();
textField.autoSize = "left";

const format = new TextFormat();
format.font = "Arial";
format.size = 48;
format.color = 0xffffff;
textField.defaultTextFormat = format;

textField.text = "轮廓文本";
textField.thickness = 2;
textField.thicknessColor = 0x000000;

stage.addChild(textField);

替换部分文本

const { TextField } = next2d.text;

const textField = new TextField();
textField.autoSize = "left";
textField.text = "Hello World!";

// 将 "World" 替换为 "Next2D"
textField.replaceText("Next2D", 6, 11);
// 结果: "Hello Next2D!"

stage.addChild(textField);

事件

事件说明
change文本更改时
focus获得焦点时
blur失去焦点时
keyDown按键按下时
keyUp按键释放时
const { TextField } = next2d.text;

const inputField = new TextField();
inputField.type = "input";

// 按下 Enter 键时提交表单
inputField.addEventListener("keyDown", function(event) {
    if (event.keyCode === 13) {  // Enter
        submitForm(inputField.text);
    }
});

stage.addChild(inputField);

相关