私は図を使ってJLabel
の行をペイントするプログラムをやっています。それらの行を作成した後、私が描いた行を削除したいと思います。たとえば、削除したいGUIで描かれた行を削除するには?
d.drawLine(label.getGraphics(), 120,215,330,120);
私は図を使ってJLabel
の行をペイントするプログラムをやっています。それらの行を作成した後、私が描いた行を削除したいと思います。たとえば、削除したいGUIで描かれた行を削除するには?
d.drawLine(label.getGraphics(), 120,215,330,120);
GUIで何も削除することはできません。あなたができることは、そこにあるものの上に書いておくことです。黒い線を白い背景に戻したい場合は、上に白い線を書くことができます。
描画はそのようには機能しません。いったん線を描くと、他のすべてのピクセルと機能的に異なるピクセルの束のように、線として存在しなくなります。しかし可能な回避策があります:背景色(例えば白)を使用して線を再描画します。
Line
クラスを作成し、それらのリストを保持します。行を削除する場合は、リストから削除し、すべての行を消去して、リスト内のすべての行を再描画します。+1、描画する必要のある行のリスト。 – camickr
あなたは、キャンバスタイプの実装(Java)とグラフィックスDOMツリータイプの実装(ブラウザのSVGなど)を混同していると思います。
DOMの実装では、要素を削除して、アプリケーションにダーティ領域を認識させ、そのダーティ領域(通常は四角形)内にあるセクションを持つ要素を再描画することができます。
Javaのようなキャンバスの実装では、グラフィックスオブジェクトに直接ペイントし、一度ペイントすると、キャンバスはペイントした場所を認識しません。一般に、汚染されたものを修復し、影響を受けた領域でコンポーネントを再描画するためのメカニズムを実装する必要があります。そのような機構は、scene graphとして知られている。
label.revalidate();
label.repaint();
...
public void paintComponent(Graphics g) { do not draw lines but the rest }
描画は、イベントベースの起こるので、あなたは、paintComponentや塗料にあなたの描画コードを置きます。 再描画がトリガされる可能性があります。再塗装で。
私たちにチャンスを与えてください:あなたの線を描くためのコードと、これらの線を削除しようとしているコードを提供してください。 – Erik
getGraphics()を使用してペイントしないでください。それは一時的なものです。カスタムペイントは、paintComponent()メソッドで実行されます。 – camickr