Автор: Брат Сяофу
Блог: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. Рекомендации серии
- Как разрабатывать плагины IDEA?
- Как опубликовать пакет Jar в центральном репозитории Maven
- 12 методов vo2dto, BeanUtils.copyProperties — самый стресс-тест!
- жарить! 1024, Блог брата Сяофу был обновлен.Статья является открытым исходным кодом и поддерживает PR.Вау!
- Руководство для личных встреч · Вступительная глава «О чем меня спрашивают интервьюеры?»