1

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

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

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

我做了一些研究并试图降级到 jdk-6 而不是 7,因为在 jdk-7 中它似乎不能很好地工作。异常现在已消失,但屏幕上没有绘制任何内容。

然后我通过创建一个扩展 JComponent 的类尝试了一种新方法,并覆盖了 paintComponent() 方法。我的类包含我的图像(JLabel)的arrayList,在paintComponent 方法中,我遍历arrayList 并使用我自己类的Graphics 对象调用每个标签的paintComponent 方法。引发了相同的异常。

这是我的 paintComponent 方法的示例:

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

2 回答 2

4

你可以使用

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

  2. 玻璃板

  3. 叠加布局

  4. JLayeredPane

然后您可以(例如)使用放置在JLabel中的Icons / ImageIcons移动或动画

于 2012-09-07T21:59:21.173 回答
2

如果覆盖paintorpaintComponent是一个选项,那么我建议您使用Graphicsor Graphics2dAPIs 来绘制图像:

g.drawImage();

它为您的需要提供了更多的灵活性。

于 2012-09-07T22:03:12.220 回答