问题描述
高手,我弄了一个Java的类型:高手,我弄了一个Java的类型:高手,我弄了一个Java的类型:importjava.awt.AWTEvent;importjava.awt.Toolkit;importjava.awt.event.AWTEventListener;importjava.awt.event.KeyEvent;importjava.net.URL;importjava.util.HashMap;importjavax.swing.ImageIcon;importjavax.swing.JFrame;importjavax.swing.JLabel;importjavax.swing.JPanel;publicclassMyMainFrameextendsBJFrame{publicMyMainFrame(){Toolkittk=Toolkit.getDefaultToolkit();tk.addAWTEventListener(newMyAWTEventListener(),AWTEvent.KEY_EVENT_MASK);setTitle("Java之美");setDefaultCloseOperation(0x3);setSize(220,200);setBack();setVisible(true);}publicvoidsetBack(){HashMap<Integer,JFrame>myframebox=newHashMap<Integer,JFrame>();myframebox.get(0).dispose();((JPanel)this.getContentPane()).setOpaque(false);//Winter.jpg这个图片的位置要跟当前这个类是同一个包下//URLurl=Test.class.getResource("OurSoul.jpg");ImageIconimg=newImageIcon("OurSoul.jpg");JLabelbackground=newJLabel(img);this.getLayeredPane().add(background,newInteger(Integer.MIN_VALUE));background.setBounds(0,0,img.getIconWidth(),img.getIconHeight());}publicstaticvoidmain(String[]args){newMyMainFrameConsole();}}classMyAWTEventListenerimplementsAWTEventListener{privatebooleancontrolPressed=false;privatebooleanshiftPressed=false;privatebooleanaltPressed=false;@OverridepublicvoideventDispatched(AWTEventevent){if(event.getClass()==KeyEvent.class){//被处理的事件是键盘事件.KeyEventkeyEvent=(KeyEvent)event;if(keyEvent.getID()==KeyEvent.KEY_PRESSED){keyPressed(keyEvent);}elseif(keyEvent.getID()==KeyEvent.KEY_RELEASED){keyReleased(keyEvent);}}}privatevoidkeyPressed(KeyEventevent){if(event.getKeyCode()==KeyEvent.VK_CONTROL){controlPressed=true;}elseif(event.getKeyCode()==KeyEvent.VK_ALT){altPressed=true;}elseif(event.getKeyCode()==KeyEvent.VK_SHIFT){shiftPressed=true;}if(controlPressed&&altPressed&&shiftPressed){//当Ctr+C被按下时,进行相应的处理.//newCaptureScreen();}}privatevoidkeyReleased(KeyEventevent){if(event.getKeyCode()==KeyEvent.VK_CONTROL){controlPressed=false;}elseif(event.getKeyCode()==KeyEvent.VK_SHIFT){shiftPressed=false;}elseif(event.getKeyCode()==KeyEvent.VK_SHIFT){altPressed=false;}}}
上面的代码运行后的结果为:请问高手:我在第31行定义的”OurSoul.jpg“的图片,为什么不会显示在小弟的运行效果里呢?这是小弟原本调试成功的一个类型,现在由于时间紧迫,小弟,请求高手,CSDN的版主,能够帮帮忙,为小弟看一下这个类型中”不显示图片“的运行效果的原因.谢谢高手!!!!
解决方案
解决方案二:
自顶一个!!
解决方案三:
将OurSoul.jpg拷贝一份到这个工程的工程名下面,也就是src的同级目录试试看
解决方案四:
引用
将OurSoul.jpg拷贝一份到这个工程的工程名下面,也就是src的同级目录试试看
敬爱的蜗牛-大哥,谢谢您的第一时间到场!!小弟刚刚测试过了,OurSoul.jpg这个图片文件就是在与上文的“MyMainFrame.java”相同的文件路径之下的.亲眼验证三遍.希望蜗牛-大哥,能够再为小弟细细看看.
解决方案五:
图片要放到.class文件目录下,不是.java目录更大的问题是你的代码不符合我们凡人写代码的习惯
解决方案六:
需要通过repaint()重绘的。
解决方案七:
层次不对,你要么设置为背景,要么放在最顶层,这样才能看到你要的效果
解决方案八:
这样URLurl=getClass().getResource("img");ImageIconicon=newImageIcon(url);或者这样ImageIconicon=newImageIcon("src/包名/img");
解决方案九:
谢谢恩师方老师的落实到代码的点拨!!!!学生生希望方老师指点:为什么这句:ImageIconicon=newImageIcon("src/包名/img");
要把“src\”,这里的项目源码文件夹写到newImageIcon(),这个ImageIcon类型的构造方法的参数列表里?这里的机制,是“填写相对路径地址”,还是“填写绝对路径”地址的写法,能够让小弟把这里的ImageIcon这个,类型的构造方法体中的“图片文件的路径”,参数,给填写上?恩师,这里的代码:ImageIconicon=newImageIcon("src/包名/img");
是以什么方式进行“newImageIcon("src/包名/img");这句代码的构造方法体中的地址填写的方法,是按照什么方法来进行填写的?为什么不写起文件夹”src“所在的上层文件夹的地址?
解决方案十:
引用
这样URLurl=getClass().getResource("img");ImageIconicon=newImageIcon(url);或者这样ImageIconicon=newImageIcon("src/包名/img");
方老师,学生把提问写到了楼上,学生希望方老师,能够为学生做一下学生问题的指导.谢谢方老师!!
解决方案十一:
publicImageIcon(Stringfilename){this(filename,filename);}publicImageIcon(Stringfilename,Stringdescription){image=Toolkit.getDefaultToolkit().getImage(filename);if(image==null){return;}this.filename=filename;this.description=description;loadImage(image);}
源码如上,他不是getclass(相对于当前类所在的路径)这样去获取的,当然要知道绝对路径了。