2014-05-20 43 views
1

我正在爲編輯器使用StandaloneTextArea(STA)組件,並使用語法高亮顯示。我知道如何通過xml文件定義函數和關鍵字,但我不知道如何自定義STA的字體和顏色。jEdit StandaloneTextArea的自定義顏色方案?

這裏是我到目前爲止已經試過:

Mode mode = new Mode("asm"); 
mode.setProperty("file", assemblymodes[COMPILER_ACME]); 
ModeProvider.instance.addMode(mode); 
standaloneTextArea.getBuffer().setMode(mode); 

我曾嘗試一些與paintersetStyle來設置顏色,沒有成功:

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

我知道有喜歡的顏色屬性view.style.comment1,但如何分配這些以便將自定義顏色方案應用於語法高亮顯示?

回答

1

好的,我找到了一個解決方案。我第一次通過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)); 
    } 
}