编辑器组件

走着路睡觉大约 3 分钟

编辑器组件

和java原生 Swing JTextAreaopen in new window 相比,IntelliJ Platform的 EditorTextFieldopen in new window 编辑器的有语法高亮、代码补全,代码折叠等优势。
编辑器通常显示在编辑器选项卡中,也可以嵌入对话框和工具窗口中。

EditorTextFieldopen in new window 有以下属性:

  • 解析文本字段中的文本所依据的文件类型;

  • 文本字段是否是只读,是否能编辑

  • 文本字段是单行还是多行的

可以通过 EditorCustomizationopen in new window 的子类重写 createEditor()

可以通过重写EditorTextFieldopen in new window 子类的中的 **createEditor()方法 ,在createEditor()**方法通过 EditorCustomization 进一步自定义编辑器
下面是一些常用的 EditorCustomization实现类:

EditorTextField 有很多提供其它功能的子类

如果想在对话框中使用一个输入框编辑器,可以考虑LanguageTextFieldopen in new window ,它提供了方便操作的API

如果想在编辑器中增加自动补全功能,可以使用 TextFieldWithCompletionopen in new window ,可能通过它的带 TextCompletionProvider 参数的构造器提供自动补全功能。

如果想实现自己的自动补全组件,可以继承 TextFieldCompletionProvideropen in new window ,重写 addCompletionVariants() 方法,然后使用CompletionResultSet.addElement() 添加入自动补全工具集

在创建索引阶段,可以通过 TextFieldCompletionProviderDumbAwareopen in new window 查看自动补全情况

Refer to the Code Completion to learn more about completion.

可以在 代码补全 文档中查看更多

Java

使用EditorTextField一个常用的例子: 是输入Java的类名或包名,需要通过以下几步:

PsiFile psiFile = PsiDocumentManager.getInstance(project)
        .getPsiFile(editor.getDocument());
PsiElement element = psiFile.findElementAt(editor.getCaretModel().getOffset());

PsiExpressionCodeFragment code =
        JavaCodeFragmentFactory.getInstance(project)
        .createExpressionCodeFragment("", element, null, true);

Document document =
        PsiDocumentManager.getInstance(project).getDocument(code);

EditorTextField myInput =
        new EditorTextField(document, project, JavaFileType.INSTANCE);

提示

  • 当创建多个字段的时候,需要两个单独的文档。所以使用了单独的 PsiExpressionCodeFragment 实例来实现的。

  • 没有使用 setText() 方法,使用了 createExpressionCodeFragment() 方法,把文本当做参数传了过去。

  • 构建GUI 时, 可以通过在 IDE 中右键单击把 JTextField 实例 替换为自定义组件。确保使用“Custom Create”,初始化代码才能正常工作。

上次编辑于:
贡献者: zhaojingbo
Loading...