Java jEdit StandaloneTextArea的定制配色方案?

Java jEdit StandaloneTextArea的定制配色方案?,java,syntax-highlighting,jedit,Java,Syntax Highlighting,Jedit,我将(STA)组件用于带有语法高亮显示的编辑器。我知道如何通过xml文件定义函数和关键字,但我不知道如何自定义STA的字体和颜色 以下是我迄今为止所尝试的: Mode mode = new Mode("asm"); mode.setProperty("file", assemblymodes[COMPILER_ACME]); ModeProvider.instance.addMode(mode); standaloneTextArea.getBuffer().setMode(mode); 我曾

我将(STA)组件用于带有语法高亮显示的编辑器。我知道如何通过xml文件定义函数和关键字,但我不知道如何自定义STA的字体和颜色

以下是我迄今为止所尝试的:

Mode mode = new Mode("asm");
mode.setProperty("file", assemblymodes[COMPILER_ACME]);
ModeProvider.instance.addMode(mode);
standaloneTextArea.getBuffer().setMode(mode);
我曾尝试使用
painter
setStyle
设置颜色,但没有成功:

TextAreaPainter painter = standaloneTextArea.getPainter();
painter.setStyles(SyntaxUtilities.loadStyles(Font.MONOSPACED, 14));

我知道有一些颜色属性,比如
view.style.comment1
,但是如何分配这些属性以便将自定义颜色方案应用于语法高亮显示?

好的,我找到了一个解决方案。我首先通过
TextArea.createTextArea()
创建了StandaloneTextArea,在设置属性时它似乎不起作用,因此我必须从StandaloneTextArea派生我自己的类:

public class RL64TextArea extends StandaloneTextArea {
    final static Properties props;
    static IPropertyManager propertyManager;

    static {
        props = new Properties();
        props.putAll(loadProperties("jedit_keys.props"));
        props.putAll(loadProperties("jedit.props"));
        propertyManager = new IPropertyManager() {
            @Override
            public String getProperty(String name) {
                return props.getProperty(name);
            }
        };
    }

    public void setProperty(String name, String val) {
        props.setProperty(name, val);
    }

    private static Properties loadProperties(String fileName) {
        Properties loadedProps = new Properties();
        InputStream in = StandaloneTextArea.class.getResourceAsStream(fileName);
        try {
            loadedProps.load(in);
        }
        catch (IOException e) {
            ConstantsR64.r64logger.log(Level.WARNING,e.getLocalizedMessage());
        }
        finally {
            IOUtilities.closeQuietly(in);
        }
        return loadedProps;
    }

    public RL64TextArea() {
        super(propertyManager);

        // set syntax rules
        Mode mode = new Mode("asm");
        mode.setProperty("file", "syntax-rules.xml");
        ModeProvider.instance.addMode(mode);
        // add mode to buffer
        getBuffer().setMode(mode);

        // set colors
        setProperty("view.style.function", "color:"+ColorSchemes.getColor(scheme, ColorSchemes.COLOR_SCRIPTKEYWORD));
        setProperty("view.style.keyword1", "color:"+ColorSchemes.getColor(scheme, ColorSchemes.COLOR_KEYWORD));
        // ... more colors

        // load styles
        getPainter().setStyles(SyntaxUtilities.loadStyles(Font.MONOSPACED, 12));
    }
}