2015-04-26 59 views
-2

我不知道這種類型的菜單的名稱,但我想添加一個項目到這種菜單。如何在這種類型的菜單中添加更多按鈕(顯示菜單類型的圖片)?

按照鏈接菜單的一個例子:鏈接:http://postimg.org/image/7izr3zapl/full/

+0

我沒有研究,但我知道這是平臺相關的(即僅適用於Windows)。據我所知,Java被設計成獨立於平臺,所以你所問的可能是不可能的。但是,就像我說的,我沒有研究過這個。 –

+0

這些菜單被稱爲跳轉列表,可以通過WPF .Net應用程序添加,請參閱:[將任務欄上下文菜單添加到win7應用程序](http://stackoverflow.com/questions/3156378/adding-taskbar-context-menu-到WIN7施用)。從Java應用程序執行該操作更加困難,但可能是可能的。 –

+0

IntelliJ IDEA在其跳轉列表中顯示最近項目的列表,因此您可以查看[WinDockDelegate](https://github.com/JetBrains/intellij-community/blob/3f7e93e20b7e79ba389adf593b3b59e46a3e01d1/platform/platform-impl/src/ com/intellij/ui/win/WinDockDelegate.java)類以及它如何在那裏使用。 –

回答

1

的IntelliJ IDEA已執行了用於Windows和OS X,所以你可以使用它作爲一個例子。

關注Windows這裏,你可以看看 RecentTasks類的實現。要添加最近的任務,將調用addTasksNativeForCategory本地方法。此C++方法在以下文件中實現:jumplistbridge.cpp

1

這些是帶圖標的菜單項。他們是而不是按鈕!

Menu with Icons

import java.awt.*; 
import java.awt.image.BufferedImage; 
import javax.swing.*; 
import javax.swing.border.EmptyBorder; 
import java.net.URL; 
import javax.imageio.ImageIO; 

public class MenuWithIcon { 

    private JComponent ui = null; 
    String[] urlStrings = { 
     "http://i.stack.imgur.com/gJmeJ.png", 
     "http://i.stack.imgur.com/gYxHm.png", 
     "http://i.stack.imgur.com/F0JHK.png" 
    }; 
    String[] menuNames = { 
     "Blue Circle", "Green Triangle", "Red Square" 
    }; 

    MenuWithIcon() { 
     initUI(); 
    } 

    public void initUI() { 
     if (ui != null) { 
      return; 
     } 

     ui = new JPanel(new BorderLayout(4, 4)); 
     ui.setBorder(new EmptyBorder(4, 4, 4, 4)); 

     Image img = new BufferedImage(300, 150, BufferedImage.TYPE_INT_ARGB); 
     ui.add(new JLabel(new ImageIcon(img))); 
    } 

    public JMenuBar getMenuBar() throws Exception { 
     JMenuBar mb = new JMenuBar(); 

     JMenu menu = new JMenu("Menu"); 
     mb.add(menu); 

     for (int i=0; i<urlStrings.length; i++) { 
      URL url = new URL(urlStrings[i]); 
      Image img = ImageIO.read(url); 
      JMenuItem mi = new JMenuItem(menuNames[i], new ImageIcon(img)); 
      menu.add(mi); 
     } 

     return mb; 
    } 

    public JComponent getUI() { 
     return ui; 
    } 

    public static void main(String[] args) { 
     Runnable r = new Runnable() { 
      @Override 
      public void run() { 
       try { 
        UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName()); 
       } catch (Exception useDefault) { 
       } 
       MenuWithIcon o = new MenuWithIcon(); 

       JFrame f = new JFrame(o.getClass().getSimpleName()); 
       f.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE); 
       f.setLocationByPlatform(true); 

       f.setContentPane(o.getUI()); 
       f.pack(); 
       f.setMinimumSize(f.getSize()); 

       try { 
        f.setJMenuBar(o.getMenuBar()); 
       } catch (Exception ex) { 
        ex.printStackTrace(); 
       } 

       f.setVisible(true); 
      } 
     }; 
     SwingUtilities.invokeLater(r); 
    } 
} 
相關問題