美文网首页
[IDEA插件从零开始系列]-2.创建带GUI的对话框并修改文件

[IDEA插件从零开始系列]-2.创建带GUI的对话框并修改文件

作者: 天幻星辰 | 来源:发表于2021-12-23 10:11 被阅读0次

    [TOC]

    1. 通过IDEA GUI设计器创建窗体

    • 新建 GUI窗体
    image-20211222091140517
    • 填写窗体基本信息

      image-20211222091416137
    • 向UI中添加组件

      • 添加一个 文本组件和输入框组件
      • 并设置Jpanel 和 JTextField 组件的 FieldName 信息,这样就可以在TestDialog对象中引用到该组件了
      • 点击组件的显示专家属性 设置Jpanel的最小宽高
      image-20211222095924047
    • 在TestDialog 添加相关功能

      public class TestDialog {
          private JPanel rootPanel;
          private JTextField searchText;
      
          public JPanel getRootPanel() {
              return rootPanel;
          }
          // 获取输入框内容
          public String getInputText(){
              return searchText.getText();
          }
      }
      

    2. 显示自己设计的GUI对话框

    通过DialogBuilder构建一下对话框并调用show 显示

    public class MyAction extends AnAction {
    
        @Override
        public void actionPerformed(AnActionEvent e) {
    
            // 获取当前项目对象
            final Project project = e.getProject();
    
            // 创建GUI对象
            TestDialog testDialog = new TestDialog();
            // 构建对话框
            DialogBuilder dialogBuilder = new DialogBuilder(project);
            // 设置对话框显示内容
            dialogBuilder.setCenterPanel(testDialog.getRootPanel());
            dialogBuilder.setTitle("提示框标题"); 
            // 显示对话框
            dialogBuilder.show();
    
        }
    
    }
    

    效果如下

    image-20211222100747480

    3.修改当前文件内容

    • 向当前光标处插入 输入的内容
    public class MyAction extends AnAction {
    
        @Override
        public void actionPerformed(AnActionEvent e) {
            // 获取当前编辑器
            final Editor editor = e.getRequiredData(CommonDataKeys.EDITOR);
            // 获取当前项目对象
            final Project project = e.getProject();
            // 获取当前光标信息
            Caret primaryCaret = editor.getCaretModel().getPrimaryCaret();
            // 创建GUI对象
            TestDialog testDialog = new TestDialog();
            // 构建对话框
            DialogBuilder dialogBuilder = new DialogBuilder(project);
            // 设置对话框显示内容
            dialogBuilder.setCenterPanel(testDialog.getRootPanel());
            dialogBuilder.setTitle("提示框标题");
            dialogBuilder.setOkOperation(()->{
                // 获取对话框中输入数据
                String inputText = testDialog.getInputText();
                // 在更新数据线程中执行 插入字符串操作
                WriteCommandAction.runWriteCommandAction(project, () ->
                        // 获取编辑器关联的文档文件 并插入字符串
                        editor.getDocument().insertString(primaryCaret.getOffset(), inputText)
                );
                // 关闭对话框
                dialogBuilder.getDialogWrapper().close(0);
            });
            // 显示对话框
            dialogBuilder.show();
    
        }
    
    }
    
    • 替换选中的内容
        // 获取当前编辑器
              final Editor editor = e.getRequiredData(CommonDataKeys.EDITOR);
              // 获取当前项目对象
              final Project project = e.getProject();
              // 获取当前光标信息
              Caret primaryCaret = editor.getCaretModel().getPrimaryCaret();
              // 创建GUI对象
              TestDialog testDialog = new TestDialog();
              // 构建对话框
              DialogBuilder dialogBuilder = new DialogBuilder(project);
              // 设置对话框显示内容
              dialogBuilder.setCenterPanel(testDialog.getRootPanel());
              dialogBuilder.setTitle("提示框标题");
              dialogBuilder.setOkOperation(()->{
                  // 获取对话框中输入数据
                  String inputText = testDialog.getInputText();
                  // 在更新数据线程中执行 插入字符串操作
                  WriteCommandAction.runWriteCommandAction(project, () ->
                          // 获取编辑器关联的文档文件 并替换选中的字符
                          editor.getDocument().replaceString(primaryCaret.getSelectionStart(),primaryCaret.getSelectionEnd(), inputText)
                  );
                  // 关闭对话框
                  dialogBuilder.getDialogWrapper().close(0);
              });
              // 显示对话框
              dialogBuilder.show();
    

    相关文章

      网友评论

          本文标题:[IDEA插件从零开始系列]-2.创建带GUI的对话框并修改文件

          本文链接:https://www.haomeiwen.com/subject/rmlhqrtx.html