MPS comes with UI components that are similar to their Swing analogs but provide nicer, more featured UI that is also more in line with the rest of the platform. If you want to create a professional, consistent look for your MPS-based tool, use the platform components instead of their Swing equivalents.


Instead of JTree use jetbrains.mps.ide.ui.tree.MPSTree when showing MPS nodes in the tree, or com.intellij.ui.treeStructure.Tree otherwise.

Use com.intellij.ui.ColoredListCellRenderer instead of DefaultListCellRenderer to show colored labels.


Use com.intellij.ui.table.JBTable and com.intellij.ui.ColoredTableCellRenderer.

Tree tables

See com.intellij.ui.treeStructure.treetable.TreeTable and com.intellij.ui.CheckboxTreeTable.

Instead of using JPopupMenu directly, use the action system, com.intellij.openapi.actionSystem.ActionManager#createActionPopupMenu().

Form elements

Use these replacements:

Swing MPS
JLabel com.intellij.ui.components.JBLabel
JComboBox com.intellij.openapi.ui.ComboBox
JTextField com.intellij.ui.components.JBTextField
JRadioButton com.intellij.ui.components.JBRadioButton
JCheckBox com.intellij.ui.components.JBCheckBox


Use com.intellij.ui.JBColor instead of java.awt.Color to provide two colors, one for use in light mode and one for the dark mode.

com.intellij.util.ui.UIUtil class contains many helpful static methods to obtain theme-specific colors and other settings, such as getLabelTextForeground() or isUnderDarcula().

Message boxes

Instead of JOptionPane.showMessageDialog() use notification balloons .

Finding examples

These components are used all over MPS and IntelliJ IDEA so it is often enough to find global usages of the classes mentioned above to see them in action. Some of the UI code of MPS and IDEA is inaccessible from within MPS and to look at it you may need to check out MPS sources and open them in IntelliJ IDEA (Community Edition is enough).