java – 每次单击时重绘具有不同图像的JPanel
发布时间:2020-12-15 08:48:56 所属栏目:Java 来源:网络整理
导读:我还是 Java的新手,我有以下问题. 正如你在下面看到的那样,我创建了一个带有图像的JPanel,每当我点击面板时我想要更改它,但是由于某种原因它不起作用.我已经坐了几个小时了,似乎完全卡住了.如果你能看一下代码并帮助我,我将非常感激. 谢谢你,祝圣诞快乐. pub
我还是
Java的新手,我有以下问题.
正如你在下面看到的那样,我创建了一个带有图像的JPanel,每当我点击面板时我想要更改它,但是由于某种原因它不起作用.我已经坐了几个小时了,似乎完全卡住了.如果你能看一下代码并帮助我,我将非常感激. 谢谢你,祝圣诞快乐. public class Level { JPanel panel String img1Path = "img1.png"; String img2Path = "img2.png"; Image img1 = Toolkit.getDefaultToolkit().getImage(img1Path); Image img2 = Toolkit.getDefaultToolkit().getImage(img2Path); boolean s1 = false; public Level(){ initGUI(); } public void initGUI(){ panel = new JPanel(){ public void paintComponent(Graphics g){ super.paintComponent(g); draw(g,s1); } } panel.addMouseListener(new ImgListener(s1)); } public void draw(Graphics g,boolean s){ if(s==true){ g.drawImage(img1,this);} else if(s==false){ g.drawImage(img2,this);} }//draw() public void click(boolean s,boolean b){ s = b; repaint(); } public class ImgListener extends MouseAdapter { boolean s; public ImgListener(boolean s){ pS(s); } public void mouseClicked(MouseEvent e){ if(s==true){ click(s,false); } else if(s==false){ click(s,true); } }//mouseClicked public void pS(boolean s){ this.s = s; }//pS }//ImgListener }//Level 解决方法
Java始终是按值传递的,因此您的click方法不会更改类的布尔字段:
public void click(boolean s,boolean b){ s = b; // this does not change the class field s. repaint(); } 原因是上面的s参数与类的s字段不同,而是参数执行所谓的“阴影”类字段.解决方案是更改此方法并删除s参数.或者更好 – 彻底摆脱这种方法. 请注意,如果这是我的应用程序,我将使用JLabel,给它一个MouseListener,并简单地在mousePressed上交换ImageIcons. 你的布尔切换方法: public void mouseClicked(MouseEvent e){ if(s==true){ click(s,false); } else if(s==false){ click(s,true); } } 通过这样做并摆脱错误的click(…)方法可以大大简化和纠正: public void mouseClicked(MouseEvent e){ s = !s; repaint(); } 顺便说一句,如果(s == true)不必要地多余.如果你需要这样的结构,你可以更简洁,简单地做if(s).同样适用于if(s == false),更好地表示为(!s) (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- 为什么在Java中这是可能的:this.getClass().getClass().ge
- 多线程 – Golang阻塞和非阻塞
- java – Jolokia如何在服务器端工作?
- orm – Node.js中的Mongodb / Mongoose.通过嵌套文档的id查
- 使用序列化将对象传递给另一个JVM – 相同的Java版本和jar(
- 为什么java / lang / System中的nullPrintStream()函数将cu
- java 弹出选择目录框(选择文件夹),获取选择的文件夹路径
- Java并发编程:并发容器ConcurrentHashMap
- java – Freemarker,是否可以默认设置计算机编号格式?
- java – System.out.println在Intellij Idea中写入的位置?