我只是不明白这里如何调用 paint()
或 paintComponent()
。这是 2011 年 YouTube 上的一个旧视频;该视频的评论部分没有帮助。我原本希望这段代码能够在 mousePressed()
方法中调用 repaint()
,但它没有,而且它只是有效。
这是 YouTube 视频:https://www.youtube.com/watch?v=PrPwCKr6WNI
import java.awt.Graphics;
import java.awt.Image;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import javax.swing.JFrame;
public class JavaApplication17 extends JFrame {
int GWIDTH = 800;
int GHEIGHT = 600;
int x, y;
private Image dbImage;
private Graphics dbg;
public JavaApplication17() {
setSize(GWIDTH, GHEIGHT);
setTitle("Game");
setResizable(false);
setVisible(true);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
addMouseListener(new Mouse());
x = 15;
y = 15;
}
public class Mouse extends MouseAdapter {
@Override
public void mousePressed(MouseEvent e) {
int xCoord = e.getX();
int yCoord = e.getY();
x = xCoord + 7;
y = yCoord + 7;
}
}
public void paint(Graphics g) {
dbImage = createImage(getWidth(), getHeight());
dbg = dbImage.getGraphics();
paintComponent(dbg);
g.drawImage(dbImage, 0, 0, this);
}
public void paintComponent(Graphics g) {
g.fillOval(x, y, 15, 15);
repaint();
}
public static void main(String[] args) {
JavaApplication17 main = new JavaApplication17();
}
}
最佳答案
how the
paint()
orpaintComponent()
is being called here?
paintComponent()
由您的代码在 paint()
方法中调用。
paint()
方法。通过调用 repaint()
方法,您可以通知 Swing 框架您的框架需要更新其内容。
在 IntelliJ IDEA 中,此代码如下所示:
注意蓝色圆圈中的字母O
。这意味着 paint()
方法重写了父类中的某些方法。在Java中,建议添加@Override
修饰符来标记重写的方法。
您的类JavaApplication17
扩展了类JFrame
,这意味着它继承了JFrame
及其祖先的所有方法。 JFrame
类又扩展了 Frame
并继承了 Frame
及其祖先的所有方法。等等。参见类层次结构图:
Window
和 Container
类都实现了它们的 public void Paint(Graphics g)
方法。在抽象 Component
类中,paint()
由 update()
方法调用。您不需要自己调用 paint()
方法。
如果您想了解更多信息并了解其工作原理,请阅读 Java 中的 OOP 概念(抽象、封装、继承和多态性)。
关于java - 这个类如何在鼠标按下后自动重绘?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60073472/