求高手帮帮忙看一个“Swing的图片不显示”类型的故障原因.

chy_chy091 2014-06-25 09:20:26
高手,我弄了一个Java的类型:
高手,我弄了一个Java的类型:


高手,我弄了一个Java的类型:


import java.awt.AWTEvent;
import java.awt.Toolkit;
import java.awt.event.AWTEventListener;
import java.awt.event.KeyEvent;
import java.net.URL;
import java.util.HashMap;
import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;

public class MyMainFrame extends BJFrame {

public MyMainFrame() {
Toolkit tk = Toolkit.getDefaultToolkit();
tk.addAWTEventListener(new MyAWTEventListener(),
AWTEvent.KEY_EVENT_MASK);
setTitle("Java之美");
setDefaultCloseOperation(0x3);
setSize(220, 200);
setBack();
setVisible(true);
}

public void setBack() {
HashMap<Integer, JFrame> myframebox = new HashMap<Integer, JFrame>();
myframebox.get(0).dispose();
((JPanel) this.getContentPane()).setOpaque(false);
// Winter.jpg这个图片的位置要跟当前这个类是同一个包下
// URL url = Test.class.getResource("OurSoul.jpg");
ImageIcon img = new ImageIcon("OurSoul.jpg");
JLabel background = new JLabel(img);
this.getLayeredPane().add(background, new Integer(Integer.MIN_VALUE));
background.setBounds(0, 0, img.getIconWidth(), img.getIconHeight());
}

public static void main(String[] args) {
new MyMainFrameConsole();
}
}

class MyAWTEventListener implements AWTEventListener {
private boolean controlPressed = false;
private boolean shiftPressed = false;
private boolean altPressed = false;

@Override
public void eventDispatched(AWTEvent event) {
if (event.getClass() == KeyEvent.class) {
// 被处理的事件是键盘事件.
KeyEvent keyEvent = (KeyEvent) event;

if (keyEvent.getID() == KeyEvent.KEY_PRESSED) {
keyPressed(keyEvent);
} else if (keyEvent.getID() == KeyEvent.KEY_RELEASED) {
keyReleased(keyEvent);
}
}
}

private void keyPressed(KeyEvent event) {
if (event.getKeyCode() == KeyEvent.VK_CONTROL) {
controlPressed = true;
} else if (event.getKeyCode() == KeyEvent.VK_ALT) {
altPressed = true;
} else if (event.getKeyCode() == KeyEvent.VK_SHIFT) {
shiftPressed = true;
}

if (controlPressed && altPressed && shiftPressed) {
// 当Ctr + C 被按下时, 进行相应的处理.
// new CaptureScreen();
}
}

private void keyReleased(KeyEvent event) {
if (event.getKeyCode() == KeyEvent.VK_CONTROL) {
controlPressed = false;
} else if (event.getKeyCode() == KeyEvent.VK_SHIFT) {
shiftPressed = false;
} else if (event.getKeyCode() == KeyEvent.VK_SHIFT) {
altPressed = false;
}
}
}​

上面的代码运行后的结果为:

请问高手:
我在第31行定义的”OurSoul.jpg“的图片,为什么不会显示在小弟的运行效果里呢?
这是小弟原本调试成功的一个类型,现在由于时间紧迫,小弟,请求高手,CSDN的版主,能够帮帮忙,为小弟看一下这个类型中”不显示图片“的运行效果的原因.
谢谢高手!!!!
...全文
1298 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复

    public ImageIcon (String filename) {
        this(filename, filename);
    }

    public ImageIcon(String filename, String description) {
	image = Toolkit.getDefaultToolkit().getImage(filename);
        if (image == null) {
            return;
        }
	this.filename = filename; 
        this.description = description;
	loadImage(image);
    }

源码如上,他不是getclass(相对于当前类所在的路径)这样去获取的,当然要知道绝对路径了。
chy_chy091 2014-06-26
  • 打赏
  • 举报
回复
引用
这样 URL url = getClass().getResource("img"); ImageIcon icon = new ImageIcon(url); 或者这样 ImageIcon icon = newImageIcon("src/包名/img");
方老师,学生把提问写到了楼上,学生希望方老师,能够为学生做一下学生问题的指导. 谢谢方老师!!
chy_chy091 2014-06-26
  • 打赏
  • 举报
回复
谢谢恩师方老师的落实到代码的点拨!!!! 学生生希望方老师指点: 为什么这句:
ImageIcon icon = new ImageIcon("src/包名/img");
要把“src\\”,这里的项目源码文件夹写到new ImageIcon(),这个ImageIcon类型的构造方法的参数列表里? 这里的机制,是“填写相对路径地址”,还是“填写绝对路径”地址的写法,能够让小弟把这里的ImageIcon这个,类型的构造方法体中的“图片文件的路径”,参数,给填写上? 恩师,这里的代码:
ImageIcon icon = new ImageIcon("src/包名/img");
是以什么方式进行“new ImageIcon("src/包名/img");这句代码的构造方法体中的地址填写的方法,是按照什么方法来进行填写的?为什么不写起文件夹”src“所在的上层文件夹的地址?
  • 打赏
  • 举报
回复
这样 URL url = getClass().getResource("img"); ImageIcon icon = new ImageIcon(url); 或者这样 ImageIcon icon = newImageIcon("src/包名/img");
myisfei 2014-06-25
  • 打赏
  • 举报
回复
层次不对,你要么设置为背景,要么放在最顶层,这样才能看到你要的效果
疯癫行者 2014-06-25
  • 打赏
  • 举报
回复
需要通过repaint()重绘的。
Inhibitory 2014-06-25
  • 打赏
  • 举报
回复
图片要放到.class文件目录下,不是.java目录 更大的问题是你的代码不符合我们凡人写代码的习惯
chy_chy091 2014-06-25
  • 打赏
  • 举报
回复
引用
将 OurSoul.jpg 拷贝一份到这个工程的工程名下面,也就是src的同级目录试试看

敬爱的蜗牛-大哥,谢谢您的第一时间到场!!
小弟刚刚测试过了,OurSoul.jpg这个图片文件就是在与上文的“MyMainFrame.java”相同的文件路径之下的.
亲眼验证三遍.
希望蜗牛-大哥,能够再为小弟细细看看.


姜小白- 2014-06-25
  • 打赏
  • 举报
回复
将 OurSoul.jpg 拷贝一份到这个工程的工程名下面,也就是src的同级目录试试看
chy_chy091 2014-06-25
  • 打赏
  • 举报
回复
自顶一个!!

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧