java - 将 JFrame 作为参数传递给 BufferStrategy 的 JPanel 子类

标签 java swing graphics jframe bufferstrategy

我正在创建一个应用程序,其中有一个带有主框架 (JFrame) 的类,以及一个名为 OvalPanelClass 的 JPanel 子类类。我说主框架是因为用户可以选择打开另一个 JFrame(窗口)。此 OvalPanelClass 是动态的,并使用 BufferStrategy 显示其图像。在某些情况下,它既会启动到单独的 JFrame 中,也会在某些时候出现在主框架的右下部分,因此我觉得让此类成为包含主框架的类的内部类没有意义.

问题是,由于此 JPanel 不是具有 JFrame 的类的一部分,因此它无法调用以获取 BufferStrategy 等。因此,为了克服这个问题,我尝试将对主框架的引用传递给 OvalPanelClass 构造函数,但我没有得到结果。我的问题是我的推理有什么缺陷?

框架类

import java.awt.BorderLayout;
import java.awt.Dimension;

import javax.swing.JFrame;
import javax.swing.JPanel;


public class FrameClass extends JFrame {

    public static void main(String[] args) {
        FrameClass test = new FrameClass();
        test.setup();
    }

    void setup() {
        setPreferredSize(new Dimension(800, 800));
        JPanel background = new JPanel(new BorderLayout());
        getContentPane().add(background);
        setVisible(true);
        OvalPanelCanvas shape = new OvalPanelCanvas(this);
        //shape.setup(this);
        background.add(BorderLayout.CENTER, shape);
        pack();
        shape.repaint();
    }
}

OvalPanelCanvas

import java.awt.Color;
import java.awt.Graphics;
import java.awt.image.BufferStrategy;

import javax.swing.JFrame;
import javax.swing.JPanel;

public class OvalPanelCanvas extends JPanel {
    JFrame frame;
    BufferStrategy bs;
  public OvalPanelCanvas(JFrame frame) {
      this.frame = frame;
      setOpaque(false);
  }
  public void paintComponent(Graphics g) {
      frame.createBufferStrategy(2);
      bs = frame.getBufferStrategy();
      Graphics bufferG = bs.getDrawGraphics();
      for (int i = 0; i < 5; i++) {
          int width = 50;
          int height = 50;
          bufferG.setColor(new Color(i*5,i*6,i*50));
          bufferG.fillOval(0, 0, width*i, height*i);
      }
      bufferG.dispose();
      bs.show();
  }
}

感谢您的宝贵时间!我对这个项目是什么含糊其辞,并删除了我认为不相关的细节,但如果您需要更多背景信息,请告诉我。

最佳答案

我也有类似的问题。我认为这与不使用 Canvas 和使用 JPanel 的关系更大。例如,我无法使用 Sprite 表上的图像,因为我的类扩展了 JFrame 而不是 Canvas。原因是因为我使用 eclipse 中的 JFrame 插件,它会在窗口类中创建 JFrame 时自动扩展 JFrame。

关于java - 将 JFrame 作为参数传递给 BufferStrategy 的 JPanel 子类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27809627/

相关文章:

java - 修复 Android 8+ 上的 'background service' 问题

java - 制作一个可以自定义的自定义JButton?

c# - 绘制带填充的时钟计时器

java - 使用 Java 的 Graphics 或 Graphics2D 类,如何绘制字符串?

java - 使用 Java DSL 成功 ftp 传输后移动文件

java - Spring session ,部署后从 "local class incompatible"恢复

java - 如何从具有泛型类型的方法中输入和返回值?

java - 哪种布局可以做到这一点?

java - 如何清除面板?

java - 使用 Java 图形沿弧形路径移动形状