2011-12-06 6 views
2

私は図を使ってJLabelの行をペイントするプログラムをやっています。それらの行を作成した後、私が描いた行を削除したいと思います。たとえば、削除したいGUIで描かれた行を削除するには?

d.drawLine(label.getGraphics(), 120,215,330,120); 
+2

私たちにチャンスを与えてください:あなたの線を描くためのコードと、これらの線を削除しようとしているコードを提供してください。 – Erik

+2

getGraphics()を使用してペイントしないでください。それは一時的なものです。カスタムペイントは、paintComponent()メソッドで実行されます。 – camickr

答えて

2

GUIで何も削除することはできません。あなたができることは、そこにあるものの上に書いておくことです。黒い線を白い背景に戻したい場合は、上に白い線を書くことができます。

4

描画はそのようには機能しません。いったん線を描くと、他のすべてのピクセルと機能的に異なるピクセルの束のように、線として存在しなくなります。しかし可能な回避策があります:背景色(例えば白)を使用して線を再描画します。

  1. これは、行が何もカバーしていない場合にのみ機能します。
  2. Lineクラスを作成し、それらのリストを保持します。行を削除する場合は、リストから削除し、すべての行を消去して、リスト内のすべての行を再描画します。
+0

+1、描画する必要のある行のリスト。 – camickr

2

あなたは、キャンバスタイプの実装(Java)とグラフィックスDOMツリータイプの実装(ブラウザのSVGなど)を混同していると思います。

DOMの実装では、要素を削除して、アプリケーションにダーティ領域を認識させ、そのダーティ領域(通常は四角形)内にあるセクションを持つ要素を再描画することができます。

Javaのようなキャンバスの実装では、グラフィックスオブジェクトに直接ペイントし、一度ペイントすると、キャンバスはペイントした場所を認識しません。一般に、汚染されたものを修復し、影響を受けた領域でコンポーネントを再描画するためのメカニズムを実装する必要があります。そのような機構は、scene graphとして知られている。

1
label.revalidate(); 
label.repaint(); 

...

public void paintComponent(Graphics g) { do not draw lines but the rest } 

描画は、イベントベースの起こるので、あなたは、paintComponentや塗料にあなたの描画コードを置きます。 再描画がトリガされる可能性があります。再塗装で。

関連する問題