В IntelliJ IDEA разработайте плагин для чтения рыбы.

Java задняя часть IntelliJ IDEA
В IntelliJ IDEA разработайте плагин для чтения рыбы.

Автор: Брат Сяофу
Блог:bugstack.cn
оригинал:Tickets.WeChat.QQ.com/Yes/R8Q VO SN также…

Осаждайте, делитесь, растите и позвольте себе и другим получить что-то! 😄

1. Описание

方向不对,努力白费!

Всегда есть люди, которые получают спрос на продукт и начинают работать в спешке.В любом случае, мне лень думать о том, что будет в разработке и сколько людей будет им пользоваться после того, как он выйдет в онлайн. если это 3721, то я наберу код и посмотрю.Все равно может запуститься.Или код или ты!

На самом деле, много раз перед написанием кода необходимо провести технические исследования, проектирование архитектуры, наслоение модулей, структуру данных, подробный анализ, обзор схемы и т. д.三七二十一那家伙По сравнению с ним он кажется немного медленным. Но этот, казалось бы, медленный процесс может решить многие распространенные и неприятные проблемы в будущем, такие как итерация требований к продукту, изменения бизнес-процессов, изменения логики кода и устранение неполадок в режиме онлайн. Хотя процесс возведения фундамента выглядит медленным, он похож на закладку фундамента: прежде чем можно будет построить все здание, должен быть прочный фундамент.Тысячи высотных зданий возвышаются над землей, не стройте высоких площадок на плавающем песке

Цель спроса

Если вам нужно разработать плагин с пользовательскими функциями, будь то код обработки, вспомогательная генерация ORM, запись информации журнала и т. д., вам нужно будет выполнить настройку функции плагина для инициализации операции и отображения соответствующие функции в правый столбец всей формы IDEA или в нижнюю боковую панель, чтобы удовлетворить основные потребности плагина.

Тогда это должно быть в форме IDEAFile -> SettingsРазверните собственную форму конфигурации в , и встройте нужное вам ToolWindow в IDEA (левая сторона, правая сторона, нижняя сторона), где при разработке формы необходимо использовать Swing, но в настоящее время разработка такой функции в IDEA требует только перетаскивания и drop Вы можете перетаскивать форму, это довольно легко.

Тогда давайте в качестве примера возьмем сценарий чтения книги в IDEA, чтобы изучить реализацию функции формы конфигурации и формы чтения.

3. Развитие дела

1. Инженерное сооружение

guide-idea-plugin-tool-window
├── .gradle
└── src
    ├── main
    │   └── java
    │   	└── cn.bugstack.guide.idea.plugin 
    │       	└── factory
    │       	│	├── ReadFactory.java 
    │       	│	└── SettingFactory.java
    │       	└── ui
    │       	│	├── ReadUI.java 
    │       	│	├── ReadUI.form
    │       	│	├── SettingUI.java  
    │       	│	└── SettingUI.form
    │       	└── Config    
    ├── resources
    │   └── META-INF
    │       └── plugin.xml 
    ├── build.gradle  
    └── gradle.properties
  • Получение исходного кода:#публика:bugstack虫洞栈Ответить:ideaВы можете загрузить весь исходный код разработки подключаемого модуля IDEA.

Этот проект в основном состоит из двух частей: форма конфигурации на фабрике, форма чтения и два соответствующих набора реализаций пользовательского интерфейса. Наконец, реализация фабричного класса будет настроена в plugin.xml для использования, а также в plugin.xml для управления положением и значком формы.

2. Создайте форму пользовательского интерфейса

2.1 Как создать

New -> Swing UI Designer -> GUI Form

  • Основными способами создания форм на Java являются AWT, Swing и JavaFx.Поскольку IDEA использует разработку Swing, совместимость создания форм Swing здесь будет лучше.
  • Тогда создание формы Swing здесь может быть вашей собственной рукописной структурой формы, или вы можете использовать GUI Form визуального перетаскивания, Если ваша форма не сложная, на самом деле можно использовать метод перетаскивания.

2.2 Форма страницы конфигурации

public class SettingUI {

    private JPanel mainPanel;
    private JPanel settingPanel;
    private JLabel urlLabel;
    private JTextField urlTextField;
    private JButton urlBtn;

    public SettingUI() {
        // 给按钮添加一个选择文件的事件
        urlBtn.addActionListener(e -> {
            JFileChooser fileChooser = new JFileChooser();
            fileChooser.setFileSelectionMode(JFileChooser.FILES_ONLY);
            fileChooser.showOpenDialog(settingPanel);
            File file = fileChooser.getSelectedFile();
            urlTextField.setText(file.getPath());
        });
    }

    public JComponent getComponent() {
        return mainPanel;
    }

    public JTextField getUrlTextField() {
        return urlTextField;
    }
}

  • Форма страницы конфигурации в основном обеспечивает выбор пути к статье.Здесь необходимо использовать метки: JLabel, JTextField, JButton.
  • После использования GUI Form для создания формы появится вот такая визуальная страница, на среднюю панель справа можно перетаскивать различные метки, а слева задавать отображаемое имя и имя свойства.
  • Наконец, код тега кода здесь будет отображаться дляSettingUI.java, а содержимое рендеринга будет скрыто, этот метод также более удобен для управления добавлением некоторого пользовательского содержимого, такого как события, новые формы и т. д.
  • Также вSettingUI.java, вам также нужно добавить в конструктор событие кнопки, чтобы открыть селектор файлов, и установить файл, который нам нужно открыть, наurlTextFieldсередина.

2.3 Чтение формы страницы

public class ReadUI {

    private JPanel mainPanel;
    private JTextPane textContent;

    public JComponent getComponent() {
        return mainPanel;
    }

    public JTextPane getTextContent() {
        return textContent;
    }

}

  • Форма на странице создания и настройки формы такая же, и она также используется для отображения содержимого файла пути путем перетаскивания его на панель.
  • При необходимости вы можете добавить некоторые другие кнопки, такие как перелистывание страниц, полоса прокрутки, отображение количества слов и т. д.

3. Панель инструментов ToolWindow

реализовать собственные阅读窗体Поместите его в правую боковую панель всей IDEA, нам нужно создать реализациюToolWindowFactoryинтерфейс и настройте класс реализации в plugin.xml

public class ReadFactory implements ToolWindowFactory {

    private ReadUI readUI = new ReadUI();

    @Override
    public void createToolWindowContent(@NotNull Project project, @NotNull ToolWindow toolWindow) {
        // 获取内容工厂的实例
        ContentFactory contentFactory = ContentFactory.SERVICE.getInstance();
        // 获取 ToolWindow 显示的内容
        Content content = contentFactory.createContent(readUI.getComponent(), "", false);
        // 设置 ToolWindow 显示的内容
        toolWindow.getContentManager().addContent(content);
        // 全局使用
        Config.readUI = readUI;
    }

}
  • метод интерфейсаToolWindowFactory#createToolWindowContentЭто метод, который должен быть реализован в собственном классе инструментария.createToolWindowContentметод в вашей собственной формеReadUIВы можете заполнить его после создания экземпляра.
  • Разрешение на добавление формы в основном зависит отContentFactory.SERVICE.getInstance()Создайте ContentFactory и, наконец, используйте toolWindow, чтобы добавить форму для отображения пользовательского интерфейса.
  • Здесь мы дополнительно добавляем глобальное свойствоConfig.readUIЭто сделано для того, чтобы вы могли использовать этот пользовательский интерфейс в форме конфигурации для установки содержимого файла позже.

4. Настраиваемое окно конфигурации

public class SettingFactory implements SearchableConfigurable {

    private SettingUI settingUI = new SettingUI();

    @Override
    public @NotNull String getId() {
        return "test.id";
    }

    @Override
    public @Nls(capitalization = Nls.Capitalization.Title) String getDisplayName() {
        return "test-config";
    }

    @Override
    public @Nullable JComponent createComponent() {
        return settingUI.getComponent();
    }

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

    @Override
    public void apply() throws ConfigurationException {
        String url = settingUI.getUrlTextField().getText();
        // 设置文本信息
        try {
            File file = new File(url);
            RandomAccessFile randomAccessFile = new RandomAccessFile(file, "r");
            randomAccessFile.seek(0);

            byte[] bytes = new byte[1024 * 1024];
            int readSize = randomAccessFile.read(bytes);

            byte[] copy = new byte[readSize];
            System.arraycopy(bytes, 0, copy, 0, readSize);

            String str = new String(copy, StandardCharsets.UTF_8);

            // 设置内容
            Config.readUI.getTextContent().setText(str);

        } catch (Exception ignore) {
        }
    }

}
  • Из интерфейса SearchableConfigurable реализовано множество методов, в том числе: getId, getDisplayName,createComponent, изменен,applyОсновными из них, используемыми для реализации логики написания, являютсяcreateComponentиapply
  • Метод createComponent в основном предназначен для предоставления панели пользовательского интерфейса, которую мы создали сами, для JComponent.
  • apply — это событие. Когда мы нажмем OK и завершим настройку, этот метод будет активирован. В этом методе мы получаем URL-адрес файла, используяRandomAccessFileПрочитайте и проанализируйте файл и, наконец, отобразите содержимое файла в форме чтения.Config.readUI.getTextContent().setText(str);

5. Плагин конфигурации.xml

<extensions defaultExtensionNs="com.intellij">
    <!-- Add your extensions here -->
    <!-- 配置 File -> Settings -> Tools -->
    <projectConfigurable groupId="tools" displayName="My Test Config" id="test.id"
                         instance="cn.bugstack.guide.idea.plugin.factory.SettingFactory"/>
                         
    <!-- 窗体 (IDEA 界面右侧) -->
    <toolWindow id="Read-Book" secondary="false" anchor="right" icon="/icons/logo.png"
                factoryClass="cn.bugstack.guide.idea.plugin.factory.ReadFactory"/>
</extensions>
  • Основным содержимым конфигурации в plugin.xml на этот раз являются projectConfigurable и toolWindow. Кроме того, в toolWindow добавляется значок логотипа. После завершения настройки мы можем отобразить собственную добавленную форму на странице IDEA.

4. Тест плагина

  • Запустите плагин через Plugin, и в это время откроется новая форма IDEA, и в этой новой форме вы сможете увидеть добавленные нами функции.

путь к файлу конфигурации

  • Нажмите кнопку «Выбрать», выберите расположение файла и нажмите «ОК».

Просмотр файлов презентации

  • После подтверждения пути к файлу вы можете увидеть содержимое вашего файла в правом столбце.Он расширяется, он подходит для вас, чтобы ловить рыбу! ?

V. Резюме

  • Этапы процесса изучения пользовательского пользовательского интерфейса разработки, заполнения пользовательского интерфейса в форме IDEA, которую необходимо разместить, и добавления функций в форму в основном включают три аспекта: пользовательский интерфейс Swing, класс реализации Factory и конфигурация подключаемого модуля.
  • В конфигурации плагина он в основном включает идентификатор формы, местоположение, значок значка и соответствующий класс реализации.Если они не добавлены, информация формы не может отображаться нормально.
  • Кроме того, на основе этого случая вы можете добавить функции, которые хотите выполнить, например, сделать функцию чтения книг более совершенной, которая может поддерживать различные типы файлов, даже чтение PDF, и книги, которые вы хотите прочитать.

6. Рекомендации серии