# swing/awt Panel punkte malen



## kenux (7. Feb 2010)

Hallo,

ich habe mal zum Üben ein kleines Programm geschrieben.
Das Programm hat zwei Fehler, und zwar:

wie kann ich den Punkt, der beim Programmstart erscheint wegmachen, bzw. dass der schwarze Punkt gar nicht erscheint beim Programmstart?

und zweitens alle Punkte sollen bestehen bleiben und nicht bei jedem Mausklick neu gemalt werden. Höchswahrscheinlich hat es was mit diesem "repaint()" (Zeile 58) zu tun, doch wenn ich dies weglasse werden überhaupt keine Punkte mehr gemalt.
hier der Code:

```
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

public class Maus extends JFrame {
	
	Panel panel;
	
	public Maus()
	{
		super("Test");
		setResizable(false);
		setDefaultCloseOperation(EXIT_ON_CLOSE);
		
		panel = new Panel();
		setLayout(new BorderLayout());
		add(panel, BorderLayout.CENTER);
		
		pack();
		setVisible(true);
	}
	
	public static void main(String[] args) {
		
		new Maus();
	}
}

class Panel extends JPanel implements MouseListener {
	
	Color col;
	int x;
	int y;
	
	public Panel()
	{
		setBackground(Color.white);
		setPreferredSize(new Dimension(300, 200));
		addMouseListener(this);
	}
	
	public void paintComponent(Graphics g)
	{
		super.paintComponent(g);
		g.setColor(col);
		g.fillOval(x, y, 10, 10);
			
	}
	
	public void mousePressed(MouseEvent me) 
	{
		// Maustaste links
		if (me.getButton() == MouseEvent.BUTTON1) {
			
			col = Color.red;
			x = me.getX();
			y = me.getY();
			repaint();
		}
	}
	
	// Dummies
	public void mouseClicked(MouseEvent me) {}
	public void mouseEntered(MouseEvent me) {}
	public void mouseReleased(MouseEvent me) {}
	public void mouseExited(MouseEvent me) {}
}
```


----------



## SlaterB (8. Feb 2010)

am Anfang wird bei 0,0 gemalt, setzte die Startwerte für x,y doch auf -100, dann siehst du sicher nix mehr,

mit der folgenden Änderung ist das aber eh vorbei:
um die Punkte dauerhaft zu merken erzeuge jeweils Objekte, notfalls ein kurzes int[], und speichere sie in einer Liste,
bei jeden paint male alle Punkte aus der Liste neu


----------



## kenux (8. Feb 2010)

SlaterB hat gesagt.:


> am Anfang wird bei 0,0 gemalt, setzte die Startwerte für x,y doch auf -100, dann siehst du sicher nix mehr,


Naja ne elegante Lösung würde anders aussehen...

das ist irgendwie total komisch, also wenn ich

```
setBackground(Color.white);
setPreferredSize(new Dimension(300, 200));
```
in den Konstruktor von der Klasse Maus reinschreibe und bei painComponent super.paintComponent(g) auskommentiere, dann klappt es.
anscheinend liegen da panels übereinander?! hat jemand ne Erklärung dafür?


----------



## SlaterB (8. Feb 2010)

bei mir klappt es nicht (der schwarze Punkt bleibt sichtbar) oder ich verstehe deine Anweisungen falsch, poste ein Testprogramm,

eleganter wäre ein boolean flag, das erst beim ersten Mausklick gesetzt wird, aber mit der Liste ist das Problem dann eh verschwunden


----------



## Quaxli (8. Feb 2010)

Bei mir bleibt der schwarze Punkte ebenfalls sichtbar.
Ansonsten hat SlaterB ja schon etliche Lösungsmöglichkeiten vorgeschlagen.


----------

