メイン フレーム (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();
}
}
御時間ありがとうございます!私はプロジェクトが何であるかについて漠然としていて、関係のない詳細であると感じたものを取り除きましたが、さらにコンテキストが必要な場合はお知らせください.