3 차원 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 주위에 재생 결코 말한 적이 있었어요.
는 내가 본 그림에 많은 주제를 위해 전화를하지만 나는 그런 또는 메서드를 재정의하는 동안 올바른 될 것이라고 설정할 수 없습니다, 나는 오버라이드 (override) 할 필요가 또는 어떤 방법이 있을지 알지도하지 않습니다. 내 간단한 JPanel 그림을 GLCanvas 구성 요소 위에 표시하는 데 놓친 분명한 방법이 있습니까? 모든
이 가능한 것 레이어 패널을 따라 자식 패널의 크기를 조정하려면? 내 생각에 LP의 repaint 메서드를 재정의하여 차원을 변경하면 구성 요소의 플래그를 설정할 수 있습니다.어쨌든, 내가 원했던 것입니다. 고마워요. – Moige
다른 질문이 있는데, 다른 주제로는 나을 수 없습니다. 맨 위로 JPanel의 칠해지지 않은 부분을 어떻게 볼 수 있습니까? 지금은 GLCanvas를 통해 패널의 왼쪽 상단 만 그리려고 할 때 [http://imgur.com/a/7m65O](http://imgur.com/a/7m65O)와 같은 것을 얻을 수 있습니다. . 그것은 좋지만 충분하지 않습니다. (편집 : 그것은 setOpaque (false); with panel instanciation) – Moige
크기를 조정할 때'ComponentListener'를 사용하고'componentResized'에서 자식 패널의 크기를 조정할 수 있습니다. 'paintComponent'를 오버라이드하고'super.paintComponent'를 호출하지 않고 색상이있는 패널을 지우지 않는 투명성 문제에 대해서는 그 문제가 없어야합니다. – Vallentin