Popups
The IntelliJ Platform user interface makes extensive use of popups - semi-modal windows that have no chrome (explicit closing buttons) and disappear automatically on focus loss. Making use of these controls in a plugin ensures a consistent user experience between the plugin and the rest of the IDE.
Popups can optionally display a title, are optionally movable and resizable (and support remembering their size), and can be nested (show another popup when an item is selected).
JBPopupFactory creates popups that display different kinds of components, depending on specific needs. The most commonly used methods are:
Method | Description |
|---|---|
| Generic, allows showing any Swing component. See Example: |
| For choosing one or more items from a plain See Example: |
| For choosing between two options, and performing different actions depending on which option is selected. Example: |
| Show actions from an Action Group and executes the action selected by the user. Example: |
Action Groups
Action group popups support different ways of choosing an action from the keyboard, in addition to the normal arrow keys. Pass one of the constants in the JBPopupFactory.ActionSelectionAid enumeration to choose whether an action can be selected by
pressing a key corresponding to its sequential number
typing part of its text (speed search)
pressing a mnemonic character
For popups with a fixed set of items, the recommended selection method is sequential numbering. For popups with a variable and potentially large number of items, speed search typically works best.
List Popups
To create a list-like popup which is more flexible than a simple JList and doesn't represent the possible choices as actions in an action group, use JBPopupFactory.createListPopup() with a ListPopupStep implementation (usually, BaseListPopupStep is used as a base). The key methods to override are:
getTextFor()- returning the text to display for an itemonChosen()- called when an item is selected
Return a new popup step from the onChosen() method to implement hierarchical (nested) popups.
Showing Popup
Once the popup is created, display it by calling one of the show() methods. Let the IntelliJ Platform automatically choose the position based on the context, by calling showInBestPositionFor(), or specify the position explicitly through methods like showUnderneathOf() and showInCenterOf().
To perform some action when the popup is closed, use one of the following approaches:
attach a listener to it using the
addListener()methodoverride a method of the popup contents such as
PopupStep.onChosen()attach an event handler to a custom component within the popup