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

本文介绍如何使用IDEA的GUI设计器创建自定义对话框,并演示如何将对话框集成到项目中,实现向文件中插入或替换文本的功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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();
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值