1

メイン フレーム (JFrame) を持つクラスと、OvalPanelClass という JPanel サブクラスであるクラスを持つアプリケーションを作成しています。メイン フレームと言うのは、ユーザーが別の JFrame (ウィンドウ) を開くオプションがあるためです。この OvalPanelClass は動的で、BufferStrategy を使用して画像を表示します。場合によっては別の JFrame で起動されることもあれば、メイン フレームの右下のセクションに表示されることもあるため、このクラスをメイン フレームを含むクラスの内部クラスにする意味がないと感じました。 .

問題は、この JPanel が JFrame を持つクラスの一部ではないため、BufferStrategy などを取得するための呼び出しを行うことができないことです。これを乗り越えるために、メイン フレームへの参照を OvalPanelClass コンストラクタに渡そうとしましたが、結果が得られません。私の質問は、私の推論に欠陥があるのは何ですか?

FrameClass

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();
  }
}

御時間ありがとうございます!私はプロジェクトが何であるかについて漠然としていて、関係のない詳細であると感じたものを取り除きましたが、さらにコンテキストが必要な場合はお知らせください.

4

1 に答える 1

0

私は同様の問題を抱えています。Canvas を使用しないことと、JPanel を使用することに関係があると思います。たとえば、クラスが Canvas ではなく JFrame を拡張しているため、使用できないスプライト シートに画像があります。その理由は、ウィンドウ クラスでの JFrame の作成時に JFrame を自動的に拡張する Eclipse 内から JFrame アドオンを使用しているためです。

于 2016-02-15T03:47:48.807 に答える