gpt4 book ai didi

Java:重写paint()和paintComponent()

转载 作者:行者123 更新时间:2023-12-02 04:15:56 24 4
gpt4 key购买 nike

java新手:我重写了paint()并在其中添加了一些东西;然后我覆盖了paintComponent(),我注意到paint()中的代码没有运行。我是否忘记做某事或者我只是无知? (我知道使用 @override 是一个很好的做法,但这是那些日子之一)

private Image dbImage;
private Graphics dbg;

public void paint(Graphics g)
dbImage = createImage(getWidth(), getHeight());
dbg = dbImage.getGraphics();
paintComponent(dbg);
g.drawImage(dbImage, 0, 0, this);

g.fillOval(0, 0, 10, 12);
}
public void paintComponent(Graphics g) {
setBackground(Color.CYAN);

double i = .25;
if (du) {
y -= i;
}
if (dr) {
x += i;
}
if (dd) {
y += i;
}
if (dl) {
x -= i;
}

if (x < 0) {
x = 0;
}
if (x > getWidth() - 25) {
x = getWidth() - 25;
}
if (y < 25) {
y = 25;
}
if (y > getHeight() - 25) {
y = getHeight() - 25;
}

g.drawOval( (int) x, (int) y, 25, 25);
repaint();

}
public static void main(String[] args) {


}

还有一个不相关的主题:repaint() 是做什么的?

最佳答案

不要重写paint(),也不要直接调用绘画方法。 Swing绘画机制将确保在正确的时间调用正确的绘画方法。

自定义绘制是通过重写 JPanel(或 JComponent)的 paintComonent(...) 来完成的。然后将面板添加到框架中。

阅读 Swing 教程中的部分以获取更多信息和工作示例。

what does repaint() do?

它安排组件的重新绘制。 RepaintManager 会将重绘请求合并为单个绘制请求,以使绘制更加高效。

你不应该在绘画方法中调用repaint()。当您更改类的属性时,您可以在 setter 方法中调用 repaint()。例如,使用 setForeground()、setBackground() 等方法会导致组件的 repaint()。

New to java:

我建议您保留一个指向 Swing 教程的链接,以方便学习 Swing 基础知识。

关于Java:重写paint()和paintComponent(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33324680/

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