Java JFrame(Swing)更新(图形)错误
我有一个带little Rect的小游戏,它正在移动,我需要在我的Java JFrame(Swing)更新(图形)错误,java,graphics,jframe,Java,Graphics,Jframe,我有一个带little Rect的小游戏,它正在移动,我需要在我的onUpdate方法中更新Graphics,每50毫秒调用一次。但是当我这样做时,我的按钮和文本字段都会闪烁 有人知道如何修复它吗?下面是一个如何通过计时器更新JPanel的示例 import java.awt.Color; import java.awt.Graphics; import java.awt.GridLayout; import java.awt.event.ActionEvent; import java.awt
onUpdate
方法中更新Graphics
,每50毫秒调用一次。但是当我这样做时,我的按钮和文本字段都会闪烁
有人知道如何修复它吗?下面是一个如何通过计时器更新JPanel
的示例
import java.awt.Color;
import java.awt.Graphics;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.Timer;
public class MainClass extends JPanel {
static JFrame frame = new JFrame("Oval Sample");
static MainClass panel = new MainClass(Color.CYAN);
static Color colors[] = {Color.RED, Color.BLUE, Color.GREEN, Color.YELLOW};
static Color color;
static int step = 0;
public MainClass(Color color) {
this.color = color;
}
final static Timer tiempo = new Timer(500, new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
// paintComponent();
System.out.println("Step: " + step++);
if (step % 2 == 0) {
color = Color.DARK_GRAY;
} else {
color = Color.BLUE;
}
panel.repaint();
}
});
@Override
public void paintComponent(Graphics g) {
int width = getWidth();
int height = getHeight();
g.setColor(color);
g.drawOval(0, 0, width, height);
}
public static void main(String args[]) {
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setLayout(new GridLayout(2, 2));
panel = new MainClass(colors[2]);
frame.add(panel);
frame.setSize(300, 200);
frame.setVisible(true);
tiempo.start();
}
}
当我这样做的时候。更新(我的图形)我所有的按钮和文本字段都会闪烁
不要直接调用update(…)
。这不是定制绘画的方式
相反,当您进行自定义绘制时,会覆盖JPanel的paintComponent(…)
方法:
@Override
protected void paintComponent(Graphics g)
{
super.paintComponent(g);
// add your custom painting here
}
我有一个小游戏,有一个小矩形,正在移动
如果需要动画,则应使用摆动计时器
来安排动画。然后,当计时器触发时,调用自定义类上的方法来更改矩形的位置,然后调用repaint()
。这将导致面板重新喷漆
读这本书。以下章节介绍:
表演定制绘画
如何使用摆动计时器
从基本示例开始。您应该覆盖paintComponent(…)
。这不起作用,因为Paint方法仅在我单击下一轮按钮时更新//我与Jpanel交互,但我希望它在我不做任何事的情况下更新