Создание нового модуля NetBeans «сохранить как»

#netbeans #netbeans-12 #openide

#netbeans #netbeans-12 #openide

Вопрос:

Моя цель проста — сохранить текущий HTML-файл в редакторе NetBeans с одной дополнительной строкой вверху и внизу файла и с расширением «.h».

Это моя первая попытка создания модуля NetBeans, но после некоторых руководств и исследований я дошел до добавления записи во всплывающее меню при щелчке правой кнопкой мыши по HTML-файлу в редакторе. В настоящее время он просто показывает сообщение «Привет, мир»:

введите описание изображения здесь

Код для этого находится здесь:

 package ksmiller99.savehtmlasarduinoresource;

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JOptionPane;
import org.openide.awt.ActionID;
import org.openide.awt.ActionReference;
import org.openide.awt.ActionRegistration;
import org.openide.util.NbBundle.Messages;

@ActionID(
        category = "Edit",
        id = "ksmiller99.savehtmlasarduinoresource.SaveHtmlAsArduinoResource"
)
@ActionRegistration(
        displayName = "#CTL_SaveHtmlAsArduinoResource"
)
@ActionReference(path = "Editors/text/html/Popup")

@Messages("CTL_SaveHtmlAsArduinoResource=Save as Arduino Resource")
public final class SaveHtmlAsArduinoResource implements ActionListener {

    @Override
    public void actionPerformed(ActionEvent ev) {
        //todo add a line to top and bottom of current file and save with .h extension
        JOptionPane.showMessageDialog(null, "Hello Save As World");
    }

}
 

Как я могу получить доступ к содержимому текущего редактора? Будет ли другой подход иметь больше смысла?

Я использую NetBeans 12.0, JDK 13, Windows 10.

Ответ №1:

Используйте мастер создания действия, чтобы создать исходный код для Conditionally Enabled действия, включенного, когда User Selects One Node .

На 2-й панели мастера выберите File Type Context Menu и выберите text/html в качестве типа содержимого. Если вы хотите, чтобы ваше действие отображалось только в контекстном меню, вы можете отключить Global Menu Item .

В итоге вы должны получить такой код:

 @ActionID(
        category = "File",
        id = "org.test.TestHtmlAction"
)
@ActionRegistration(
        displayName = "#CTL_TestHtmlAction"
)
@ActionReference(path = "Loaders/text/html/Actions", position = 0)
@Messages("CTL_TestHtmlAction=TestHtmlAction")
public final class TestHtmlAction implements ActionListener
{

    private final DataObject context;
    private static final Logger LOGGER = Logger.getLogger(TestHtmlAction.class.getName());

    public TestHtmlAction(DataObject context)
    {
        this.context = context;
    }

    @Override
    public void actionPerformed(ActionEvent ev)
    {
        FileObject file = context.getPrimaryFile();
        LOGGER.info("context="   context.getName()   " file.getPath()="   file.getPath());
    }
}
 

Мастер создает контекстно-зависимое действие, которое включается только тогда, когда пользователь выбирает один узел файла HTML. DataObject Параметр предоставляет вам контекст выбранного узла, чтобы вы могли получить путь к файлу и т.д.

Комментарии:

1. Зависимости и импорт для DataObject, Logger, FileObject не поступали автоматически, но как только я понял это, это сработало. Похоже, что NB12.0 реализован не полностью…