如何在 Intellij Idea 插件中添加一个简单的选项卡

How to add a simple tab in Intellij Idea plugin

我正在为 Intellij Idea 创建一个简单的 class 图表插件。我现在正在努力在 IDE 中创建一个简单的选项卡。我将使用准备好的 JPanel 填充此选项卡,仅此而已。 我已经在 NetBeans 中做了同样的事情,我想找到与 NetBeans 中的 TopComponent 提供的行为相似的东西,但任何工作都会很酷。

答案如下:

  1. 创建 com.intellij.openapi.fileEditor.FileEditor 的实现。这是您的实际选项卡

  2. 创建 com.intellij.openapi.fileEditor.FileEditorProvider 的实现 accept() 定义您的编辑器打开的文件类型 create() 应该 returns 编辑器的正确实例

  3. plugin.xml

    中注册您的 FileEditoProvider

编辑:

public class YourEditor implements FileEditor {

    private VirtualFile file;
    
    public YourEditor(VirtualFile file) {
        this.file = file;
    }

    @Override
    public @NotNull JComponent getComponent() {
        JPanel tabContent = new JPanel();
        tabContent.add(new JButton("foo"));
        return tabContent;
    }

    @Override
    public @Nullable JComponent getPreferredFocusedComponent() {
        return null;
    }

    @Override
    public @Nls(capitalization = Nls.Capitalization.Title)
    @NotNull String getName() {
        return "name";
    }

    @Override
    public void setState(@NotNull FileEditorState fileEditorState) {
    }

    @Override
    public boolean isModified() {
        return false;
    }

    @Override
    public boolean isValid() {
        return true;
    }

    @Override
    public void addPropertyChangeListener(@NotNull PropertyChangeListener propertyChangeListener) {
    }

    @Override
    public void removePropertyChangeListener(@NotNull PropertyChangeListener propertyChangeListener) {
    }

    @Override
    public @Nullable FileEditorLocation getCurrentLocation() {
        return null;
    }

    @Override
    public void dispose() {
        Disposer.dispose(this);
    }

    @Override
    public <T> @Nullable T getUserData(@NotNull Key<T> key) {
        return null;
    }

    @Override
    public <T> void putUserData(@NotNull Key<T> key, @Nullable T t) {

    }

    @Override
    public @Nullable VirtualFile getFile() {
        return this.file;
    }
}

提供商:

public class YourEditorProvider implements FileEditorProvider, DumbAware {

    private static String EDITOR_TYPE_ID = "DiagramView";

    @Override
    public boolean accept(@NotNull Project project, @NotNull VirtualFile virtualFile) {
        return true; //will accept all kind of files, must be specified
    }

    @Override
    public @NotNull
    FileEditor createEditor(@NotNull Project project, @NotNull VirtualFile virtualFile) {
        return new YourEditor(virtualFile);
    }

    @Override
    public @NotNull
    @NonNls
    String getEditorTypeId() {
        return EDITOR_TYPE_ID;
    }

    @Override
    public @NotNull
    FileEditorPolicy getPolicy() {
        return FileEditorPolicy.HIDE_DEFAULT_EDITOR;
    }
}

最后将 FileEditorProvider 扩展名放入 pluxin.xml:

<extensions defaultExtensionNs="com.intellij">
    <fileEditorProvider implementation="classDiagramPainter.DiagramViewProvider"/>
</extensions>