从JButton菜单(Java)单击JLabel时未显示图像

时间:2018-10-24 09:22:01

标签: java image swing jlabel embedded-resource

我的问题是从菜单中单击jlabel时图像不出现 当我从菜单中单击时,为什么没有显示图像?请帮忙。新手在这里

import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import javax.swing.event.*;

public class Lab05Part02 extends JFrame implements ActionListener{

JMenuItem b1,b2,b3;
JLabel bankImg;
ImageIcon img1 = new ImageIcon("aib.jpg");
ImageIcon img2 = new ImageIcon("BOI.jpg");
ImageIcon img3 = new ImageIcon("kbc.jpeg");

Lab05Part02(){

    JMenuBar mb = new JMenuBar();

    JMenu banks = new JMenu("Banks", false);

    banks.add(b1 = new JMenuItem("AIB"));
    b1.addActionListener(this);
    banks.add(b2 = new JMenuItem("Bank of Ireland"));
    b2.addActionListener(this);
    banks.add(b3 = new JMenuItem("KBC"));
    b3.addActionListener(this);

    mb.add(banks);
    setJMenuBar(mb);

    JPanel p = new JPanel();

    bankImg = new JLabel();

    p.add(bankImg);
    getContentPane().add(p);

    setSize(500,500);
    setVisible(true);


}//end of constructor

public static void main(String[] args){

    Lab05Part02 myMenu = new Lab05Part02();


}//end of main method

public void actionPerformed(ActionEvent e){

    Object source = new Object();

    if(source == b1){

         bankImg.setIcon(img1);

    }
    else if(source == b2){

        bankImg.setIcon(img2);

    }
    else if(source == b3){

        bankImg.setIcon(img3);

    }

    else{

        bankImg.setText("Select Image from Menu");

    }


}//end of listener method

}//end of class

我哪里出错了?关于if语句?谁可以给我解释一下这个?我确实在每个条件上都设置了setVisible(true),但是它没有用。预先谢谢你!

1 个答案:

答案 0 :(得分:0)

actionPerformed方法中,您忘记了从ActionEvent e获取源对象,而只是创建了一个新对象:

Object source = new Object();

很明显,以这种方式source不等于您的按钮之一的引用。

ActionEvent对象包含事件的来源。为了解决该问题,请从ActionEvent e参数获取源对象:

Object source = e.getSource();

如果您的图片(“ aib.jpg”,“ BOI.jpg”和“ kbc.jpeg”)位于正确的路径中,并且您的ImageIcon img1, img2, img3对象已成功填充,则可以使用上述修复程序。

但是我可以建议,如果您不想在项目中显示图像和图标带来更多不便,最好将它们放在resources.images之类的程序包中,并在其中创建一个Java类并将其命名为{{1 }}。

然后,您可以使用Resources.java的资源流来创建图像,该资源流与图像和图标位于同一包中。

Resources.java

然后在您的代码中就可以编写

package resources.images;

import java.net.URL;
import javax.swing.ImageIcon;

public class Resources {
    public static ImageIcon getImageIcon(String name) {
        URL imagePath = Resources.class.getResource(name);
        return new ImageIcon(imagePath);
    }
}

代替

ImageIcon img1 = Resources.getImageIcon("aib.jpg");

这样,即使将应用程序打包为jar文件,它也将起作用。

希望这会有所帮助。