我想重叠两个图像。为此,我使用 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);
}
}