1

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);
    }
}
4

2 に答える 2

4

あなたが使用することができます

  1. JLayer(Java7)ベースJXLayer (Java6)

  2. GlassPane

  3. OverlayLayout

  4. JLayeredPane

次に、(たとえば)JLabelに配置されたアイコン/ImageIconsを使用して移動またはアニメーション化できます

于 2012-09-07T21:59:21.173 に答える
2

オーバーライドするpaintpaintComponentオプションである場合は、画像の描画にGraphicsまたはAPIを使用することをお勧めします。Graphics2d

g.drawImage();

それはあなたが必要とするものに対してはるかに多くの柔軟性を提供します。

于 2012-09-07T22:03:12.220 に答える