私は、ウィンドウをクリックすることができる場所にポイントを配置するプログラムを作っています。ユーザーが再度クリックすると、ポイントは削除されます。プログラム上、クリックするたびに、「要素」と呼ばれる別のクラスの新しいインスタンスが作成されます。このインスタンスには、単一点の(X、Y)位置が含まれています。マウスクリックによるグラフィックポイントの切り替え
これを実現するには、JPanelを拡張してMouseListenerを実装しています。ポイントを描画するには、paint()メソッドをオーバーライドします。ユーザがクリックするたびに、MouseListenerのmouseReleased()メソッドがArrayListに追加されるか、ArrayListから削除され、paint()が呼び出され、画面がクリアされ、ArrayListが再描画されます。
私が抱えている問題は、クリックするとポイントが消えないということです。私はそれがpaint()やArrayListと何かを理解していないかどうかはわかりません。ここで
)が(私の塗料です:
public void paint(Graphics g)
{
// Clear screen
g.setColor(Color.WHITE);
g.fillRect(0, 0, getWidth(), getHeight());
// Display what elements will be drawn (for debugging)
System.out.println("About to draw the following elements:");
for (Element e : elements)
{
System.out.println("\t" + e);
}
// Draw Elements
g.setColor(Color.BLACK);
for(int i=0; i < elements.size(); i++)
{
g.fillOval(elements.get(i).x, elements.get(i).y, 10, 10);
}
}
そしてここでは、マウスクリックの方法である:
public void mouseReleased(MouseEvent e)
{
// Rounds to the nearest grid space (spacing is currently 20px)
int roundX = (int) ((float)(Math.round(e.getX()/GRID_SPACING)) * GRID_SPACING);
int roundY = (int) ((float)(Math.round(e.getY()/GRID_SPACING)) * GRID_SPACING);
System.out.println("Clicked (" + roundX + ", " + roundY + ")");
// Go through each element...
for (int i=0; i < elements.size(); i++)
{
// if an element exists at the coordinates clicked,
if (elements.get(i).getX() == roundX && elements.get(i).getY() == roundY)
{
// remove it from the elements list
elements.remove(i);
i--;
System.out.println("\tElement exists at (" + roundX + ", " + roundY + "). Removing it.");
}
}
elements.add(new Element(roundX, roundY));
repaint();
}
次のようにこれの出力は次のとおりです。
About to draw the following elements: (None)
Clicked (140, 100)
About to draw the following elements:
This element's coordinates are (140, 100)
Clicked (160, 100)
About to draw the following elements:
This element's coordinates are (140, 100)
This element's coordinates are (160, 100)
Clicked (140, 100)
Element exists at (140, 100). Removing it.
About to draw the following elements:
This element's coordinates are (160, 100)
This element's coordinates are (140, 100)
'mouseReleased'メソッドでは、単に要素を削除したとしても、常に' add'を行います。そのため、同じ場所に別の要素を追加しただけで、それを削除しても描画されます – Robin
すぐに役立つように、[SSCCE](http://sscce.org/)を投稿してください。 –