Java 如何在这种类型的菜单中添加更多按钮(有一张显示菜单类型的图片)?

Java 如何在这种类型的菜单中添加更多按钮(有一张显示菜单类型的图片)?,java,swing,jframe,Java,Swing,Jframe,我不知道这类菜单的名称,但我想在这类菜单中添加一项 下面的链接是菜单的一个示例:link:IntelliJ IDEA已经为Windows和OS X实现了这一功能,因此您可以将其作为示例 关注这里的窗口,你可以看看 类来实现。要添加最近的任务,将调用addTasksNativeForCategory本机方法。这个C++方法是在以下文件中实现的:这是带有图标的菜单项。它们不是纽扣 import java.awt.*; import java.awt.image.BufferedImage; impo

我不知道这类菜单的名称,但我想在这类菜单中添加一项


下面的链接是菜单的一个示例:link:

IntelliJ IDEA已经为Windows和OS X实现了这一功能,因此您可以将其作为示例

关注这里的窗口,你可以看看
类来实现。要添加最近的任务,将调用
addTasksNativeForCategory
本机方法。这个C++方法是在以下文件中实现的:

这是带有图标的菜单项。它们不是纽扣

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);
    }
}

import java.awt.*;
导入java.awt.image.buffereImage;
导入javax.swing.*;
导入javax.swing.border.EmptyBorder;
导入java.net.URL;
导入javax.imageio.imageio;
公共类MenuWithIcon{
私有JComponent ui=null;
字符串[]URL字符串={
"http://i.stack.imgur.com/gJmeJ.png",
"http://i.stack.imgur.com/gYxHm.png",
"http://i.stack.imgur.com/F0JHK.png"
};
字符串[]菜单项={
“蓝色圆圈”、“绿色三角形”、“红色正方形”
};
MenuWithIcon(){
initUI();
}
public void initUI(){
如果(ui!=null){
返回;
}
ui=新的JPanel(新的BorderLayout(4,4));
ui.setboorder(新的空订单(4,4,4,4));
Image img=新的BufferedImage(300150,BufferedImage.TYPE\u INT\u ARGB);
添加(新JLabel(新图像图标(img));
}
公共JMenuBar getMenuBar()引发异常{
JMenuBar mb=新的JMenuBar();
JMenu菜单=新JMenu(“菜单”);
添加(菜单);

对于(int i=0;我还没有研究过它,但我知道它依赖于平台(即仅在Windows上).据我所知,Java是设计成平台独立的,所以你所要求的可能是不可能做到的。但是,正如我所说,我还没有对此进行研究。这些菜单称为跳转列表,可以由WPF.Net应用程序添加,请参阅:。从Java应用程序中执行此操作比较困难,但可能是可能的。IntelliJ IDEA显示了一个l在它的跳转列表中列出了最近的项目,所以你可以看看这个类以及它是如何在那里使用的。顺便说一句-这些是带有图标的菜单项。它们不是按钮!