2011-09-14 5 views
5

私は、JPanelでグラフィックをペイントするシンプルなクラスを持っています。これは私のクラスである:私はこれを別のクラスをインスタンス化していること私のクラスでpaintComponent()メソッドを呼び出すのは誰ですか?

import java.awt.Color; 
import java.awt.Dimension; 
import java.awt.Graphics; 
import javax.swing.JPanel; 

class Drawing_panel extends JPanel { 
    public void paintComponent(Graphics g) { 
    super.paintComponent(g);  
    this.setBackground(Color.white); 
    g.setColor(Color.red); 
    g.fillRect(150, 80, 20, 20); 
} 

public Dimension getPreferredSize(){ 
    return new Dimension(500,500); 
} 

}

1:

Drawing_panel dp = new Drawing_panel(); 

Drawing_panelクラスおよび/またはいずれかの明示的な呼び出しにはコンストラクタがありませんpaintComponent()またはgetPreferredSize()の方法。私は、メソッドが親のJPanelコンストラクタで呼び出されていると仮定しますが、私はそこに呼び出しを見ませんでした。

+0

Javaの命名規則を学んでください。 – kleopatra

答えて

6

paintComponentは、いくつかの場所から呼び出されます。おそらくJComponent.paintからの呼び出しがあなたが探しているものです。

paintComponentは、から呼び出されていないであることに注意してください。 paintComponentは、「オンデマンド」と呼ばれ、コンポーネントが再描画する必要があるとシステムが判断したときです。 (コンポーネントがサイズ変更されたときや、ウィンドウが最小化された状態から復元されたときなど)クリアするには:コンポーネントは塗装されずに使用され、使用され、必要なときに塗装されます。

このペインティングコールのチェーン全体は、Swingといわゆるイベントディスパッチスレッドによって全面的に処理されるため、気にする必要はありません。

3

JComponentまたはJPanelをサブクラス化してグラフィックを描画する場合は、paintComponent()メソッドをオーバーライドします。このメソッドは、ユーザーが再描画が必要なユーザーインターフェイスで何かをしたか、またはコードが明示的に再描画を要求したために呼び出されます。 可視になると自動的に呼び出されます ウィンドウが可視(覆い隠されたり解除されたり)されたりサイズが変更されたりすると、 "システム"は再描画する必要がある画面のすべての領域に対してpaintComponent()メソッドを自動的に呼び出します。

+0

@Jonas - 特にrepaint()メソッドの使用に関する洞察力のある応答に感謝します。それは便利です。 – jamesTheProgrammer

関連する問題