gpt4 book ai didi

java - 每当您单击它时,都会使用不同的图像重新绘制 JPanel

转载 作者:塔克拉玛干 更新时间:2023-11-01 22:29:44 26 4
gpt4 key购买 nike

我对 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,0,0,this);}
else if(s==false){
g.drawImage(img2,0,0,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 始终 是按值传递的,因此您的点击方法不会更改类的 boolean 字段:

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。

还有你的 boolean 切换方法:

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();
}

顺便说一句,if (s == true) 是不必要的冗余。如果您需要这样的构造,您可以更简洁地执行 if (s)。与 if (s == false) 相同,更好地表示为 if (!s)

关于java - 每当您单击它时,都会使用不同的图像重新绘制 JPanel,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14012308/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com