为什么每次最小化窗口时,我的Java程序都会刷新



我正在制作一款宫廷游戏,以了解并更好地使用Java编程。尽管我遇到了一个问题,每次我最小化屏幕时,选择卡图像的变量都会不断刷新。例如,我的随机化功能使变量根据数字选择一张卡片,然后显示它,但每次我最小化页面并再次打开它时,它都会发生变化。我试图寻找问题的答案,但找不到。我正在做的事情的代码在我问的上一个问题中我的问题是如何阻止每次最小化页面时刷新变量

编辑:我刚刚意识到,如果这有帮助的话,每次用光标移动窗口时,它也会发生变化

这是我的随机化函数:

public void randomizer() {
Random rand = new Random();
int rand_int1 = rand.nextInt(15-1)+1;
System.out.print(rand_int1);
if (rand_int1 == 1) {
setVariables(aceClover);
}else if (rand_int1 == 2) {
setVariables(twoClover);
}else if (rand_int1 == 3) {
setVariables(threeClover);
}else if (rand_int1 == 4) {
setVariables(fourClover);
}else if (rand_int1 == 5) {
setVariables(fiveClover);   
}else if (rand_int1 == 6) {
setVariables(sixClover);
}else if (rand_int1 == 7) {
setVariables(sevenClover);
}else if (rand_int1 == 8) {
setVariables(eightClover);
}else if (rand_int1 == 9) {
setVariables(nineClover);
}else if (rand_int1 == 10) {
setVariables(tenClover);
}else if (rand_int1 == 11) {
setVariables(jackClover);
}else if (rand_int1 == 12) {
setVariables(queenClover);
}else if (rand_int1 == 13) {
setVariables(kingClover);
}else {
System.out.println("Couldn't return any Cards!");
}
}
package MainClasses;
import java.awt.*;
import java.io.*;
import java.util.Random;
import javax.imageio.ImageIO;
public class DrawBoard extends Component{
AllCards accessor = new AllCards();
public void paint(Graphics g) { // function to draw onto the window
Graphics2D g1 = (Graphics2D)g; // the component being used to access and write to the window
g1.clearRect(0, 0, getWidth(), getHeight()); // clears rectangle every frame
g1.setBackground(Color.green); // sets background color
accessor.randomizer();
g1.drawImage(accessor.imageExtract, 100, 100, null);
}   
}

如果你需要剩下的代码,它在这个问题中:

完整代码

它确实有一些小的变化,因为我解决了以前的问题,我所做的只是创建一个新的类,并将这些变量的创建转移到那个类,然后将它们从以前的类中删除。

因为您正在从paint方法中调用随机化器,并且每当最小化和恢复gui时,或者每当调整其大小时,都会调用该方法。

解决方案:不要这样做,在绘制方法中没有任何程序逻辑,而是只有绘制代码。

相反:

  • 从只调用一次的类构造函数进行调用

还有:

  • 不要扩展Component,而是扩展JPanel(不要混合AWT和Swing组件(
  • 在JPanel的paintComponent方法中绘制
  • 如果要覆盖paint,则在覆盖super.paint(g)中调用super的绘制方法;如果要覆盖paintComponent,则调用super.paintComponent(g)。这允许进行"内务处理"绘画,包括去除"脏"像素

最新更新