gpt4 book ai didi

java - 为什么Java repaint()方法不重画?我的代码是正确的

转载 作者:行者123 更新时间:2023-11-30 06:33:42 25 4
gpt4 key购买 nike

我从 2008 Java Book (Java Heads First) 中提取了这段代码。并同时提取了其他代码。一个正在工作,另一个则没有。两者都在动画中使用了 repaint() 方法。我非常非常仔细地比较了这两个代码,它们是相同的!我不知道为什么这段代码不重新绘制自身......它仅在我最小化和最大化时重新绘制,但在 for 循环期间不会重新绘制。我将向您展示不起作用的代码。感谢您的任何意见。

代码:

import javax.swing.*;
import java.awt.*;

public class ProstaAnimacja {

int x = 70;
int y = 70;

public static void main(String[] args) {
ProstaAnimacja gui = new ProstaAnimacja();
gui.doRoboty();
}

public void doRoboty() {
JFrame ramka = new JFrame();
ramka.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

MojPanelRysunkowy panel = new MojPanelRysunkowy();

ramka.getContentPane().add(panel);
ramka.setSize(300,300);
ramka.setVisible(true);

for (int i = 0; i < 130; i++) {
x++;
y++;

panel.repaint();

try {
Thread.sleep(100);
} catch (Exception ex) { }
}
} // koniec doRoboty()

public class MojPanelRysunkowy extends JPanel {
public void paintComponent(Graphics g) {
g.setColor(Color.green);
g.fillOval(x,y,40,40);
}
} // koniec klasy wewnętrznej

} // koniec klasy zewnętrznej

最佳答案

您错过了对 super.paintComponent(Graphics g) 的调用,这就是原因:) 修复了实现:

import javax.swing.*;
import java.awt.*;

public class ProstaAnimacja {

int x = 70;
int y = 70;

public static void main(String[] args) {
ProstaAnimacja gui = new ProstaAnimacja();
gui.doRoboty();
}

public void doRoboty() {
JFrame ramka = new JFrame();
ramka.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

MojPanelRysunkowy panel = new MojPanelRysunkowy();

ramka.getContentPane().add(panel);
ramka.setSize(300,300);
ramka.setVisible(true);

for (int i = 0; i < 130; i++) {
x++;
y++;

panel.repaint();

try {
Thread.sleep(100);
} catch (Exception ex) { }
}
} // koniec doRoboty()

public class MojPanelRysunkowy extends JPanel {
public void paintComponent(Graphics g) {
//The fix is in the next line - it clears the background
super.paintComponent(g);
g.setColor(Color.green);
g.fillOval(x,y,40,40);
}
} // koniec klasy wewnętrznej

} // koniec klasy zewnętrznej

关于java - 为什么Java repaint()方法不重画?我的代码是正确的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45589520/

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