Java:覆盖 paint() 和 paintComponent()
Java: Overriding paint() AND paintComponent()
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 绘画机制将确保在适当的时间调用适当的绘画方法。
自定义绘画是通过覆盖 paintComonent(...)
JPanel(或 JComponent)来完成的。然后将面板添加到框架中。
阅读 Swing 教程中的部分以获取更多信息和工作示例。
what does repaint() do?
它计划重新绘制组件。 RepaintManager
会将重绘请求合并为一个绘画请求,以提高绘画效率。
永远不要在绘画方法中调用 repaint()。当您更改 class 的 属性 时,您会在 setter 方法中调用 repaint()。例如,使用 setForeground()、setBackground() 等方法会导致组件重绘。
New to java:
我建议您保留 link Swing 教程,以便学习 Swing 基础知识。
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 绘画机制将确保在适当的时间调用适当的绘画方法。
自定义绘画是通过覆盖 paintComonent(...)
JPanel(或 JComponent)来完成的。然后将面板添加到框架中。
阅读 Swing 教程中的部分以获取更多信息和工作示例。
what does repaint() do?
它计划重新绘制组件。 RepaintManager
会将重绘请求合并为一个绘画请求,以提高绘画效率。
永远不要在绘画方法中调用 repaint()。当您更改 class 的 属性 时,您会在 setter 方法中调用 repaint()。例如,使用 setForeground()、setBackground() 等方法会导致组件重绘。
New to java:
我建议您保留 link Swing 教程,以便学习 Swing 基础知识。