在java中重叠图像

时间:2012-09-07 21:54:49

标签: java image swing

我想重叠两张图片。为此,我使用JLabel并为其设置ImageIcon。我还有一个JPanel,使用包含我的图像的gridlayout(如基于图块的地图)。到目前为止,没问题,效果很好。

我遇到的问题是,当我试图重叠两个图像时。为此,我尝试在gridlayout中使用JLayeredPane并将两个图像(JLabel)放在不同的级别中。这个方法抛出了这个例外:

  

线程中的异常“AWT-EventQueue-0”java.lang.IllegalArgumentException:比较方法违反了其一般合同!

我做了一些研究并试图降级到jdk-6而不是7,因为看起来在jdk-7中它不能正常工作。该异常现已消失,但屏幕上没有任何内容。

然后我通过创建一个扩展JComponent的类尝试了一个新方法,并重写了paintComponent()方法。我的类包含我的图像的数组列表(JLabel),在paintComponent方法中,我遍历arrayList并使用我自己的类的Graphics对象调用每个标签的paintComponent方法。提出了同样的例外。

以下是我的paintComponent方法示例:

@Override
public void paintComponent(Graphics g) {
    for(JLabel label : this.images) {
        label.paintComponents(g);
    }
}

2 个答案:

答案 0 :(得分:4)

你可以使用

  1. JLayer (Java7)基于JXLayer (Java6)

  2. GlassPane

  3. OverlayLayout

  4. JLayeredPane

  5. 然后您可以(例如)使用放置在Icons / ImageIcons

    中的JLabel进行移动或动画制作

答案 1 :(得分:2)

如果选择覆盖paintpaintComponent,我建议您使用GraphicsGraphics2d API来绘制图片:

g.drawImage();

它为您的需求提供了更大的灵活性。