从 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 文件,这样它也能正常工作。
希望这对您有所帮助。
我的问题是关于从菜单中单击 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 文件,这样它也能正常工作。
希望这对您有所帮助。