# Linien zeichnen und wieder löschen



## TZP (1. Mai 2007)

Moinz.
Ich bastel mir gerade ein Programm zurecht, was mich Linien zeichnen lässt und mit einem Button sollen alle wieder verschwinden. Zeichnen funzt soweit aber ich krieg das mit dem Lösch-button in Zeile 99 nich hin, weil ich nicht weiß, wie ich es richtig implementieren muss.


```
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Container;
import java.awt.Graphics;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;

public class Linienzug {
	public static void main(String[] args){
	
		JFrame meinFrame = new JFrame("Zeichenpanel");
		Container meinConti = meinFrame.getContentPane();
		meinConti.setLayout(new BorderLayout());
		meinConti.add(new Zeichenpanel(), BorderLayout.CENTER);
		meinFrame.setSize(900, 450);
		meinFrame.setVisible(true);
		meinFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		
	}
}

class Zeichenpanel extends JPanel {
	
	private JPanel zeichnung;
	private JPanel zeichenButtons;
	
	public Zeichenpanel(){
		
	//	zeichnung = new JPanel();
	//	zeichenButtons = new JPanel();
		
	//	zeichnung.add(new LinieZeichnen());
		
		setLayout(new BorderLayout());
		add(new LinienZeichnen(), BorderLayout.CENTER);//, BorderLayout.NORTH);
		add(new deleteButton(),BorderLayout.WEST);
	//	add(zeichenButtons, BorderLayout.CENTER);
		
	}
}

class LinienZeichnen extends JPanel{
	
	public int[] punkteArray;
	public int zaehler;
	public int index;
	
	public LinienZeichnen(){
		zaehler = 0;
		index = 0;
		punkteArray = new int [200];
		setBackground(Color.WHITE);
		addMouseListener(new meinMML());
		add(new deleteButton());
	}
		class meinMML extends MouseAdapter {
		    
		    public void mouseClicked(MouseEvent erg) {
		    	
		    	punkteArray[index]=erg.getX();
		    	punkteArray[index+1]=erg.getY();
		    	zaehler++;
		    	index+=2;
		    	repaint();
		    }
		}
	
	public void paintComponent(Graphics g){
		super.paintComponent(g);
		
		if( zaehler != 0 && zaehler %2 == 0){
			for(int allePunkte = 0; allePunkte< punkteArray.length; allePunkte+=4){
				g.setColor(Color.RED);
				g.drawLine(punkteArray[allePunkte], punkteArray[allePunkte+1], punkteArray[allePunkte+2], punkteArray[allePunkte+3]);
				
			}
		}
	}
}

class deleteButton extends JButton{
	
	public deleteButton (){

		addActionListener ((ActionListener) new Listener1 ());
		setText("Delete");
	}

	class Listener1 implements ActionListener{
		public void actionPerformed (ActionEvent e){
	
                                // Und nu?

		}
	}
}
```

Hat jemand n Anreiz? Mein Dank ist gewiss! 

-bedank-
TZP


----------



## Wildcard (1. Mai 2007)

Statt des Arrays solltest du wohl eine List (zb LinkedList) verwenden.
Wenn der Button gedrückt wird rifst du dann list.clear() auf.


----------



## TZP (1. Mai 2007)

Gibt es noch ne Alternative dazu? Ich würde gern das Array behalten, wenn es geht. Hab in der Klasse deleteButton ein Objekt von LinienZeichnen erzeugt und wollte es so ansprechen. Kompiliert er ohne Probleme aber das Array blieb immer leer.


----------



## Wildcard (1. Mai 2007)

Du kannst auch weiterhin ein Array verwenden.
Analog musst du dann das Array leeren.


----------



## TZP (1. Mai 2007)

Das hab ich mir auch gedacht und dann das hier gebastelt


```
class deleteButton extends JButton{
	
	public deleteButton (){

		addActionListener ((ActionListener) new Listener1 ());
		setText("Delete");
	}

	class Listener1 implements ActionListener{
		public void actionPerformed (ActionEvent e){
			
			int[] leeresArray = new int[200];
			LinienZeichnen abc = new LinienZeichnen();
			abc.punkteArray = leeresArray;
			abc.index = 0;
			abc.zaehler = 0;
		}
	}
}
```

Aber wenn ich mir die Werte vorher und nacher s.o.p. lasse, sind sie immer 0. Alles ist auf public gesetzt aber er scheint dennoch nix in abc.index usw einzutragen.


----------



## Wildcard (1. Mai 2007)

Es bringt dir nichts *irgendein* 'LinienZeichenen' Objekt zu manipulieren, du musst das 'LinienZeichnen' Objekt verändern das in deinem Frame liegt.
Das geht über eine Referenz auf selbiges.


----------



## TZP (1. Mai 2007)

Hmhm...na gut...wenn ich das rausgeknobelt hab, sag ich Bescheid..


----------



## TZP (1. Mai 2007)

Ich werd mich gewiss gleich übelst blamieren aber ich krieg´s nich raus. Wie unangenehm. ;-/ Vielleicht ist es auch n Verständnisproblem, weil ich nich so ganz kapiere, was das int[] mit dem Frame zu tun hat.


----------



## Wildcard (1. Mai 2007)

Gib deinem Button im Konstruktor eine Referenz auf das LinienZeichnen Objekt mit.


----------



## TZP (6. Mai 2007)

Ah...jetzt hat es -klick- gemacht. Funzt! 
-bedank-
TZP


----------

