repaint() Aufruf scheint ignoriert zu werden

Thor1302

Grünschnabel
Ich erstelle per

Code:
new Fenster()

ein neuens Fenster welches von JFrame abgeleitet ist. Darauf befindet sich ein JPanel.
Auf diesem möchte ich dann gerne Elemente in Form von JButtons anzeigen und diese mittels Linien verbinden. Die JButtons werden in einem anderen Objekt als static ArrayList "angeboten" (Im Folgenden Quellcode die Variable Knoten). Die Linien werden beim Zeichnen Ermittelt.

Nun habe ich folgendes Problem: Öffne ich das Fenster das erste mal, funktioniert Alles einwandfrei, schließe ich es und öffne es dann erneut, wird zunächst Alles korrekt dargestellt. Möchte ich jedoch neue Verbindungslinien erstellen werden diese nicht angezeigt (repaint wird ignoriert). Jede andere Aktion ruft repaint immer noch korrekt auf.

Das JPanel besitzt folgende Paint Methode:

Code:
    public void paint(Graphics g)
    {
    	g.setColor(Color.WHITE);
    	g.fillRect(0, 0, this.getSize().width, this.getSize().height);
    	g.setColor(Color.BLACK);
    	ArrayList<Knoten> nachf;
		for(int i=0;i<knoten.size();i++)
		{
			knoten.get(i).setBounds(knoten.get(i).getpos().x, knoten.get(i).getpos().y, 100, 50);
			this.add(knoten.get(i));
			knoten.get(i).repaint();
			nachf=knoten.get(i).getNachf();
			for(int j=0;j<nachf.size();j++)
			{
				g.drawLine(knoten.get(i).getLocation().x+100,knoten.get(i).getLocation().y+25,nachf.get(j).getLocation().x,nachf.get(j).getLocation().y+25);
			}
		}
    }

Kanten werden hinzugefügt in dem man einen Knoten anklickt und dann mit gedrückter maustaste zum Zielknoten fährt.

Code:
	public void mouseReleased(MouseEvent e) {
		if(e.getButton()==1)
		{
			zf.setKante((Knoten)e.getSource(),e.getPoint());
			zf.repaint();
		}
	}

Code:
    public void setKante(Knoten k, Point p)
    {
		for(int i=0;i<knoten.size();i++)
		{
			if(p.x+k.getpos().x>=knoten.get(i).getpos().x && p.x+k.getpos().x<=knoten.get(i).getpos().x+100 && p.y+k.getpos().y>=knoten.get(i).getpos().y && p.y+k.getpos().y<=knoten.get(i).getpos().y+50)
			{
				k.setNachf(knoten.get(i));
			}
		}
}
 
die Paint-Methode sollte nicht überschrieben werden, warum wieso und wieanders habe ich dir in der Javainsel verlinkt ;)

Womit du auch recht haben magst, was aber leider absolut nichts zur Problemlösung beiträgt


Edith hat das Problem gelöst. Man muss beim neu Öffnen des Fensters dem Listener natürlich auch sagen das er mit dem neuen Fenster arbeiten soll nicht mehr mit dem alten geschlossenen,
 
Zuletzt bearbeitet:
Zurück