gpt4 book ai didi

java - JFrame 不显示 Canvas

转载 作者:行者123 更新时间:2023-12-02 11:04:58 27 4
gpt4 key购买 nike

我最近一直在使用 BufferStrategy 和 JFrame 来制作初步图形。然而,当尝试在框架上绘制一个简单的矩形时,什么也没有出现。这是代码:

import java.awt.*;
import java.awt.image.BufferStrategy;
import javax.swing.*;

public class GTestingMain {

public static void main(String[] args) {

JFrame myFrame = new JFrame();
Canvas myCanvas = new Canvas();
Graphics2D g;
BufferStrategy strategy;

myFrame.setSize(500, 500);
myFrame.setResizable(false);
myFrame.setLocationRelativeTo(null);
myFrame.setVisible(true);
myFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

myCanvas.setPreferredSize(new Dimension(500, 500));

myFrame.add(myCanvas);
myFrame.pack();

strategy = myCanvas.getBufferStrategy();
if(strategy == null) {
myCanvas.createBufferStrategy(3);
}
strategy = myCanvas.getBufferStrategy();//Throwing in again so strategy != null

do {

do {

g = (Graphics2D) strategy.getDrawGraphics();
g.setColor(Color.WHITE);
g.fillRect(0, 0, 500, 500);
g.setColor(Color.red);
g.fillRect(10, 40, 50, 70);
g.dispose();


}while(strategy.contentsRestored());
strategy.show();

}while(strategy.contentsLost());

}

}

现在问题有点独特了。当我进入调试器并单步执行代码时,它工作得很好。如果我正常运行,空白。如果我在调试器中绘制框架之前单击框架 - 空白。

我知道我可以用线程“解决”这个问题,但我想知道为什么它在 Debug模式下有效*但在常规运行中无效。谢谢!

最佳答案

在开始使用 bufferStrategies 之前,请浏览 java doc

它说,

A buffer strategy gives you two all-purpose methods for drawing: getDrawGraphics and show. When you want to start drawing, get a draw graphics and use it. When you are finished drawing and want to present your information to the screen, call show. These two methods are designed to fit rather gracefully into a rendering loop:

您基本上缺少的是渲染循环。此外,由于它使用 volatile 图像作为缓冲区,我们永远不知道视频内存何时丢失。这解释了为什么您在 Debug模式下获取矩形。它就像一个带有 contentLostcontentsRestored 方法的回调系统。

只需按如下方式包装您的 do while 循环即可。

while(isHappy()){ // your logic goes here.
do {

do {

g = (Graphics2D) strategy.getDrawGraphics();
g.setColor(Color.WHITE);
g.fillRect(0, 0, 500, 500);
g.setColor(Color.red);
g.fillRect(10, 40, 50, 70);
g.dispose();


}while(strategy.contentsRestored());
strategy.show();

}while(strategy.contentsLost());
}

关于java - JFrame 不显示 Canvas,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51047658/

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