# Java Malprogramm



## Kondition0 (5. Jun 2009)

Hallo liebe Community,

ich bin neu hier, und genauso neu auch im Javaprogrammieren^^.
Wir müssen für die Schule ein Programm fertigen, und ich habe vor, ein Malprogramm zu schreiben, da ich das in der Theorie/Struktogramm sehr einfach fand.

Jedoch harperts bei der Umsetzung.

Ersteinmal habe ich ein Fenster gemacht, und dort wo man hinklickt, soll ein Punkt gezeichnet werden (weil mehrere Punkte ja einen Strich ergeben, logisch)
Jedoch zeichnet er das ganze Fenster wegen repaint() neu...

Also meine Erste Frage: Wie kann ich das umgehen?


2. Folgender Code ist nun gegeben. Einfach nur 4 funktionslose Buttons dazugemacht.
Nun funktioniert aber das Punkte-Zeichnen nicht mehr...

```
//
// Freihand zeichnen
//

import java.awt.*;
import java.awt.event.*;



//Interface
public class Malprogramm 
extends Frame 
implements MouseListener, Runnable
{
	
int x=0;
int y=0;

boolean grün=false , blau=false, rot = false, gelb = false;
Button b_grün,      b_blau     ,b_rot       , b_gelb      ;

    public static void main(String[]args)
    {
    	Malprogramm	wgh =new Malprogramm ();
        WindowListener wl = new WindowAdapter() {
            public void windowClosing(WindowEvent e) {
                System.exit(0);
            }
        };
        wgh.addWindowListener(wl);
    	wgh.setSize(500,500);
    	wgh.setBackground(Color.gray);
    	wgh.addMouseListener(wgh);
    	wgh.setVisible(true);
    	wgh.start();
    }
    
    public Malprogramm()
    {
    	super ("Mein Malprogramm");
    	

        Panel p1 = new Panel(new FlowLayout());
		FlowLayout layout1 = new FlowLayout();
        p1.setLayout(layout1);
        


		
    	//Grüner Button
		b_grün= new Button("grün");
		b_grün.setBackground (Color.green);

		
    	//Grüner Button
		b_gelb= new Button("gelb");
		b_gelb.setBackground (Color.yellow);

		
    	//Grüner Button
		b_blau= new Button("blau");
		b_blau.setBackground (Color.blue);

		
    	//Grüner Button
		b_rot= new Button("rot");
		b_rot.setBackground (Color.red);

		p1.add(b_grün);
		p1.add(b_gelb);
		p1.add(b_blau);
		p1.add(b_rot);

		

		
        add(p1);

	



    }
    
	public void start(){
		Thread th = new Thread(this);
		th.start();
	}
	
	public void run(){
		
		while (true){	
			repaint();
			try {
				Thread.sleep (80);
			}
			catch (InterruptedException ex){}
		}
	}
   
    //Tastendruck und Aktion
    public void mousePressed(MouseEvent event)
    {
    	x = event.getX();
    	y = event.getY();
    	System.out.println(x + " " + y);

    }
    public void mouseReleased(MouseEvent event){}

    public void mouseClicked(MouseEvent event){}
    
    public void mouseEntered(MouseEvent e) {}

    public void mouseExited(MouseEvent e) {}
    
    
    public void paint(Graphics grafik)
    {

  		grafik.setColor(new Color(226, 0, 122));
  		grafik.fillOval(x, y, 20, 20);
  		
  		
    }



}
```

wo liegen die fehler?

Wäre nett wenn ihr mir helfen könntet, aber bitte nicht im großen Fachjargon^^. Ich habe versucht, alles selbstständig hinzubekommen und auch fertige Malprogramme angeschaut, aber da blick ich nich durch.

Liebe Grüße,
Jonas


----------



## Civilazi (5. Jun 2009)

Lies dir mal den Zeichnen in Swing Thread im AWT/Swing ... - Forum durch, dann klappt schonmal das Zeichnen. 
Dann wirst du dir für dein Programm noch merken müssen, wo der User überall mit welcher Farbe hingeklickt hat und das jedesmal neu zeichnen. Also überleg dir eine geeignete Datenstruktur, die "Malereignisse" speichert. Die kannst du dann z.B. in eine Liste packen und gehst dort immer alles durch und zeichnest alles, wenn neugezeichnet wird. Dann kannst du auch leicht undo / redo implementieren.


----------



## Developer_X (5. Jun 2009)

also ich hab hier mal ein Programm, aus meiner sehr anfänger zeit,
schaus dir mal an, und versuch daraus was zu machen.


----------



## Schandro (5. Jun 2009)

> also ich hab hier mal ein Programm, aus meiner sehr anfänger zeit,
> schaus dir mal an, und versuch daraus was zu machen.


1. Du hast keinen Link oder ähnliches gepostet...
2. Glaubst du wirklich, dass es so gut für einen Anfänger wäre ein Programm von dir als Vorbild zu nehmen? Nix gegen dich persönlich, aber obwohl ich deinen Code nicht gesehen hab rate ich dem TO (Themeneröffner) hiermit mal: Lass es. Developer_X ist auch noch ziemlich am Anfang.


----------



## Developer_X (5. Jun 2009)

sorry hab net beim hochladen bemerkt, dass es eine 'zu große Datei war'
sorry,
hier aber als jar


----------



## Marco13 (6. Jun 2009)

@Kondition0: Sieh' dir ruhig mal an, was Developer_X da fabriziert hat. Und wenn dein Programm auch nur den Hauch der leisesten Tendenz hat, Ähnlichkeit zu diesem Programm anzunehmen, kannst du sicher sein, dass du etwas ganz gravierend falsch machst.


----------



## André Uhres (6. Jun 2009)

Kondition0 hat gesagt.:


> ich habe vor, ein Malprogramm zu schreiben


Jonas, lies dir doch bitte auch mal diesen kurzen Artikel durch: Malen in Swing Teil 1: der grundlegende Mechanismus - Byte-Welt Wiki


----------



## tuxedo (9. Jun 2009)

Developer-X hat gesagt.:
			
		

> also ich hab hier mal ein Programm, aus meiner sehr anfänger zeit,
> schaus dir mal an, und versuch daraus was zu machen.



:lol: Der war gut ... echt jetzt.



			
				Marco13 hat gesagt.:
			
		

> @Kondition0: Sieh' dir ruhig mal an, was Developer_X da fabriziert hat. Und wenn dein Programm auch nur den Hauch der leisesten Tendenz hat, Ähnlichkeit zu diesem Programm anzunehmen, kannst du sicher sein, dass du etwas ganz gravierend falsch machst.



:toll:


----------

