Swing文本编辑器,具有颜色和高亮显示功能。

9

我正在编写一个应用程序,用户需要将JavaScript脚本作为输入编写。目前我有一个简单的JTextArea,但我想用一些可以进行语法高亮和代码着色的东西来代替它,以使脚本更加连贯。

你知道有什么开源工具可以做到这一点吗?

谢谢。

5个回答

13

RSyntaxTextArea

RSyntaxTextArea是Java Swing的语法高亮文本组件。它扩展了JTextComponent,因此可以完全与标准的javax.swing.text包集成。它快速高效,并可用于任何需要编辑或查看源代码的应用程序。

RSyntaxTextArea最初是RText程序员文本编辑器的一部分,但现在正在制作成一个单独的组件,可在任何Swing应用程序中重复使用。

截图:

enter image description here


3
尝试使用jEdit。它主要是用Java编写的编辑器而不是编辑器组件。但也许你可以从jar文件中提取编辑器组件。只是一个想法。

1

我猜,根据我的猜测,你需要除了JTextArea之外的其他东西,这样你就可以用不同的颜色显示不同的内容。那么,可以使用JTextPane或JEditorPane来实现。

在这里,我提供一个简单的示例,演示如何为JTextPane提供指定的消息以及该消息的颜色。

你可以为任何输入文本更改颜色,这样它可以为每个单词显示不同的颜色。

// This is in javax.swing.JTextPane;
JTextPane tPane = new JTextPane();

/* Method to put text in this textPane with colour of your choice
 * For this you need these classes.
 * import javax.swing.text.AttributeSet;
 * import javax.swing.text.SimpleAttributeSet;
 * import javax.swing.text.StyleConstants;
 * import javax.swing.text.StyleContext;
 */

protected static void appendToPane(String msg, Color c,String f)
{
    StyleContext sc = StyleContext.getDefaultStyleContext();
    AttributeSet aset = sc.addAttribute(SimpleAttributeSet.EMPTY, StyleConstants.Foreground, c);
    aset = sc.addAttribute(aset, StyleConstants.FontFamily, f);

    int len = tPane.getDocument().getLength();
    tPane.setCaretPosition(len);
    tPane.setCharacterAttributes(aset, false);
    tPane.replaceSelection(msg);
}

所以如果你这样调用 appendToPane("HI", Color.RED, "Lucida Console"),它将以指定字体的红色显示 HI。 如果你这样调用 appendToPane(" THERE", Color.BLACK, "TIMES NEW ROMAN"),那么 THERE 将以黑色在同一位置旁边打印 Hi。

1

看看NetBeans平台提供了什么。我知道他们会发布JAR文件作为组件,但它们不在Maven中央仓库中,这让我无法使用。


1

标准 JEditorPaneSwing 组件可以实现它。

更新:查看APItutorial


开箱即用,还是需要创建一个解析文本并提供高亮显示的EditorKit/Document - kdgregory
默认情况下,JEditorPane 知道 html、rtf 和纯文本。但是可以配置更多的套件/文档。 - Eugene Ryzhikov

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接