Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/image-processing/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 缓冲策略和Swing相结合?_Java_Swing_Awt_Java 2d - Fatal编程技术网

Java 缓冲策略和Swing相结合?

Java 缓冲策略和Swing相结合?,java,swing,awt,java-2d,Java,Swing,Awt,Java 2d,BufferStrategy是AWT的一部分,经常与Canvas类一起使用,但是它是否也可以与Swing UI结合使用而不会导致任何窗口显示问题,或者在这种情况下我应该更好地使用纯AWT?谢谢您的回答。在Swing图像预览中,我是这样使用的: public class ImagePreview extends JFrame { ... private final int BUFFERS = 2; private BufferStrategy bufferStrategy;

BufferStrategy是AWT的一部分,经常与Canvas类一起使用,但是它是否也可以与Swing UI结合使用而不会导致任何窗口显示问题,或者在这种情况下我应该更好地使用纯AWT?谢谢您的回答。

在Swing图像预览中,我是这样使用的:

public class ImagePreview extends JFrame {
    ...
    private final int BUFFERS = 2;
    private BufferStrategy bufferStrategy;
    ...
    @Override
    public void paint(Graphics g) {
        if (bufferStrategy == null) {
            this.createBufferStrategy(BUFFERS);
            this.bufferStrategy = this.getBufferStrategy();
        }
        ...
        for (int i = 0; i < BUFFERS; i++) {
            Graphics2D g2Buffered = (Graphics2D) bufferStrategy.getDrawGraphics();
            g2Buffered.draw(...
            ...
            bufferStrategy.show();
            g2Buffered.dispose();
        }
    }
}
公共类ImagePreview扩展JFrame{
...
专用最终整数缓冲区=2;
私有缓冲策略;
...
@凌驾
公共空间涂料(图g){
if(bufferStrategy==null){
这个.createBufferStrategy(缓冲区);
this.bufferStrategy=this.getBufferStrategy();
}
...
对于(int i=0;i

我希望这能有所帮助。

在Swing图像预览中,我这样使用它:

public class ImagePreview extends JFrame {
    ...
    private final int BUFFERS = 2;
    private BufferStrategy bufferStrategy;
    ...
    @Override
    public void paint(Graphics g) {
        if (bufferStrategy == null) {
            this.createBufferStrategy(BUFFERS);
            this.bufferStrategy = this.getBufferStrategy();
        }
        ...
        for (int i = 0; i < BUFFERS; i++) {
            Graphics2D g2Buffered = (Graphics2D) bufferStrategy.getDrawGraphics();
            g2Buffered.draw(...
            ...
            bufferStrategy.show();
            g2Buffered.dispose();
        }
    }
}
公共类ImagePreview扩展JFrame{
...
专用最终整数缓冲区=2;
私有缓冲策略;
...
@凌驾
公共空间涂料(图g){
if(bufferStrategy==null){
这个.createBufferStrategy(缓冲区);
this.bufferStrategy=this.getBufferStrategy();
}
...
对于(int i=0;i

我希望这会有所帮助。

BufferStrategy并不是AWT的真正组成部分,即使它在java.AWT.image包中。由于历史原因,所有与映像相关的类都在java.AWT.image包中。BufferStrategy出现在java 1.4中,到那时Swing是推荐的框架(与AWT相反)


因此,您可以将BufferStrategy与Swing一起使用。普通Swing组件不需要BufferStrategy,但它对游戏很有用。

BufferStrategy不是AWT的真正组成部分,即使它在包java.AWT.image中。由于历史原因,所有与图像相关的类都在java.AWT.image包中。BufferStrategy出现在java 1.4和b中y时间摆动是推荐的框架(与AWT相反)


因此,您可以在Swing中使用BufferStrategy。正常的Swing组件不需要它,但它对游戏很有用。

问题背后的动机是什么?Swing默认是双缓冲的,因此通常没有理由使用BufferStrategy。我读到BufferStrategy快得多。您在问题背后的动机是什么问题?Swing默认是双缓冲的,所以通常没有理由使用BufferStrategy。我读到BufferStrategy要快得多。但是如果我不想创建一个全屏应用程序并使用带有JMenu的JFrame怎么办?在这种情况下,我应该更好地使用AWT吗?正如您所看到的,它是一个带有缓冲绘制方法的JFrame。据我所知现在只有java.awt.Canvas使用硬件加速,但是这个类是awt的子集。但是如果我不想创建一个全屏应用程序并使用带有JMenu的JFrame怎么办?在这种情况下,我应该更好地使用awt吗?正如你所看到的,它是一个带有缓冲绘制方法的JFrame。据我所知,只有java.awt.Canvas使用硬件加速,但是这个class是AWT的一个子集。谢谢。这意味着BufferStrategy与重量级组件无关?BufferStrategy是否比内部Swing double buffer更强大?它与重量级组件无关。“强大”-取决于您的用例。谢谢。这意味着BufferStrategy is与重型组件无关?BufferStrategy是否比内部Swing double buffer更强大?它与重型组件无关。“强大”-取决于您的用例。