我想重叠两张图片。为此,我使用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);
}
}
答案 0 :(得分:4)
你可以使用
JLayer (Java7)基于JXLayer (Java6)
然后您可以(例如)使用放置在Icons / ImageIcons
中的JLabel进行移动或动画制作答案 1 :(得分:2)
如果选择覆盖paint
或paintComponent
,我建议您使用Graphics
或Graphics2d
API来绘制图片:
g.drawImage();
它为您的需求提供了更大的灵活性。