kap*_*oke 5 java graphics doublebuffered
我有一个简单的Java JFrame画布.我每半秒左右更新屏幕上的内容,并且闪烁.我想实现双缓冲以消除闪烁,但我对Java很新,并且不熟悉如何这样做.我找到了一些例子,但不知道如何将他们的方法实现到我的.
以下是我现在如何处理的基本设置.这不是我的确切代码 - 只是基本设置的一个示例.
感谢任何正确方向的推动!
public class myCanvas extends Canvas{
//variables
Color rectColor=Color.red;
public myCanvas()
{
}
public void paint(Graphics graphics)
{
//initial setup, such as
graphics.setColor(rectColor);
graphics.fillRect(X,Y,W,H);
}
public static void main(String[] args)
{
myCanvas canvas = new myCanvas();
JFrame frame = new JFrame("GUI");
frame.setSize(frameWidth,frameHeight);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.getContentPane().add(canvas);
frame.setVisible(true);
while(true){
rectColor=Color.green;
canvas.validate();
canvas.repaint();
Thread.sleep(500);
}
}
}
Run Code Online (Sandbox Code Playgroud)
首先,你应该避免混合重型和轻量级组件(AWT和SWING),主要是因为它们使用非常不同的绘图方法(如果你想了解更多,请阅读此处).
因此Canvas,您可以使用a 而不是JPanel.这也为您提供了一个潜在的解决方案,因为JPanel有一个方法setDoubleBuffered(boolean),更具体地说,这是在JComponent类中实现的.
我相信只需更换就足够了
public class myCanvas extends Canvas
Run Code Online (Sandbox Code Playgroud)
通过
public class myCanvas extends JPanel
Run Code Online (Sandbox Code Playgroud)
.虽然我没有测试过这个,但我希望它可以帮到你!
编辑:当然,当你在方法中设置frame和canvas时main,你必须放置方法调用
canvas.setDoubleBuffered(true);
Run Code Online (Sandbox Code Playgroud)
某处.
| 归档时间: |
|
| 查看次数: |
7089 次 |
| 最近记录: |