プラグイン作って覚えたことを淡々と記録するよ(JBPopup編)
これは,EditorTreeプラグインとか,IDEA本体の"Quick Documentation Lookup"や"Quick Definition Lookup"を参考に作ったよ。
いきなり話はズレるが,どうやって"Quick Documentation Lookup"や"Quick Definition Lookup"の実装を調べたかと言えば,IDEAそのものをYourKitにモニタさせて,先のアクションを実行したときのメソッドトレースから調べたのさ。
ちなみに,"Quick Documentation Lookup"は,
- ShowJavaDocInfoAction
- JavaDocManager
- JavaDocInfoComponent
- JavaDocManager
"Quick Definition Lookup"は,
- ShowImplementationsAction
- ImplementationViewComponent
となってるよ。
で,ポップアップ自体はOpenAPIのJBPopupってのを利用する。これもコード見た方が早い。
private void showPopup(Project project, Editor editor, String searchText) { PopupView popupView = new PopupView(searchText); JBPopup jbPopup = JBPopupFactory.getInstance() .createComponentPopupBuilder(popupView.mainPanel, popupView.mainPanel) // これ↓書いとくとポップアップのサイズ(や場所)を覚えるみたい .setDimensionServiceKey(project, "popup", false) .setRequestFocus(true) .setResizable(true) .setMovable(true) .setTitle("popup-dict") .createPopup(); // showInBestPositionFor()って,なんてステキなんでしょう。:-) jbPopup.showInBestPositionFor(editor); }
PopupViewってのがJBPopupに貼り付けたいコンポーネント。
IDEAのGUIエディタでテキトウに作ったスーバーやっつけコードだけど,これがPopupViewの全コードよん。
public class PopupView { private JTextPane textPane; public JPanel mainPanel; public PopupView(String searchText) { try { // TranslateHelperはGoogle Translateから拝借 TranslateHelper translateHelper = new TranslateHelper(); String translatedText = translateHelper.translate(searchText, "en|ja"); textPane.setText(translatedText); textPane.setBackground(HintUtil.INFORMATION_COLOR); } catch (Exception e) { textPane.setText(e.getMessage()); } } }