Class CodeEditor

All Implemented Interfaces:
Animation, Editable, EditorHost, StyleListener, Iterable<Component>

public class CodeEditor extends AbstractEditorComponent

An IDE style source code editor with syntax highlighting, a line-number gutter and asynchronous code completion.

CodeEditor is built for editing source code on both touch devices (with the virtual keyboard) and desktops (with a physical keyboard). Code completion is driven by a CodeCompletionProvider, which can resolve proposals locally or from a remote language server.

Like RichTextArea, ports with low-level text input use the pure Codename One text engine (com.codename1.ui.editor) with a built-in incremental syntax highlighter. Ports without that input contract use an editable BrowserComponent fallback, and a port can transparently supply a native code editor instead.

Example
CodeEditor editor = new CodeEditor();
editor.setLanguage("java");
editor.setText("public class Main {\n\n}");
editor.setCompletionProvider((ed, code, cursor, results) -> {
    List<CodeCompletion> out = new ArrayList<>();
    out.add(new CodeCompletion("System.out.println(", "System.out.println()").setType("method"));
    results.onSucess(out);
});
form.add(BorderLayout.CENTER, editor);
  • Constructor Details

    • CodeEditor

      public CodeEditor()
      Creates an empty code editor.
    • CodeEditor

      public CodeEditor(String language, String text)

      Creates a code editor initialized with the supplied source and language.

      Parameters
      • language: the language id used for syntax highlighting (e.g. "java", "javascript", "kotlin", "css", "xml", "json", "python")

      • text: the initial source code

  • Method Details

    • setText

      public void setText(String text)

      Replaces the entire editor content.

      Parameters
      • text: the source code
    • getText

      public void getText(SuccessCallback<String> callback)

      Retrieves the current source code. The callback is invoked on the EDT.

      Parameters
      • callback: receives the source code
    • setLanguage

      public void setLanguage(String language)

      Sets the language used for syntax highlighting.

      Parameters
      • language: the language id (e.g. "java", "javascript", "kotlin", "css", "xml", "json", "python")
    • getLanguage

      public String getLanguage()
      Returns the current highlighting language id.
    • registerSyntaxHighlighter

      public static void registerSyntaxHighlighter(String language, SyntaxHighlighter highlighter)
      Registers a syntax highlighter for a language id. Registration is global and affects existing editors the next time their language is set. Passing null removes a previous registration.
    • getRegisteredSyntaxHighlighter

      public static SyntaxHighlighter getRegisteredSyntaxHighlighter(String language)
      Returns the third-party syntax highlighter registered for a language, or null.
    • setTheme

      public void setTheme(String theme)

      Sets the color theme. Currently "light" and "dark" are supported.

      Parameters
      • theme: the theme id
    • getTheme

      public String getTheme()
      Returns the current theme id.
    • setShowLineNumbers

      public void setShowLineNumbers(boolean show)

      Shows or hides the line-number gutter.

      Parameters
      • show: true to show line numbers
    • isShowLineNumbers

      public boolean isShowLineNumbers()
      Returns true if the line-number gutter is shown.
    • setTabSize

      public void setTabSize(int tabSize)

      Sets the number of spaces inserted for a tab / used for indentation.

      Parameters
      • tabSize: the indentation width in spaces
    • getTabSize

      public int getTabSize()
      Returns the indentation width in spaces.
    • setReadOnly

      public void setReadOnly(boolean readOnly)

      Makes the editor read-only or editable. This is a convenience around AbstractEditorComponent#setEditable(boolean).

      Parameters
      • readOnly: true to prevent editing
    • isReadOnly

      public boolean isReadOnly()
      Returns true when the editor is read-only.
    • insertAtCursor

      public void insertAtCursor(String text)

      Inserts text at the current caret position, replacing any active selection.

      Parameters
      • text: the text to insert
    • setProtectedRegionMarkers

      public void setProtectedRegionMarkers(String startMarker, String endMarker)
      Protects all text between matching marker lines from editing. This is intended for generated source previews that contain explicit user-editable regions. Passing null clears protection.
    • addProtectedEditListener

      public void addProtectedEditListener(ActionListener listener)

      Registers a listener notified when an edit is refused because it falls inside a protected region. Without it a protected region is silent, and one covering most of the document is indistinguishable from an editor that ignores the keyboard. The event source is this editor and the event is fired on the EDT.

      Parameters
      • listener: invoked once per refused edit
    • removeProtectedEditListener

      public void removeProtectedEditListener(ActionListener listener)

      Removes a listener added by #addProtectedEditListener(ActionListener).

      Parameters
      • listener: the listener to remove
    • setCursorPosition

      public void setCursorPosition(int offset)
      Moves the caret to a character offset, clamped by the editor backend to the document bounds.
    • getCursorPosition

      public void getCursorPosition(SuccessCallback<Integer> callback)

      Retrieves the current caret character offset. The callback is invoked on the EDT.

      Parameters
      • callback: receives the caret offset as an Integer
    • setDiagnostics

      public void setDiagnostics(List<CodeDiagnostic> diagnostics)

      Sets the diagnostics (errors / warnings / hints) displayed in the editor as squiggly underlines, gutter markers and tooltips. Pass an empty list (or null) to clear all diagnostics.

      Parameters
      • diagnostics: the diagnostics to display
    • setCompletionProvider

      public void setCompletionProvider(CodeCompletionProvider provider)

      Sets the provider that supplies code completion proposals. Passing null disables completion.

      Parameters
      • provider: the completion provider, or null to disable completion
    • getCompletionProvider

      public CodeCompletionProvider getCompletionProvider()
      Returns the current completion provider, or null if none is set.