我的问题是从菜单中单击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),但是它没有用。预先谢谢你!
答案 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文件,它也将起作用。
希望这会有所帮助。