Netbeans模块开发 - 如何修改打开的文件

时间:2017-08-11 11:47:32

标签: java netbeans netbeans-plugins

我正在编写自己的Netbeans插件来编辑打开的文件。我已设法使用

获取有关当前活动文件的一些信息
TopComponent activeTC = TopComponent.getRegistry().getActivated();
FileObject fo = activeTC.getLookup().lookup(FileObject.class);
io.getOut().println(fo.getNameExt());
io.getOut().println(fo.canWrite());
io.getOut().println(fo.asText());

但我不知道如何修改此文件。有人可以帮我弄这个吗? 第二个问题,如何获得文本选择范围?我只想在选定的文本上运行我的命令。

2 个答案:

答案 0 :(得分:1)

要修改文件,您可以使用NetBeans org.openide.filesystems.FileUtil.toFile(),然后使用常规Java内容来读取和写入文件,并获取当前编辑器窗口的选定文本,您将不得不这样做类似的东西:

Node[] arr = activeTC.getActivatedNodes();
for (int j = 0; j < arr.length; j++) {
    EditorCookie ec = (EditorCookie) arr[j].getCookie(EditorCookie.class);
    if (ec != null) {
        JEditorPane[] panes = ec.getOpenedPanes();
        if (panes != null) {
            // USE panes
        }
    }
}

有关更多代码示例,请参阅here

答案 1 :(得分:0)

经过几个小时的研究后我发现:

我在Question中发布的代码可用于获取有关活动文件的基本信息。

要获得插入位置或获得选择范围,您可以这样做:

JTextComponent editor = EditorRegistry.lastFocusedComponent();
io.getOut().println("Caret pos: "+ editor.getCaretPosition());
io.getOut().println("Selection start: "+ editor.getSelectionStart());
io.getOut().println("Selection end: "+ editor.getSelectionEnd());

要修改活动文件的内容(通过Ctrl + z修改可以撤消的方式),您可以使用以下代码:

final StyledDocument doc = context.openDocument();
NbDocument.runAtomicAsUser(doc, new Runnable() {
    public void run() {
      try {
        doc.insertString(ofset, "New text.", SimpleAttributeSet.EMPTY);
      } catch (Exception e) {
      }
    }
  });