gpt4 book ai didi

java - 在此代码中使用 repaint() 方法

转载 作者:行者123 更新时间:2023-11-30 05:02:23 25 4
gpt4 key购买 nike

我在以下代码中使用重绘方法时遇到问题。请建议如何使用重绘方法,以便我的屏幕更新为小动画。这是我的代码:

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

class movingObjects extends JPanel {
Timer timer;
int x = 2, y = 2, width = 10, height = 10;

public void paintComponent(final Graphics g) { // <---- using repaint method
ActionListener taskPerformer = new ActionListener() {
public void actionPerformed(ActionEvent ae) {
g.setColor(Color.red);
g.drawOval(x, y, width, height);
g.fillOval(x, y, width, height);
x++;
y++;
width++;
height++;
}
};
new Timer(100, taskPerformer).start();
}
}

class mainClass {
mainClass() {
buildGUI();
}

public void buildGUI() {
JFrame fr = new JFrame("Moving Objects");
movingObjects obj = new movingObjects();
fr.add(obj);
fr.setVisible(true);
fr.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
fr.setSize(1300, 700);
}

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

最佳答案

不要试图延迟实际的绘画。当组件被要求绘制时,需要对其进行绘制。

相反,使用计时器来修改 MovingObjects 中的某些状态。在您的情况下,您要更改的状态是 xywidthheight。当计时器触发时,增加这些值并调用 repaint()

然后在您的 paintComponents 方法中,您只需使用这些值来绘制组件

public void paintComponent(Graphics g) {
g.setColor(Color.red);
g.drawOval(x,y,width,height);
g.fillOval(x,y,width,height);
}

编辑

不确定您遇到了什么问题,但调用 repaint() 并不困难:

ActionListener taskPerformer=new ActionListener() {
public void actionPerformed(ActionEvent ae) {
x++;
y++;
width++;
height++;
repaint();
}
};
new Timer(100,taskPerformer).start();

关于java - 在此代码中使用 repaint() 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6243536/

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