Class CodeEditor

All Implemented Interfaces:
Animation, Editable, 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, the editor uses a 100% cross platform BrowserComponent backend by default and can be transparently upgraded to a native code editor by a platform port. The built-in editing surface is fully self contained and offline. When the optional bundled CodeMirror library is present (the Codename One build server adds it automatically when, and only when, an app actually uses CodeEditor) the editor upgrades to CodeMirror for richer language support; otherwise it uses a lightweight built-in highlighter.

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.
    • 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
    • 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
    • setEngineURL

      public void setEngineURL(String url)

      Points the editor at a custom engine page bundled in the app's HTML hierarchy (loaded with BrowserComponent#setURLHierarchy(String)) instead of the self contained built-in engine. The custom page must implement the same window.cn1editor command/query bridge and post the same cn1ed: events, which lets an application back CodeEditor with a richer editor (e.g. CodeMirror or Monaco) when maximum polish is required while keeping the exact same Java API. Must be set before the editor is shown.

      Parameters
      • url: an app-hierarchy URL such as "/my-editor/index.html", or null to use the built-in engine
    • getEngineURL

      public String getEngineURL()
      Returns the custom engine URL set with #setEngineURL(String), or null when the built-in engine is used.
    • 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.