Swing 如何在JEditorPane中使用Netbeans平台语法突出显示?

Swing 如何在JEditorPane中使用Netbeans平台语法突出显示?,swing,netbeans,platform,jeditorpane,Swing,Netbeans,Platform,Jeditorpane,网上有很多教程提供了非常复杂或不起作用的例子。似乎有人建议其他人使用netbeans提供的语法高亮器,但我完全不知道如何做到这一点 我在这方面查阅了许多网站,我能找到的最好的网站是: 然而,我仍然不能使用这个例子(因为它是针对那些不想使用Netbeans平台的人,而只是其中的一部分),我仍然不确定我是否可以 只需以简单的即插即用方式使用语法高亮显示即可。例如,netbeans支持 默认情况下,我可以使用JEditorPane中的高亮标记来解析Ruby/Python/Java吗?或者我需要编写自

网上有很多教程提供了非常复杂或不起作用的例子。似乎有人建议其他人使用netbeans提供的语法高亮器,但我完全不知道如何做到这一点

我在这方面查阅了许多网站,我能找到的最好的网站是:

然而,我仍然不能使用这个例子(因为它是针对那些不想使用Netbeans平台的人,而只是其中的一部分),我仍然不确定我是否可以 只需以简单的即插即用方式使用语法高亮显示即可。例如,netbeans支持 默认情况下,我可以使用JEditorPane中的高亮标记来解析Ruby/Python/Java吗?或者我需要编写自己的解析器:-|


我非常欣赏一个关于如何使用netbeans平台在独立应用程序中插入语法突出显示的简单小示例

部分答案:

显然,以下内容将为Java启用语法高亮显示(以及一些代码完成),但是它似乎不适用于其他语言(Java、XML除外),即使它应该[1]。此外,我找不到任何方法来启用行号(它们已启用,但未显示)

如果有人决定帮助解决这个问题,一个包含行号和其他属性的更统一的示例将是很好的。当然不应该很复杂

[1] 我就是这样使用它的:

String mimeType = "text/x-java"; // NOI18N
JEditorPane editorPane = new JEditorPane();

editorPane.setEditorKit(MimeLookup.getLookup(mimeType).lookup(EditorKit.class));

要获取行号,可以使用以下代码段:

BaseTextUI eui = new BaseTextUI();
eui.installUI(editor);
panel.add(eui.getEditorUI().getExtComponent());

下面应该为您提供javascript的语法突出显示。查找其他类型的MIME以使用不同的语法

File tmpFile = File.createTempFile("tmp_sejsrunner", ".js");
tmpFile = FileUtil.normalizeFile(tmpFile);
FileObject fob = FileUtil.createData(tmpFile);

DataObject dob = DataObject.find(fob);

EditorKit kit = CloneableEditorSupport.getEditorKit("text/javascript");
this.scriptEditorPane.setEditorKit(kit);
this.scriptEditorPane.getDocument().putProperty(Document.StreamDescriptionProperty, dob);
你好

如果你想做一个独立的平台应用程序,我发现类似的信息缺乏,最后这里是我如何在我自己的应用程序中做到这一点的,是的,这可能是重新发明轮子。。但既然我一开始找不到方向盘,不妨创建一个

我在这里获取了有关如何创建java编辑器工具包的信息:

构建了一个包含必要文件的小程序包,并将其拉入其中一个模块下的平台应用程序中。您将需要tools.jar,所有扫描器位都隐藏在那里,它位于JDK install/lib文件夹下—您必须将其打包

然后使用测试程序中的示例来了解如何设置样式,-我喜欢您对标记着色的完全控制

不知羞耻地从包含的JavaKitTest中复制

    JavaContext styles = kit.getStylePreferences();
    Style s;

    //Make Comment lurid green
    s = styles.getStyleForScanValue(Token.COMMENT.getScanValue());
    StyleConstants.setForeground(s, new Color(102, 153, 153));

    //Make String err.. wotever color that is..
    s = styles.getStyleForScanValue(Token.STRINGVAL.getScanValue());
    StyleConstants.setForeground(s, new Color(102, 153, 102));

    //Make NEW nice n red
    s = styles.getStyleForScanValue(Token.NEW.getScanValue());
    StyleConstants.setForeground(s, new Color(102, 10, 10));


    //Do some other scan codes for keywords
    Color keyword = new Color(102, 102, 255);
    for (int code = 70; code <= 130; code++) {
        s = styles.getStyleForScanValue(code);
        if (s != null) {
            StyleConstants.setForeground(s, keyword);
        }
    }
JavaContext styles=kit.getStylePreferences();
风格;
//绿得可怕
s=styles.getStyleForScanValue(Token.COMMENT.getScanValue());
设置前景(s,新颜色(102153153));
//使字符串出错。。那是什么颜色。。
s=styles.getStyleForScanValue(Token.STRINGVAL.getScanValue());
setForeground(s,新颜色(102153102));
//使新的漂亮的红色
s=styles.getStyleForScanValue(Token.NEW.getScanValue());
设置前景(s,新颜色(102,10,10));
//对关键字执行一些其他扫描代码
颜色关键字=新颜色(102102255);

例如(int code=70;code Antonio的示例看起来像是基于NB 5.5平台的,所以一些“酱汁”可能已经改变了。是的,这是我不能使用此示例的原因之一,因为它很好!
    JavaContext styles = kit.getStylePreferences();
    Style s;

    //Make Comment lurid green
    s = styles.getStyleForScanValue(Token.COMMENT.getScanValue());
    StyleConstants.setForeground(s, new Color(102, 153, 153));

    //Make String err.. wotever color that is..
    s = styles.getStyleForScanValue(Token.STRINGVAL.getScanValue());
    StyleConstants.setForeground(s, new Color(102, 153, 102));

    //Make NEW nice n red
    s = styles.getStyleForScanValue(Token.NEW.getScanValue());
    StyleConstants.setForeground(s, new Color(102, 10, 10));


    //Do some other scan codes for keywords
    Color keyword = new Color(102, 102, 255);
    for (int code = 70; code <= 130; code++) {
        s = styles.getStyleForScanValue(code);
        if (s != null) {
            StyleConstants.setForeground(s, keyword);
        }
    }