我想要重叠两幅图像。为此,我使用JLabel并为其设置一个ImageIcon。我还有一个JPanel,它使用包含我的图像的网格布局(就像一个基于瓷砖的地图)。到目前为止,没有问题,而且效果很好。
我遇到的问题是,当我试图重叠两幅图像时。为此,我尝试在网格布局中使用JLayeredPane,并将两个图像(JLabel)放在不同的级别。此方法抛出此异常:
线程“AWT 0”java.lang.IllegalArgumentException中的异常:比较方法违反了它的一般约定!
我做了一些研究,并试图降级到jdk-6而不是7,因为在jdk-7中,它似乎不能正常工作。这个异常现在已经消失了,但是屏幕上没有画任何东西。
然后,我创建了一个扩展JComponent的类,并重写了paintComponent()方法,从而尝试了一个新方法。我的类包含图像的arrayList (JLabel),在paintComponent方法中,我遍历arrayList并使用自己类的Graphics对象调用每个标签的paintComponent方法。也会引发同样的异常。
下面是一个示例我的paintComponent方法:
@Override
public void paintComponent(Graphics g) {
for(JLabel label : this.images) {
label.paintComponents(g);
}
}发布于 2012-09-07 21:59:21
你可以用
JXLayer (Java6)然后,您可以(例如)移动或动画的图标/ ImageIcons放置在JLabel
发布于 2012-09-07 22:03:12
如果过脊paint或paintComponent是一个选项,那么我建议您使用Graphics或Graphics2d API来绘制图像:
g.drawImage();它为您的需要提供了更多的灵活性。
https://stackoverflow.com/questions/12325903
复制相似问题