2011-12-18 26 views
0

次のコードを使用して、Javaアプレットにラベルを追加しました。私は(mylabelという)を追加呼び出すとJlabelをJavaアプレットに追加

ImageIcon icon = new ImageIcon(s); 
JLabel myLabel = new JLabel(icon); 
add(myLabel); 

、画面がクリアされ、私は前に描かれているすべてのものがなくなっている:これらの行は、塗料(グラフィックスグラム)メソッド内にあります。 なぜですか?

+0

使用されるレイアウトは何ですか? – Kowser

+0

レイアウトはフリーですデザイン – user1077980

+0

別の種類のレイアウトを使用する必要がありますか? – user1077980

答えて

4

これらの線は、塗料(グラフィックG)メソッド内にある:あなたがpaint()メソッド内のGUIにコンポーネントを追加することはありません

また、カスタムペインティングが必要な場合は、paint()ではなくpaintComponent()をオーバーライドする必要があります。

Swing tutorialを読むことをお勧めします。カスタムの実行のお手伝いをすることができます

絵画ラベル

  • の使用方法

    1. :上のセクションがあります。

      Using Layout Managersにもセクトンがあります。私は何を自由にデザインするのかはわかりませんが、あなたがそれを使用すべきかどうかは疑問です。

  • +0

    +1 FreeLayoutについて – mKorbel

    +0

    +1 'paint'メソッドではない 'paintComponent'を使用する場合 – GETah

    +0

    * "カスタムペイントが必要な場合は、paint()ではなくpaintComponent()をオーバーライドする必要があります。 OPは、 'paintComponent()'メソッドを持っているクラス(つまり 'Applet' **や**' JApplet'ではなく)を使用しているに違いありません! –

    0

    ただ追加して@camickrと言っています。

    paintメソッドではコンポーネントを絶対に追加しないでください。コンポーネントがペイントされるたびに、次のコードは、

    ImageIcon icon = new ImageIcon(s); 
    JLabel myLabel = new JLabel(icon); 
    add(myLabel); 
    

    あなたは新しいJLabelのにコンポーネントがペイントされるたびに追加されているとして、あなたはいくつかの点でメモリ不足になり、100%確信している。この方法で

    を実行します。親コンポーネントが作成されたら、ラベルを追加する必要があります。 アプリケーションでアニメーションを作成する場合は、 paintComponentメソッドからアクセスできる Listの中にこれらのイメージをロードして配置することをお勧めします。

    List<JLabel> images = new ArrayList<JLabel>(); 
    // populate images when the application needs them... 
    // ... 
    @Override 
    public void paintComponent(Graphics g){ 
        // get the image your want to draw 
        JLabel imageToDraw = images.get(imageIndex); 
    } 
    
    関連する問題