从 JButton 菜单中单击 JLabel 时不显示图像 (java)

Image is not appearing when JLabel is clicked from JButton menu (java)

我的问题是关于从菜单中单击 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

我哪里做错了?在 else if 语句上?谁可以给我解释一下这个?我确实在每个条件下都设置了 setVisible(true) 但它不起作用。提前致谢!

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 class 并命名为 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");

而不是

ImageIcon img1 = new ImageIcon("aib.jpg");

即使您将应用程序打包为 jar 文件,这样它也能正常工作。

希望这对您有所帮助。