好的,我找到了解决方案。我首先创建了 StandaloneTextArea,通过TextArea.createTextArea()
它在设置属性时似乎不起作用,所以我必须从 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));
}
}