2013-10-20 17 views
0

所以我正在使用swing组件和Graphics2D的Java游戏。java - 在嵌套组件上绘画

我有一个AbstractLevelView类,它包含了游戏里面的所有元素。 此LevelView组件使用BorderLayout在左侧显示一个上下文栏,并在中间显示一个包含游戏网格的JPanel。

我的上下文栏和gridPanel一切正常,但我想要做的是直接向AbstractLevelView绘制“消息”,但我无法获得任何绘画的工作。这大概是因为嵌套组件造成无处可绘。

我已经包含了我的AbstractLevelView的缩写版本,以及测试paintComponent方法。我曾尝试使用paintComponents,但它甚至没有被调用。

有谁知道我能做什么,所以我可以在我的嵌套组件上绘画?

public abstract class AbstractLevelView extends AbstractGameView { 

    private JPanel gridPanel; 
    private ContextBar contextBar; 

    public AbstractLevelView(){ 

     gridPanel = new JPanel(); 
     add(gridPanel, BorderLayout.CENTER); 

     contextBar = new ContextBar(); 
     add(contextBar, BorderLayout.WEST); 
    } 

    @Override 
public void paintComponent(Graphics g){ 
    System.out.println("foo"); 
    Image img = ImageManager.getImage("img.jpg"); 
    g.drawImage(img, 0, 0, 300, 300, this); 
} 
} 
+2

由于您的问题涉及到一个GUI描绘,我建议1)发布的[SSCCE(http://sscce.org),而不是一个代码片段,我们不能编译也不运行,2 )发布你得到的图片和你想要的图片。 –

+2

或者使用类似'JLayeredPane'的东西来层叠彼此顶部的组件或框架玻璃窗格...... – MadProgrammer

+1

也可以考虑使用JLayer作为“装饰”您的JPanel的一种方式。我以前用过这个图形来达到很好的效果。 –

回答

0

谢谢MadProgrammer,提示JLayeredPanes。我曾尝试在游戏的早期阶段使用这些游戏,但现在我对它们有了更多的了解,我已经成功实施了一个解决方案。

enter image description here