2014-05-20 4 views
1

J'utilise le composant StandaloneTextArea (STA) pour un éditeur avec coloration syntaxique. Je sais comment définir des fonctions et des mots-clés via un fichier xml, mais je ne sais pas comment personnaliser la police et la couleur de la STA.Schéma de couleurs personnalisé pour jEdit StandaloneTextArea?

Voici ce que je l'ai essayé jusqu'à présent:

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

J'ai essayé quelque chose avec painter et setStyle pour définir les couleurs, sans succès:

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

Je sais qu'il ya des propriétés de couleur comme view.style.comment1, mais comment les affecter afin d'appliquer des jeux de couleurs personnalisés à la coloration syntaxique?

Répondre

1

Ok, j'ai trouvé une solution. J'ai d'abord créé le StandaloneTextArea via TextArea.createTextArea() qui ne semble pas fonctionner lorsque la définition des propriétés, donc je dois tirer ma propre classe de 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)); 
    } 
} 
Questions connexes