Java の単純なペイント パッドに問題があります。クリア ボタンを再描画する際の問題。配列はクリアされていますが、再描画されていません。誰でも私の問題を見つけることができますか、またはこのコードのクリアボタンを生成する別の方法はありますか?
public class DrawingPanel extends JPanel {
private double x1=0;
private double x2=0;
private double y1=0;
private double y2=0;
private ArrayList<Shape> myArr = new ArrayList<Shape>();
//private ArrayList<Shape> clearMyArr = new ArrayList<Shape>();
ButtonPanel buttonPress;
public void paintComponent(Graphics g)
{
for (Shape i : myArr)
{
Graphics2D g2d = (Graphics2D)g;
g2d.draw(i);
}
/*for (Shape i : clearMyArr)
{
Graphics2D g2d = (Graphics2D)g;
g2d.draw(i);
} */
}
//inner class
class Listener1 extends MouseAdapter
{
public void mousePressed(MouseEvent e)
{
x1=e.getX();
y1=e.getY();
System.out.println("Mouse Pressed");
}
public void mouseReleased(MouseEvent e)
{
x2=e.getX();
y2=e.getY();
Shape shape = null;
if (buttonPress.buttonType.equals("Rectangle"))
{
// Rectangles cannot have a zero width or height
if (x1 != x2 || y1 != y2)
{
double width = Math.abs(x1 -x2);
double height = Math.abs(y1-y2);
shape = new Rectangle2D.Double(Math.min(x1,x2),Math.min(y1,y2), width, height);
}
}
if (buttonPress.buttonType.equals("Eclipse"))
{
double width = Math.abs(x1 -x2);
double height = Math.abs(y1-y2);
shape = new Ellipse2D.Double(Math.min(x1,x2),Math.min(y1,y2), width, height);;
}
if (buttonPress.buttonType.equals("Lines"))
{
shape = new Line2D.Double(x1, y1, x2, y2);
}
if (buttonPress.buttonType.equals("Clear"))
{
for( int i = 0;i <= myArr.size(); i++ )
{
System.out.println("ArrayList Size :"+myArr.size());
myArr.clear(); // clear all elements from arraylist
//clearMyArr.addAll(myArr);
System.out.println("ArrayList Size :"+myArr.size());
//myArr.removeAll();
revalidate();
repaint();
}
}
if (shape != null)
{
myArr.add(shape);
}
repaint();
}
}
//end of inner class
public DrawingPanel(ButtonPanel reference)
{
buttonPress = reference;
setBorder(BorderFactory.createLineBorder(Color.black,4));
addMouseListener(new Listener1());
}
}