2012-02-07 4 views
1

私はこのプログラムをGUIで作っています。私はSwing/SWTで何が起こっているのか分かりませんでした。Javaはイベントからのイメージを追加します

とにかく、私はボタンをクリックしたときにcontentPaneに画像を追加するので、私はJComponentとして持っていなければ動作しません。後で他のもの(ボタン、JLabelなど)を作成し、このJComponentをコンテンツビュー(これは意味をなさない)に設定します。また、JPanelを拡張して元のコンテンツをクリアすることも試みましたそれらを新しいJPanelに再追加します。これを行うと、私のJLabelのテキストが奇妙な形で再現され、もっと単純で効率的な方法があることが分かります。

class ShowImage extends JComponent{ 

    public ShowImage(){ 
     super(); 
     monkey = Toolkit.getDefaultToolkit().getImage(("D:/monkey.png")); 

    } 
public void paintComponent(Graphics g){ 
    g.drawImage(monkey, 20, 100, null); 
    repaint(); 
} 
} 

答えて

4
  1. repaintsuper.paintComponent起動
  2. paintComponent内部を起動した後、画像

を描き、レイアウトマネージャに応じて、このコンポーネントは(0, 0)の好適なサイズを有することになる、としませんしたがって、表示されません。

詳細については、2D Graphicsを参照してください。

編集 - レイアウトマネージャは、再びそのコンポーネントをレイアウトし、任意の視覚的なアーティファクトを除去しますので、動的にコンポーネントを追加すると、コンテナを再検証するために、あなたを強制的に再描画要求を発行します 注意。また、画像の詳細については、Working with Imagesを参照してください。

とにかく、最も簡単な方法は、画像をJLabelインスタンスのアイコンとして設定し、それをコンテナに追加することです。実際にここでホイールを再構築する必要はありません。

+0

ありがとう、私はImageIconを行い、JLabelとして使用しました。 – snotyak

2
g.drawImage(monkey, 20, 100, this); 

..元のコードの問題を修正している可能性があります。

  • 画像を非同期でロードしています。 (とは対照的にToolkit.getImage())。
  • 「点滅した」ImageObserverに絵を描く。 JComponentImageObserverを実装しています。イメージが完全に読み込まれると(その前の数ポイントだけでなく)、オブザーバに通知され、repaint()がトリガされます。
関連する問題