2、显示界面
首先,我们修改样式对应的Java类,将rootPanel暴露出来,并监听按钮进行测试
image-20220701105657964
至于如何显示界面,只要我们将rootPanel交给Idea的组件即可
我们可以依据官方文档,创建一个对话框,然后将该window交个这个对话框
如何创建对话框:https://plugins.jetbrains.com/docs/intellij/dialog-wrapper.html
同样,我们先创建一个Action
image-20220701162749182
EditorPopupMenu指右键菜单
创建对话框
public class GenerateDialog extends DialogWrapper { public GenerateDialog() { super(true); setTitle("Where语句生成"); init(); } @Override protected JComponent createCenterPanel() { return new WhereGenerateWindow().getRootPanel(); } }
将对话框加入Action中
public class GenerateWhereAction extends AnAction { @Override public void actionPerformed(AnActionEvent e) { this.show(e); } private void show(AnActionEvent e){ new GenerateDialog().show(); } }
或者直接使用DialogBuilder
public class GenerateWhereAction extends AnAction { @Override public void actionPerformed(AnActionEvent e) { this.show(e); } private void show(AnActionEvent e){ WhereGenerateWindow window = new WhereGenerateWindow(); DialogBuilder dialogBuilder = new DialogBuilder(e.getProject()); dialogBuilder.setCenterPanel(window.getRootPanel()); dialogBuilder.setTitle("Where语句生成"); dialogBuilder.show(); } }
调试插件
image-20220701162805464
image-20220701162854943
这样的界面有点丑,我们需要调整大小。
在gui界面中,选中打开专家模式,然后调整界面大小,同时设置margin,让输入框往里缩一点
image-20220701163024027
同样的,将JScrollPanel也设置一下,再进行调试
image-20220701163156482
这下就好看多了。
3、怎么获取到当前文件的内容?
public class GenerateWhereAction extends AnAction { @Override public void actionPerformed(AnActionEvent e) { // 获取编辑器 Editor editor = e.getRequiredData(CommonDataKeys.EDITOR); // 当前打开的文件 VirtualFile virtualFile = e.getRequiredData(CommonDataKeys.PSI_FILE).getViewProvider().getVirtualFile(); // 获取选择的数据模型 SelectionModel selectionModel = editor.getSelectionModel(); // 获取当前选择的文本 String selectedText = selectionModel.getSelectedText(); if(StringUtils.isBlank(selectedText)){ // 获取当前打开的文件 Document document = editor.getDocument(); show(e, document.getText()); } else { show(e, selectedText); } } private void show(AnActionEvent e, String text){ WhereGenerateWindow window = new WhereGenerateWindow(text); DialogBuilder dialogBuilder = new DialogBuilder(e.getProject()); dialogBuilder.setCenterPanel(window.getRootPanel()); dialogBuilder.setTitle("Where语句生成"); dialogBuilder.show(); } }
public class WhereGenerateWindow { private JPanel rootPanel; private JTextField prefix; private JButton generate; private JTextArea whereStatement; public WhereGenerateWindow(String text){ this.init(text); } private void init(String text){ whereStatement.setText(text); generate.addActionListener(e -> { whereStatement.setText(prefix.getText() + "." + whereStatement.getText()); }); } public JPanel getRootPanel() { return rootPanel; } }
调试
image-20220701163436550
接下来的如何解析文件,生成where语句就纯属于Java知识了,我想就不用我赘述了。
如何引入依赖
项目是由gradle构建的,所以引入依赖的方式和平常开发没什么两样
dependencies{ implementation("cn.hutool:hutool-all:5.6.2") }
官方样例
官方文档是个不错的学习方式,同样的,官方也具有许多的demo可供我们学习
地址:https://github.com/JetBrains/intellij-sdk-code-samples