idea插件开发

2019-05-06 idea 插件开发——自定义界面

2019-05-06  本文已影响0人  袁成_0e4c

准备:

1.idea 插件开发基础篇:https://www.jianshu.com/p/62d39ad54772

2.idea 插件开发官方文档:http://www.jetbrains.org/intellij/sdk/docs/tutorials/editor_basics/coordinates_system.html

开始:

1.新建dialog


新建dialog 新建dialog 生成的两个文件

2.编写界面

打开xxxDialog.form

右边有很多组件,拖进去就行了,各组件具体的api请自行探索。

页面的变动会自动同步到 xxxDialog.java中,命名由左边蓝色选中的 "field name"属性决定。

做个简单的功能吧——在光标位置插入一个空的method代码块

编辑界面 自动生成的代码

3.给按钮设置点击事件。。。看代码吧

import javax.swing.*;
import java.awt.event.*;

public class TestDialog extends JDialog {
    private JPanel contentPane;
    private JButton buttonOK;
    private JButton buttonCancel;
    private JButton intButton;
    private JButton shortButton;
    private JButton longButton;
    private JButton objectButton;

    public TestDialog() {
        setContentPane(contentPane);
        setModal(true);
        getRootPane().setDefaultButton(buttonOK);

        buttonOK.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                onOK();
            }
        });

        buttonCancel.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                onCancel();
            }
        });

        // call onCancel() when cross is clicked
        setDefaultCloseOperation(DO_NOTHING_ON_CLOSE);
        addWindowListener(new WindowAdapter() {
            public void windowClosing(WindowEvent e) {
                onCancel();
            }
        });

        // call onCancel() on ESCAPE
        contentPane.registerKeyboardAction(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                onCancel();
            }
        }, KeyStroke.getKeyStroke(KeyEvent.VK_ESCAPE, 0), JComponent.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT);

        ActionListener l = new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                dispose();
                if (listener != null) {
                    listener.actionPerformed(e);
                }
            }
        };
        intButton.addActionListener(l);
        shortButton.addActionListener(l);
        longButton.addActionListener(l);
        objectButton.addActionListener(l);
    }

    private ActionListener listener;

    public void setListener(ActionListener listener) {
        this.listener = listener;
    }

    private void onOK() {
        // add your code here
        dispose();
    }

    private void onCancel() {
        // add your code here if necessary
        dispose();
    }
}

import com.intellij.openapi.actionSystem.AnAction;
import com.intellij.openapi.actionSystem.AnActionEvent;
import com.intellij.openapi.actionSystem.CommonDataKeys;
import com.intellij.openapi.actionSystem.PlatformDataKeys;
import com.intellij.openapi.command.WriteCommandAction;
import com.intellij.openapi.editor.CaretModel;
import com.intellij.openapi.editor.Editor;
import com.intellij.openapi.fileEditor.FileEditor;
import com.intellij.openapi.project.Project;

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

public class SampleAction extends AnAction {

    @Override
    public void actionPerformed(AnActionEvent anActionEvent) {
        Project project = anActionEvent.getProject();

        TestDialog dialog = new TestDialog();
        dialog.setListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                String str = "public " + e.getActionCommand() + " methodName() {return null;}";
                WriteCommandAction.runWriteCommandAction(project, () -> {
                    Editor editor = anActionEvent.getRequiredData(CommonDataKeys.EDITOR);
                    CaretModel caretModel = editor.getCaretModel();
                    int offset = caretModel.getOffset();
                    editor.getDocument().insertString(offset, str);
                });
            }
        });
        dialog.setLocationRelativeTo(dialog);//居中
        dialog.pack();
        dialog.setVisible(true);

    }
}

4.运行


打开一个java文件,alt + k 点击Object按钮,在光标位置加入了一段代码
5.打包
打出xxx.jar
jar的位置
6.安装:打开idea的设置-plugin,将刚准备好的jar安装上。
7.其他:快下班了,不写了。
8.分享一个自己用的插件
批量选择文件,copy到指定的目录
下载链接:https://github.com/cryzahell/ideapluginimageplus/raw/master/ideapluginimageplus.jar
github项目链接:https://github.com/cryzahell/ideapluginimageplus
上一篇 下一篇

猜你喜欢

热点阅读