2枚の画像を重ねたい。そのために、JLabelを使用してImageIconを設定します。また、画像を含むグリッドレイアウトを使用するJPanelもあります(タイルベースのマップなど)。これまでのところ、問題はなく、うまく機能しています。
私が遭遇する問題は、2つの画像を重ね合わせようとしたときです。そのために、グリッドレイアウトでJLayeredPaneを試して、2つの画像(JLabel)を異なるレベルに配置しました。このメソッドは私にこの例外をスローします:
スレッド「AWT-EventQueue-0」の例外java.lang.IllegalArgumentException:比較メソッドがその一般的なコントラクトに違反しています!
私はいくつかの調査を行い、7ではなくjdk-6にダウングレードしようとしました。これは、jdk-7ではうまく機能しないように見えるためです。例外はなくなりましたが、画面には何も表示されません。
次に、JComponentを拡張するクラスを作成して新しいメソッドを試し、paintComponent()メソッドをオーバーライドしました。私のクラスには画像のarrayList(JLabel)が含まれており、paintComponentメソッドでは、arrayListを反復処理し、各ラベルのpaintComponentメソッドを自分のクラスのGraphicsオブジェクトで呼び出します。同じ例外が発生します。
これが私のpaintComponentメソッドのサンプルです:
@Override
public void paintComponent(Graphics g) {
for(JLabel label : this.images) {
label.paintComponents(g);
}
}