2012-08-26 82 views
0

有誰知道如何控制出現在JMenu子菜單上的小小箭頭的顯示?JMenu子菜單小箭頭圖標指示器

我可以改變它嗎? 我可以禁用它嗎? 我可以移動它嗎?

此外,我注意到這個箭頭只有當他們是其他JMenu的子菜單時纔會出現在頂層JMenus上。由於我將JMenuItem和JMenu連接到JMenuBar的根目錄,所以我希望它總是能夠指示它,這種不一致性會讓我很煩惱。無論如何也要做到這一點?

謝謝!

+0

這可能取決於您使用的L&F – Jeffrey

+0

我正在使用MetalLookAndFeel。你能否以特定的外觀和感覺禁用它? – springcorn

+0

*「只有當它們是其他JMenu的子菜單時,此箭頭纔會出現在頂層JMenus上。」* Huh?你能用[code](http://sscce.org/)來表達嗎? –

回答

3

此箭頭不出現在頂層JMenus只有當他們是其他JMenu的子菜單。

在這裏使用金屬的外觀似乎(單調)一致。

Menu & sub-menu arrows using Metal PLAF

import javax.swing.*; 

public class MenuArrows { 

    MenuArrows() { 
     JMenuBar mb = new JMenuBar(); 

     JMenu root1 = new JMenu("Root Menu 1"); 
     JMenu root2 = new JMenu("Root Menu 2"); 

     addSubMenus(root1, 5); 
     addSubMenus(root2, 3); 

     mb.add(root1); 
     mb.add(root2); 

     JOptionPane.showMessageDialog(null, mb); 
    } 

    public void addSubMenus(JMenu parent, int number) { 
     for (int i=1; i<=number; i++) { 
      JMenu menu = new JMenu("Sub Menu " + i); 
      parent.add(menu); 

      addSubMenus(menu, number-1); 
      addMenuItems(menu, number); 
     } 
    } 

    public void addMenuItems(JMenu parent, int number) { 
     for(int i=1; i<=number; i++) { 
      parent.add(new JMenuItem("Item " + i)); 
     } 
    } 

    public static void main(String[] args) { 
     Runnable r = new Runnable() { 
      @Override 
      public void run() { 
       new MenuArrows(); 
      } 
     }; 
     SwingUtilities.invokeLater(r); 
    } 
} 
+1

+1遞歸。 – trashgod

+0

@trashgod保存了一些鍵入或複製/粘貼操作; –

+0

我不知道'add *()'方法應該是'private';它們是從構造函數中調用的,'addSubMenus()'有點危險。傳入'Short.MAX_VALUE'(最終)會打印出該網站的名稱。 :-) – trashgod

4

看看在Menu.arrowIcon UI屬性

No Arrows

(感謝AndrewThompson的測試代碼)。

這樣做會影響您應用修改後創建的所有菜單。

等你以後的init外觀和感覺,再創建任何菜單調用UIManager.getLookAndFeelDefaults().put("Menu.arrowIcon", null);

我只想說,我認爲這是一個可怕的想法,並會極力阻止你這樣做。

+1

+1,儘管你[潛伏着](http://en.wiktionary.org/wiki/bury_the_lead)。 :-) – trashgod

+0

這是有幫助的,因爲沒有辦法將其添加到頂級菜單,那麼我將完全刪除它 – springcorn

+0

坦率地說,雖然我希望通過代碼禁用它 – springcorn