Javascript 在extendscript中设置编辑文本的焦点

Javascript 在extendscript中设置编辑文本的焦点,javascript,adobe-illustrator,extendscript,adobe-scriptui,Javascript,Adobe Illustrator,Extendscript,Adobe Scriptui,我有一个javascript,它遍历Adobe Illustrator中的层列表,并根据用户的输入更改名称 有两个“edittext”文本框用于输入,第一个是要搜索的名称,第二个是要替换的名称。脚本可以工作,但是我希望在启动脚本时聚焦第一个文本框,这样用户就可以从第一个文本框开始,并可以切换到第二个文本框 此外,我想让我的提交按钮运行时,进入按钮被按下,使它更快 我正在使用AdobeExtendScript TK和AdobeIllustratorCS6 #target illustrator #

我有一个javascript,它遍历Adobe Illustrator中的层列表,并根据用户的输入更改名称

有两个“edittext”文本框用于输入,第一个是要搜索的名称,第二个是要替换的名称。脚本可以工作,但是我希望在启动脚本时聚焦第一个文本框,这样用户就可以从第一个文本框开始,并可以切换到第二个文本框

此外,我想让我的提交按钮运行时,进入按钮被按下,使它更快

我正在使用AdobeExtendScript TK和AdobeIllustratorCS6

#target illustrator
#targetengine main

// JavaScript Document
function renameText(searchText, replaceText) {
     if (app.documents.length == 0) return;
     var docRef = app.activeDocument;
     recurseLayers(searchText, replaceText, docRef.layers);
}


function recurseLayers(searchText, replaceText, objArray) {
     try {
         $.writeln("Layer length: " + objArray.length);
         for (var i = 0; i < objArray.length; i++) {
             if (objArray[i].visible == true && objArray[i].locked == false) {

                 //var searchtext = "/\s*" + searchText + "\s*\d*/";
                 objArray[i].name = objArray[i].name.replace(searchText, replaceText);

                  if (objArray[i].layers.length > 0) {
                      recurseLayers(searchText, replaceText, objArray[i].layers);
                  }
            }
          }
      } catch (e) {
          logger(e);
     }
}


startGUI();

function startGUI() {

        var win = new Window("dialog", "Replace Layer name", undefined);

        win.orientation = "column";
        win.alignChildren = ["fill", "fill"];

        // Search
        var searchGrp = win.add("panel", undefined, "Search and Replace");
        searchGrp.orientation = "column";
        searchGrp.alignChildren = ["fill", "fill"];

        var titleMsgS = searchGrp.add("statictext", undefined, "Layer name to search:");
        var searchText = searchGrp.add("edittext { characters: 1, justify: 'center', active: true }");
        searchTest.setFocus();

        searchText.helpTip = "Input layer name to replace";

        var titleMsgR = searchGrp.add("statictext", undefined, "Layer name to replace with:");
        var replaceText = searchGrp.add("edittext { characters: 1, justify: 'center', active: true }");
        replaceText.helpTip = "Input layer name to replace with";

        // Replace button
        var replaceBtn = searchGrp.add("button", undefined, "Replace");
        replaceBtn.helpTip = "Replace layer name";
        replaceBtn.onClick = function() {
                renameText(searchText.text, replaceText.text);
                app.redraw();
        }

        // Close button
        var quitBtn = win.add("button", undefined, "Close");
        quitBtn.helpTip = "Press Esc to Close";

        // Event listener for the quit button
        quitBtn.onClick = function() {   
            win.close();   
        }  

        // Centering & Show Window
        win.center();
        win.show(); 
}


    // Prints stack trace
    function logger(e) {
        var errorMsg = "";

        errorMsg = errorMsg.concat("An error has occured:\n", e.line, "\n", e.message, "\n", e.stack);
        $.writeln(errorMsg);
    }
#目标illustrator
#目标发动机总管
//JavaScript文档
函数重命名文本(搜索文本、替换文本){
如果(app.documents.length==0)返回;
var docRef=app.activeDocument;
递归层(searchText、replaceText、docRef.layers);
}
函数递归层(searchText、replaceText、objArray){
试一试{
$.writeln(“层长度:+objArray.length”);
for(var i=0;i0){
递归层(searchText、replaceText、objArray[i].layers);
}
}
}
}捕获(e){
记录器(e);
}
}
startGUI();
函数startGUI(){
var win=新窗口(“对话框”,“替换图层名称”,未定义);
win.orientation=“column”;
win.alignChildren=[“填充”、“填充”];
//搜寻
var searchGrp=win.add(“面板”,未定义,“搜索和替换”);
searchGrp.orientation=“column”;
searchGrp.alignChildren=[“填充”、“填充”];
var titleMsgS=searchGrp.add(“statictext”,未定义,“要搜索的层名称:”);
var searchText=searchGrp.add(“edittext{characters:1,justify:'center',active:true}”);
searchTest.setFocus();
searchText.helpTip=“输入要替换的图层名称”;
var titleMsgR=searchGrp.add(“statictext”,未定义,“要替换的图层名:”);
var replaceText=searchGrp.add(“edittext{characters:1,justify:'center',active:true}”);
replaceText.helpTip=“输入要替换的图层名”;
//更换按钮
var replaceBtn=searchGrp.add(“按钮”,未定义,“替换”);
replaceBtn.helpTip=“替换图层名称”;
replaceBtn.onClick=函数(){
重命名文本(searchText.text,replaceText.text);
app.redraw();
}
//关闭按钮
var quitBtn=win.add(“按钮”,未定义,“关闭”);
quitBtn.helpTip=“按Esc键关闭”;
//退出按钮的事件侦听器
quitBtn.onClick=function(){
win.close();
}  
//定心和显示窗口
win.center();
win.show();
}
//打印堆栈跟踪
函数记录器(e){
var errorMsg=“”;
errorMsg=errorMsg.concat(“发生错误:\n”,e.line,“\n”,e.message,“\n”,e.stack”);
$.writeln(errorMsg);
}

这应该可以让你走了。编辑文本有一个属性
处于活动状态
。如果设置为true,则具有焦点。该键通过
Eventlistener
完成

但是:

–严格来说,这不是ScriptUI问题:在After Effects和Illustrator中,无法再使用EventListener:.addEventListener()不起作用。

在macOS 10.11.6上的ESTK 4.0.0.1中测试

var win = new Window ("dialog");
var etext1 = win.add ("edittext", undefined, "foo");
var etext2 = win.add ("edittext", undefined, "bah");
win.add ("button", undefined, "OK");
win.add ("button", undefined, "Cancel");
etext1.active = true;
win.addEventListener ("keydown", function (kd) {pressed (kd)});
function pressed (k) {
if(k.keyName === "Enter"){
    $.writeln("You pressed " + k.keyName);
  }
}
win.show ( );