mirror of
https://github.com/JetBrains/intellij-sdk-code-samples.git
synced 2025-07-29 01:37:51 +08:00
* [webhelp] Fixes for TXP00152, TXP00002, test build 27 Jul 22:26 * [webhelp] Fixes for Part #4 TXP00010, EXCEPT decimal numbers in section titles * [webhelp] Fixes for Part #5 TXP00017 * [webhelp] Fixes for Part #4 TXP00010 - removed numbers from page section titles in "Custom Language Support Tutorial" and "Testing a Custom Language Plugin". * [webhelp] Removed numbers from page section titles in rest of project *.md files. * [new webhelp] Build #44 changes * [new webhelp] Maintenance merge from master * [new webhelp] Add placeholder file for webhelp import. * [webhelp] Correct redirects for file name changes * [webhelp] TOC not needed in webhelp * [format] {:toc} not needed for webhelp * add {:disable-links} to ensure demo links are not interpreted as real links. * Put all badges on the same line to simplify composition. * formatter.md: fix upsource link * fix some links * api_changes_list.md: remove note * migrate to webhelp - initial * fix GH edit URL * remove sdkdocs-template setup in VCS config * remove recently_updated.md * restore COC/CONTRIBUTING.md * api_changes_list.md: remove note * useful_links.md: IPE Co-authored-by: JohnHake <john.hake@jetbrains.com> Co-authored-by: Yann Cébron <yann.cebron@jetbrains.com>
48 lines
2.9 KiB
Markdown
48 lines
2.9 KiB
Markdown
[//]: # (title: Editor Components)
|
|
|
|
<!-- Copyright 2000-2020 JetBrains s.r.o. and other contributors. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file. -->
|
|
|
|
## EditorTextField
|
|
|
|
Compared to [Swing `JTextArea`](https://docs.oracle.com/javase/8/docs/api/javax/swing/JTextArea.html), the *IntelliJ Platform's* editor component has a ton of advantages: syntax highlighting support, code completion, code folding and much more.
|
|
Editors are normally displayed in editor tabs, but they can be embedded in dialogs or tool windows, too.
|
|
This is enabled by the [`EditorTextField`](upsource:///platform/platform-impl/src/com/intellij/ui/EditorTextField.java) component.
|
|
|
|
The following attributes can be specified:
|
|
|
|
* The file type according to which the text in the text field is parsed;
|
|
* Whether the text field is read-only or editable;
|
|
* Whether the text field is single-line or multiline.
|
|
|
|
Further customizations are possible by subclassing and overriding `createEditor()`.
|
|
|
|
A common use case for `EditorTextField` is entering the name of a Java class or package.
|
|
This can be accomplished with the following steps:
|
|
|
|
* Use [`JavaCodeFragmentFactory.getInstance().createReferenceCodeFragment()`](upsource:///java/java-psi-api/src/com/intellij/psi/JavaCodeFragmentFactory.java) to create a code fragment representing the class or package name;
|
|
* Call [`PsiDocumentManager.getInstance().getDocument()`](upsource:///platform/core-api/src/com/intellij/psi/PsiDocumentManager.java) to get the document corresponding to the code fragment;
|
|
* Pass the returned document to the [`EditorTextField`](upsource:///platform/platform-impl/src/com/intellij/ui/EditorTextField.java) constructor or its `setDocument()` method.
|
|
|
|
E.g.:
|
|
|
|
```java
|
|
PsiFile psiFile = PsiDocumentManager.getInstance(editor.getProject()).getPsiFile(editor.getDocument());
|
|
PsiElement element = psiFile.findElementAt(editor.getCaretModel().getOffset());
|
|
|
|
PsiExpressionCodeFragment code = JavaCodeFragmentFactory.getInstance(editor.getProject())
|
|
.createExpressionCodeFragment("", element, null, true);
|
|
|
|
Document document = PsiDocumentManager.getInstance(editor.getProject()).getDocument(code);
|
|
|
|
EditorTextField myInput = new EditorTextField(document, editor.getProject(), JavaFileType.INSTANCE);
|
|
```
|
|
|
|
**TIPS**:
|
|
|
|
* When creating more than one field two separate documents are needed.
|
|
This is accomplished by using separate instances of `PsiExpressionCodeFragment`.
|
|
* `setText()` no longer works for the input field.
|
|
However, `createExpressionCodeFragment()` accepts the text for the field as an argument.
|
|
The empty string can be replaced and create a new document in lieu of `setText()`.
|
|
* Instances of `JTextField` in the GUI builder can be replaced with a custom replacement component using the right click in your IDE.
|
|
Make sure to use "Custom Create", so the initialization code works properly. |