private void createPopup(Project project) { final JPanel panel = new JPanel(new BorderLayout()); final EditorTextFieldProvider service = ServiceManager.getService(project, EditorTextFieldProvider.class); myEditorField = service.getEditorField( FileTypes.PLAIN_TEXT.getLanguage(), project, Collections.singletonList(EditorCustomization.Feature.SOFT_WRAP), Collections.singletonList(EditorCustomization.Feature.SPELL_CHECK)); myEditorField.setBorder( new CompoundBorder(BorderFactory.createEmptyBorder(2, 2, 2, 2), myEditorField.getBorder())); myEditorField.setText("s"); myEditorField.setText(myCurrentText); myEditorField.setOneLineMode(false); panel.add(myEditorField, BorderLayout.CENTER); myTextFieldCompletionProvider = new TextFieldCompletionProviderDumbAware(true) { @NotNull @Override protected String getPrefix(@NotNull String currentTextPrefix) { final int text = currentTextPrefix.lastIndexOf(','); return text == -1 ? currentTextPrefix : currentTextPrefix.substring(text + 1).trim(); } @Override protected void addCompletionVariants( @NotNull String text, int offset, @NotNull String prefix, @NotNull CompletionResultSet result) { final List<String> list = myUsers.get(); if (list != null) { for (String completionVariant : list) { final LookupElementBuilder element = LookupElementBuilder.create(completionVariant); result.addElement(element.withLookupString(completionVariant.toLowerCase())); } } } }; myComponentPopupBuilder = JBPopupFactory.getInstance() .createComponentPopupBuilder(panel, myEditorField) .setCancelOnClickOutside(true) .setAdText( KeymapUtil.getShortcutsText(CommonShortcuts.CTRL_ENTER.getShortcuts()) + " to finish") .setTitle("Specify user names, comma separated") .setMovable(true) .setRequestFocus(true) .setResizable(true); mySelectOkAction = new AnAction() { @Override public void actionPerformed(AnActionEvent e) { myPopup.closeOk(e.getInputEvent()); final String newText = myEditorField.getText(); if (Comparing.equal(newText.trim(), myCurrentText.trim())) return; myCurrentText = newText; setText(myCurrentText.trim()); myPanel.setToolTipText(USER + " " + myCurrentText); myUserFilterI.filter(myCurrentText); } }; }