Also wie Clipping funktioniert ist mir klar. Wenn ich z.B.
schreibe, dann wird genau dass gemacht, was ich will. Nun habe ich aber eine eigene Klasse MyRectangle in der ich Rechtecke per MausClick auf meinem Panel erzeuge und die dann in einem Vektor(allrec) verwaltet werden.
und in meiner Klasse MyPanel hab ich dann in der paintComponent(Graphics g) u.a. folgendes stehen
Da es ja mit einem "normalen Rectangle" funktioniert, kann der Fehler ja nur bei meiner Klasse MyRectangle liegen. Ich habe MyRectangle von Shape erben lasse, damit ich überhaupt g2.clip(shape) machen konnte, dass ist vermutlich falsch...aber wie könnte ich es denn sonst machen? Oder mache ich einen grundsätzlichen Fehler?
Code:
Rectangle k=new Rectangle(20,20,200,200);
g2.clip(k);
g2.draw(k);
Code:
public class MyRectangle implements Shape{
//..........................
public MyRectangle(int x, int y, int width, int height, Color color,
boolean fill) {
//.....................
}
/**
*
* Zeichnet ein Rechteck
*/
public void paintComponent(Graphics g) {
Graphics2D g2 = (Graphics2D) g;
g2.setColor(color);
if (fill)
g2.fillRoundRect(x, y, width, height, arcWidth, arcHeight);
else
g2.drawRect(x, y, width, height);
}
Code:
// zeichnet alle Rechtecke
for (int i = 0; i < allrec.size(); i++) {
g2.clip(((MyRectangle) allrec.get(i))); //das funktioniert aber nicht, bekomme eine NullPointerException in der EventQueue
((MyRectangle) allrec.get(i)).paintComponent(g2);