2014-07-11 14 views
1
if (calEvt.getSiSrvOrdNbr() != null) { 
     final JMenuItem menuItem = new JMenuItem(
       new SisCrossAppJumpAction(system, SisJumpActionTarget.SERVICE_ORDER) { 
        private static final long serialVersionUID = 1L; 

        @Override 
        protected Multimap<String, String> getExtraData() { 
         Integer siServiceOrderNumber =  sisServiceOrder.getSiSrvOrdNbr();//calEvt.getSiSrvOrdNbr(); 
         Long saCustomerIdNumber = sisServiceOrder.getSaCustIdNbr(); 
         Multimap<String, String> extraData = ArrayListMultimap.create(); 

         if (!StringUtil.isNullOrEmpty(saCustomerIdNumber.toString()) || !StringUtil.isNullOrEmpty(
           siServiceOrderNumber.toString())) { 
          addTarget(extraData); 
          extraData.put("saCustIdNbr", saCustomerIdNumber.toString()); 
          extraData.put("siSrvOrdNbr", siServiceOrderNumber.toString()); 
         } 
         return extraData; //todo test service order populate info 
        } 
       } 
     ); 
     linkMenu.add(menuItem); 
    } 

上面的代碼片段用於在單擊JMenuItem時跳轉到另一個應用程序。通過這種方法,名稱是空的,JMenu中顯示一個空白字段。我正在尋找一種方法來設置此處的動作名稱。通常,我會使用類似於Java-需要幫助設置JMenuItem的名稱

JMenuItem menuItem = new JMenuItem(new AbstractAction("name of JMenuItem here") { 

但在這種情況下,我不認爲這是可能的嗎?任何幫助表示讚賞 (SISCrossAppJumpAction擴展AbstractAction

回答

1

檢查的SisCrossAppJumpAction構造它需要調用super("name")設置名稱

或者你可以使用putValue(NAME, "name")匿名代碼塊內:。

... new SisCrossAppJumpAction(...) { 
    { putValue(NAME, "name"); } 
} 
+0

這個工作。非常感謝你 – GregH

1
private final Action exitAction = new AbstractAction() { 

    { 
     putValue(NAME, "Exit"); 
     putValue(SHORT_DESCRIPTION, "Exit the application."); 
    } 

您可以使用初始化塊{ ... }

此結構是雜項有用的東西,也爲static { ... }

static final Map<String, String> map = new HashMap<>(); 
static { 
    map.put("word", "vorto"); 
    ... 
}