【问题标题】:java - paint on top of nested componentsjava - 在嵌套组件上绘制
【发布时间】: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


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-31
    • 1970-01-01
    • 1970-01-01
    • 2015-10-06
    • 1970-01-01
    • 2014-09-18
    相关资源
    最近更新 更多