void (@NotNull PositionTracker<Balloon> tracker, @NotNull Balloon.Position position) { if (myDisposable != null && Disposer.isDisposed(myDisposable)) { return; } final GotItPanel panel = new GotItPanel(); panel.myTitle.setText(myTitle); panel.myMessage.setText(myMessage); if (myHyperlinkListener != null) { panel.myMessage.addHyperlinkListener(myHyperlinkListener); } panel.myButton.setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR)); final BalloonBuilder builder = JBPopupFactory.getInstance().createBalloonBuilder(panel.myRoot); if (myDisposable != null) { builder.setDisposable(myDisposable); } final Balloon balloon = builder .setFillColor(UIUtil.getListBackground()) .setHideOnClickOutside(false) .setHideOnAction(false) .setHideOnFrameResize(false) .setHideOnKeyOutside(false) .setShowCallout(myShowCallout) .setBlockClicksThroughBalloon(true) .createBalloon(); panel.myButton.addMouseListener(new MouseAdapter() { @Override public void mouseClicked(MouseEvent e) { balloon.hide(); if (myCallback != null) { myCallback.run(); } } }); balloon.show(tracker, position); }