3D OpenGLビュー上にHUDを描画したいと思いますが、パネルで行われた描画は見落とされているようですが、完了しています。GLCanvasの描画方法は?
ここにいくつかのベアボーンコードがあります。
MyFrame;
public class MyFrame extends JFrame{
private static final long serialVersionUID = 1L;
public MyFrame(Labyrinth l){
super();
this.setTitle("My Frame");
this.setSize(512, 384);
this.setContentPane(new MyPanel());
//this.setVisible(true);//If needed here.
}
}
MyPanel;
public class MyPanel extends JPanel {
private static final long serialVersionUID = 1L;
public MyPanel(){
super();
this.setLayout(new BorderLayout());
MyCanvas mc=new MyCanvas(l);
mc.setFocusable(false);
this.add(this.mc, BorderLayout.CENTER);
//this.revalidate();//Doesn't seem needed in the instanciation.
}
public void paintComponent(Graphics g){
super.paintComponent(g);
this.mc.repaint();
g.setColor(new Color(128,128,128));
g.fillRect(0, 0, this.getWidth()/2,this.getHeight()/2);
//top-left quarter should be greyed away.
}
}
MyCanvas;
public class MyCanvas extends GLCanvas{
private static final long serialVersionUID = 1L;
public MyCanvas(){
super(new GLCapabilities(GLProfile.getDefault()));
}
}
絵が描かれますが、ビューには表示されません。私は、repaint()、paint(Graphics)、paintComponent(Graphics)、およびupdate()をオーバーライドしようとしました。私は、 "ヘビー級"コンポーネントのペイントは複雑で、コンポーネントに直接ペイントするか別のタイプを使用する必要があると言われてきました。私は明らかに3Dレンダリングを表示するためにGLCanvasが必要です。同時に、オーバーレイを描画するツールを提供していないようです。誰かが私にJFrameのglassPaneで私の作図をやってくれると言ったのですが、それはむしろ過度のようです。私はglassPaneの周りを遊んではいけないと言われています。
私は絵の呼び出しの順序について多くのトピックを見てきましたが、そのような方法をオーバーライドしている間は正しいとは確信できません。 GLCanvasコンポーネント上に表示された簡単なJPanelの絵を見逃してしまったという明白な方法はありますか?
ことが可能だろう子パネルをlayeredPaneに沿ってサイズ変更するには?私は、ディメンションが変更されたときにコンポーネントのフラグを設定するためにLPの再描画メソッドをオーバーライドすると思います。それにもかかわらず、これは私が欲しかったことです、ありがとう。 – Moige
私はあなたのために別の質問をしていますが、それは別の話題にはならないでしょう。一番上のJPanelの塗装されていない部分をどうやって見ることができますか?今はGLCanvas上のパネルの左上の四半分のみを描画しようとすると[http://imgur.com/a/7m65O](http://imgur.com/a/7m65O)のようなものが表示されます。いいですが、十分ではありません。 (編集:これはsetOpaque(false);パネルインスタンシエーションの場合) – Moige
リサイズの場合、 'ComponentListener'を使用し、' componentResized'の子パネルのサイズを変更することができます。 'paintComponent'をオーバーライドし、' super.paintComponent'を呼び出さず、色でパネルをクリアしないという透明性の問題については、その問題はそこにあってはなりません。 – Vallentin