【发布时间】:2013-10-29 07:06:20
【问题描述】:
所以我正在开发一个结合使用 swing 组件和 Graphics2D 的 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);
}
}
【问题讨论】:
-
由于您的问题涉及在 GUI 上绘图,我建议 1) 发布 sscce,而不是我们无法编译或运行的代码 sn-p,以及 2) 发布您的图片'正在得到你想要的照片。
-
要么使用
JLayeredPane之类的东西将组件相互层叠,要么使用框架玻璃窗格... -
还可以考虑使用 JLayer 作为“装饰”您的 JPanel 的一种方式。我以前用过这个图形效果很好。
-
如果 AbstractGameView 是 JPanel 的后代,您的paintComponent 需要在进行任何绘图之前调用
super.paintComponent(g)。请参阅Painting in AWT and Swing,尤其是关于 Swing 绘制方法的部分。
标签: java swing graphics2d