编辑器文本字段
与SwingJTextArea相比,IntelliJ 平台的编辑器组件有很多优势:语法高亮支持、代码完成、代码折叠等等。编辑器通常显示在编辑器选项卡中,但它们也可以嵌入对话框或工具窗口中。这是由EditorTextField组件启用的。
可以指定以下属性:
解析文本字段中的文本所依据的文件类型;
文本字段是只读的还是可编辑的;
文本字段是单行还是多行。
通过子类化、覆盖createEditor()和应用EditorCustomization. 存在几种常用的定制实现,包括:
SpellCheckingEditorCustomization禁用拼写检查
HorizontalScrollBarEditorCustomization打开/关闭水平滚动条
ErrorStripeEditorCustomization打开/关闭右侧的错误条纹
EditorTextField有许多子类,可根据需要用于附加功能。
如果您想将编辑器用作对话框中的输入字段,请考虑使用LanguageTextField,它提供了更易于访问的 API。
如果要向编辑器添加自动完成功能,请使用TextFieldWithCompletion. TextCompletionProvider构造函数将实现以提供自动完成变体的类作为参数。用于TextFieldCompletionProvider创建您自己的提供程序。为此,addCompletionVariants()使用 覆盖并添加完成变体CompletionResultSet.addElement()。
TextFieldCompletionProviderDumbAware即使在索引阶段,也请参阅完成。
请参阅代码完成以了解有关完成的更多信息。
爪哇
一个常见的用例EditorTextField是输入 Java 类或包的名称。这可以通过以下步骤来完成:
用于JavaCodeFragmentFactory.createReferenceCodeFragment()创建代表类或包名的代码片段;
调用PsiDocumentManager.getDocument()获取代码片段对应的文档;
将返回的文档传递给EditorTextField构造函数或其setDocument()方法。
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);
如果您的插件依赖于 Java 功能并针对 2019.2 或更高版本,请确保按照此博客文章中的步骤进行操作。
提示:
创建多个字段时,需要两个单独的文档。这是通过使用PsiExpressionCodeFragment.
setText()不再适用于输入字段。但是,createExpressionCodeFragment()接受该字段的文本作为参数。可以替换空字符串并创建一个新文档来代替setText().
GUI 构建器中的实例JTextField可以在您的 IDE 中使用右键单击替换为自定义替换组件。确保使用“自定义创建”,以便初始化代码正常工作。