void (Configurable configurable, boolean enableError) { myApplyAction.setEnabled(false); myResetAction.putValue(Action.SHORT_DESCRIPTION, UIBundle.message("configurable.reset.action.description")); myResetAction.setEnabled(false); myErrorLabel.setOpaque(true); myErrorLabel.setEnabled(enableError); myErrorLabel.setVisible(false); myErrorLabel.setVerticalTextPosition(SwingConstants.TOP); myErrorLabel.setBorder(JBUI.Borders.empty(10, 15, 15, 15)); myErrorLabel.setBackground(LightColors.RED); add(BorderLayout.SOUTH, RelativeFont.HUGE.install(myErrorLabel)); add(BorderLayout.CENTER, myCardPanel); Disposer.register(this, myCardPanel); MessageBusConnection messageBus = ApplicationManager.getApplication().getMessageBus().connect(this); messageBus.subscribe(AnActionListener.TOPIC, this); messageBus.subscribe(ExternalUpdateRequest.TOPIC, conf -> updateCurrent(conf, false)); getDefaultToolkit().addAWTEventListener(this, AWTEvent.MOUSE_EVENT_MASK | AWTEvent.MOUSE_MOTION_EVENT_MASK | AWTEvent.KEY_EVENT_MASK); if (configurable != null) { myConfigurable = configurable; myCardPanel.select(configurable, true).doWhenDone(() -> postUpdateCurrent(configurable)); } updateCurrent(configurable, false); }