简体   繁体   English

java中jar文件中jmenu中的图像

[英]images in jmenu from jar file in java

Dear Stackoverflow Developers i have to load image as an icon to jmenu from jar. 亲爱的Stackoverflow开发人员,我必须将图像作为图标从jar加载到jmenu。 I am using the following code . 我正在使用以下代码。 It is throwing the null pointer exception but when i am setting the icon with imageicon class in jframe, it is showing the icon in frame 它抛出空指针异常,但是当我在jframe中使用imageicon类设置图标时,它在框架中显示图标

   try
   {

    JMenu menu= new JMenu("");
    Icon im1= new ImageIcon(getClass.getResource("path of the images");

   menu.setIcon(im1);
  }
  catch(Exception ex)
   {

   }

what is the wrong in this code plz help 这段代码plz帮助有什么问题

  • common issue is that ImageIcon , Icon doesn't returns any exception, test for Null value 常见问题是ImageIconIcon不返回任何异常,请测试Null value

  • Icon im1= new ImageIcon why??? , those are different Java Object , have to test if Icon is instanceof ImageIcon ,它们是不同的Java Object ,必须测试Icon是否为ImageIcon instanceof

  • read turotial about Icon and JMenu / JMenuItem 阅读有关IconJMenu / JMenuItem的教程

  • for example 例如

在此处输入图片说明

code

import java.awt.BorderLayout;
import java.awt.ComponentOrientation;
import java.awt.Dimension;
import java.awt.event.ActionEvent;

import javax.swing.AbstractAction;
import javax.swing.Box;
import javax.swing.Icon;
import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JPanel;
import javax.swing.JSeparator;
import javax.swing.JTextField;
import javax.swing.JTextPane;
import javax.swing.UIManager;
import javax.swing.border.BevelBorder;

public class MenuExample extends JPanel {

    private static final long serialVersionUID = 1L;
    private JTextPane pane;
    private JMenuBar menuBar;

    public MenuExample() {
        menuBar = new JMenuBar();
        JMenu formatMenu = new JMenu("Justify");
        formatMenu.setMnemonic('J');
        formatMenu.setIcon(UIManager.getIcon("OptionPane.errorIcon"));
        MenuAction leftJustifyAction = new MenuAction("Left", UIManager.getIcon("OptionPane.errorIcon"));
        MenuAction rightJustifyAction = new MenuAction("Right", UIManager.getIcon("OptionPane.informationIcon"));
        MenuAction centerJustifyAction = new MenuAction("Center", UIManager.getIcon("OptionPane.warningIcon"));
        MenuAction fullJustifyAction = new MenuAction("Full", UIManager.getIcon("OptionPane.questionIcon"));
        JMenuItem item;
        item = formatMenu.add(leftJustifyAction);
        item.setMnemonic('L');
        item = formatMenu.add(rightJustifyAction);
        item.setMnemonic('R');
        item = formatMenu.add(centerJustifyAction);
        item.setMnemonic('C');
        item = formatMenu.add(fullJustifyAction);
        item.setMnemonic('F');
        menuBar.add(formatMenu);
        menuBar.add(createMenu("Menu 1"));
        menuBar.add(createMenu("Menu 2"));
        menuBar.add(createMenu("Menu 3"));
        menuBar.add(Box.createHorizontalGlue());
        menuBar.add(new JSeparator());
        menuBar.add(new JButton("   Seach ....  "));
        menuBar.add(new JLabel());
        menuBar.add(new JTextField("   Seach ....  "));
        menuBar.add(new JComboBox(new Object[]{"height", "length", "volume"}));
        menuBar.add(createMenu("About"));
        menuBar.setBorder(new BevelBorder(BevelBorder.RAISED));

    }

    private JMenu createMenu(String title) {
        JMenu m = new JMenu(title);
        m.add("Menu item #1 in " + title);
        m.add("Menu item #2 in " + title);
        m.add("Menu item #3 in " + title);
        if (title.equals("About")) {
            m.setComponentOrientation(ComponentOrientation.RIGHT_TO_LEFT);
        }
        return m;
    }

    class MenuAction extends AbstractAction {

        public MenuAction(String text, Icon icon) {
            super(text, icon);
        }

        public void actionPerformed(ActionEvent e) {
            try {
                pane.getStyledDocument().insertString(0,
                        "Action [" + e.getActionCommand() + "] performed!\n",
                        null);
            } catch (Exception ex) {
                ex.printStackTrace();
            }
        }
    }

    public static void main(String s[]) {
        MenuExample example = new MenuExample();
        example.pane = new JTextPane();
        example.pane.setPreferredSize(new Dimension(250, 250));
        example.pane.setBorder(new BevelBorder(BevelBorder.LOWERED));
        JFrame frame = new JFrame("Menu Example");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setJMenuBar(example.menuBar);
        frame.getContentPane().add(example.pane, BorderLayout.CENTER);
        frame.pack();
        frame.setVisible(true);
    }
}

What is wrong with this code? 此代码有什么问题?

  1. An empty catch(Exception ex) block: you should always leave a trace of an exception, otherwise it makes it incredibly hard to debug. 一个空的catch(Exception ex)块:您应该始终留下一个异常的痕迹,否则将使其难以调试。 Use a logger for that purpose or print the stacktrace to the console) 为此使用记录器或将堆栈跟踪信息打印到控制台)
  2. It is very likely that the resource is not found if you can't see the icon. 如果您看不到图标,很可能找不到资源。 In general, I prefer to use absolute path to the resource (otherwise it is relative to the current class package). 通常,我更喜欢使用资源的绝对路径(否则它是相对于当前类包的)。 You need to ensure that the image file is properly embedded (it must be somewhere on your classpath, either in a jar or in a directory) 您需要确保正确嵌入了图像文件(它必须在类路径中的某个位置,在jar或目录中)
  3. You should use a consistent indentation. 您应该使用一致的缩进。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM