簡體   English   中英

如何更改NewProject按鈕的圖標【Netbeans IDE插件開發】?

[英]How can you change the icon of the NewProject button [Netbeans IDE plugin development]?

我正在編寫一個 Netbeans IDE 插件,它應該能夠替換工具欄中的一些圖標。 根據這個博客條目,我搜索了特定的操作並編寫了合適的類 IconReplacer ,它完美地工作:

import org.openide.filesystems.FileUtil;
import org.openide.windows.OnShowing;
import javax.swing.*;

@OnShowing
public class IconReplacer implements Runnable{

public static final String ICON_DIR = "com/geometror/iconreplacer/icons/";

@Override
public void run() {

    replaceIcon("Actions/Project/org-netbeans-modules-project-ui-NewFile.instance",
            "newFile");

}

private void replaceIcon(String configObj, String iconName){
    Action newFileAction =
            FileUtil.getConfigObject(configObj, Action.class);

    newFileAction.putValue("iconBase", ICON_DIR + iconName + ".png");
    newFileAction.putValue("PreferredIconSize", 24);

}
}

但是,當我嘗試替換特別是 NewProject 操作的圖標時,舊圖標仍然存在並保持不變! 在比較了 projectui 模塊中 NewProject.java 和 NewFile.java(有效)的源代碼后,我發現了一個奇怪的區別。 在 NewProject.java 中,Action 注冊了附加注釋:

@ActionID(id = "org.netbeans.modules.project.ui.NewProject", category =     "Project")
@ActionRegistration(displayName = "#LBL_NewProjectAction_Name", iconBase = "org/netbeans/modules/project/ui/resources/newProject.png")
@ActionReferences({
@ActionReference(path = "Shortcuts", name = "DS-N"),
@ActionReference(path = ProjectsRootNode.ACTIONS_FOLDER, position = 100),
@ActionReference(path = "Menu/File", position = 100),
@ActionReference(path = "Toolbars/File", position = 200)
})

這些注釋不存在於 NewFile.java 中。 那里的屬性“baseIcon”由

putValue("iconBase","org/netbeans/modules/project/ui/resources/newFile.png"); //NOI18N

盡管這兩個變體應該做同樣的事情,但 NewProject 按鈕的圖標不會改變!

您無法更改 NewProject 操作的圖標,因為它的實例是使用惰性工廠創建的。 默認情況下,使用@ActionRegistration創建的所有Actions都是以這種方式創建的,除非指定了注釋參數lazy=false

正如此處的 Javadoc 中所解釋的,惰性實例化是一種僅在調用(調用actionPerformed()時延遲創建操作實例的機制。 目標是限制啟動開銷。 如果 UI 元素(例如按鈕)需要操作的圖標,則使用元數據(例如iconBase注釋參數) iconBase

因此,當您使用action.putValue("iconBase", "iconPath") ,實際上您更改了由注釋( 此處為源代碼)創建的AlwaysEnabledAction實例的屬性,而不是委托操作 NewProject 的屬性。

正如您所發現的,NewFile 操作不是惰性創建的,這就是更改 icon 屬性起作用的原因。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM