Warum wird nich gezeichnet?

Status
Nicht offen für weitere Antworten.

Kondition0

Mitglied
Hallo liebes Forum,

ich versuche gerade ein Malprogramm zu erstellen und taste mich langsam vor.
Momentan soll an der Stelle, wo auf der Canvas (cv) geklickt wird, ein Punkt gemalt werden (komponente -> cvg)

Dazu habe ich eine eigene Methode gemacht ( zeichnen(cvg) ), die scheinbar aber fehlerhaft ausgeführt, bzw nicht erkannt wird.

Die Koordinaten werden ausgegeben (also bis zur mousePressed methode geht alles) doch die Zeichen Methode scheint nicht gestartet zu werden.

Wo liegt der Fehler? Ich seh ihn nichgt :(

Java:
//
// Freihand zeichnen
//

import java.awt.*;
import java.awt.event.*;
import java.math.*;
import java.awt.Color;
import java.awt.Graphics;

import javax.swing.JFrame;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;



//Interface
public class Malprogramm 
extends Frame 
implements MouseListener, Runnable, ActionListener 
{
	
int x;
int y;
Canvas cv;
Graphics cvg;

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

    public static void main(String[]args)
    {
    	Malprogramm	wgh =new Malprogramm ();
    	wgh.setSize(500,500);
    	wgh.setBackground(Color.gray);
    	wgh.show();	
    }
    
    public Malprogramm()
    {
    	super ("Mein Malprogramm");

    	//Fenster schließbar machen
        WindowListener wl = new WindowAdapter() {
            public void windowClosing(WindowEvent e) {
                System.exit(0);
            }
        };
        addWindowListener(wl);

        
    	// 1. Panel
    	Panel p1= new Panel();
    	p1.setBounds(10,45,40,40);

    	
    	//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);
		
    	//erase
		b_erase= new Button("erase");
		b_erase.setBackground (Color.white);

    	//save
		b_save= new Button("save");
		b_save.setBackground (Color.white);
		
		p1.add(b_grün);
		p1.add(b_gelb);
		p1.add(b_blau);
		p1.add(b_rot);
		p1.add(b_erase);
		p1.add(b_save);
		
		b_grün.addActionListener(this);
		b_gelb.addActionListener(this);
		b_rot.addActionListener(this);
		b_blau.addActionListener(this);
		
// Panel 2
		Panel p2 = new Panel ();
		p2.setLayout(null);

// CANVAS
	Canvas cv = new Canvas();
	cv.setBackground(Color.white);
	cv.setBounds(1,1,1000,1000);
	cv.addMouseListener(this);
	p2.add(cv);

	 
//Hauptfenster Layout
	setLayout(new GridLayout(2,1));
	add(p1);
	add(p2);
    }
    
//ActionPerformed Methode
	public void actionPerformed(ActionEvent e)
	{
		if(e.getSource()==b_blau)
		{
			blau=true;
			grün=false;
			gelb=false;
			rot=false;
		}
		
		if(e.getSource()==b_grün)
		{
			blau=false;
			grün=true;
			gelb=false;
			rot=false;
		}
		
		if(e.getSource()==b_gelb)
		{
			blau=false;
			grün=false;
			gelb=true;
			rot=false;
		}
		
		if(e.getSource()==b_rot)
		{
			blau=false;
			grün=false;
			gelb=false;
			rot=true;	
		}
		
	} 
	
	public void start(){
		Thread th = new Thread(this);
		th.start();
	}
	
	public void run(){
		
		while (true){	
		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);
    	zeichnen(cvg);

 
    }
    public void mouseReleased(MouseEvent event)
    {

    }

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

    public void mouseExited(MouseEvent e) {}
    
 // ZeichenMethode   
    public void zeichnen(Graphics grafik)
    {
  //Grüne Farbe gewählt
    	if (grün==true)
    	{
    	cvg = cv.getGraphics();
    	cvg.setColor(Color.green);
  		cvg.fillOval(x, y, 20, 20);
    	}
   // Rote Farbe gewählt
    	if (rot==true)
    	{
    	cvg = cv.getGraphics();
    	cvg.setColor(Color.red);
  		cvg.fillOval(x, y, 20, 20);
    	}
    // blaue Farbe gewählt	
    	if (blau==true)
    	{
    	cvg = cv.getGraphics();
    	cvg.setColor(Color.blue);
  		cvg.fillOval(x, y, 20, 20);
    	}
    //Gelbe Farbe gewählt	
    	if (gelb==true)
    	{
    	cvg = cv.getGraphics();
    	cvg.setColor(Color.yellow);
  		cvg.fillOval(x, y, 20, 20);
    	}

    }
    
    
    



}
 

Schandro

Top Contributor
Tut mir Leid das sagen zu müssen, aber: Du machst das zeichnen komplett falsch. Les dir mal ein Tutorial oder ein entsprechendes Kapitel aus einem Handbuch dazu durch.

Hier noch mein Standard Beispielcode:
Java:
package test;

import java.awt.Color;
import java.awt.Graphics;

import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.SwingUtilities;

public class XXX{

	public static void main(String[] args){
		new XXX();}


	private JFrame window = new JFrame();
	private int cnt; // wird zur Kommunikation ziwschen dem animationThread und paintComponent benutzt

	public XXX(){
		window.setBounds(100,100,400,200);
		window.add(panel);
		
		SwingUtilities.invokeLater(new Runnable() {
			public void run() {
				window.setVisible(true); 
			}
		});
		
		Thread animationThread = new Thread(new Runnable(){
			public void run(){
				while(cnt < 300){
					++cnt;
					panel.repaint();
					
					try{
						Thread.sleep(10);
					}catch(InterruptedException e){
						e.printStackTrace();
					}
				}
			}
		});
		animationThread.start();
	}


	JPanel panel = new JPanel(){
		public void paintComponent(Graphics g){
			super.paintComponent(g);
			
			g.setColor(Color.BLACK);
			g.fillRect(cnt,50,50,50);
		}
	};

}
 

Kondition0

Mitglied
Ich weiß, dass ich einiges falsch mache, sonst würde es ja funktionieren...

ich habe bereits alles versucht, tuts gelesen etc, aber komm nich klar mit.
Könnt mir auch nicht weiterhelfen außer "les nochmal" oder ?

Schade
 

Marco13

Top Contributor
Hmja, die Alternative wäre, deinen Code so umzuschreiben, dass er funktioniert. Vielleicht erklärt sich dazu noch jemand bereit. Bis dahin noch die eine, "goldene" Regel - wenn man die beachtet, kann man schon nicht mehr soooo viel falsch machen:

Alles, was man zeichnet, muss von der paint-Methode aus gezeichnet werden (und zwar in das Graphics-Objekt, das man in der paint-Methode übergeben bekommt)
 

Kondition0

Mitglied
Naja, wie soll man das schon erklären?
Guck dir doch z.b. mal meinen Beispielcode an und schraub an ihm ein bisschen herum, um das Prinzip dahinter zu verstehen.

Das Programm hat leide nichts mit meinem zu tun.
Ich möchte auf das Canvas malen, du jedoch hast ein globales g als Variable.
Soweit war ich auch schon, da hat er dann gemalt.
Doch nun will ich auf der Canvas malen und brauch dazu eine eigene Zeichenmethode.

Ich glaub, ich hab einfach nur einen Flüchtigkeitsfehler gemacht und wollt schaun ob ihr erfahrenen Programmierer das schnell bemerkt.

Verweiße auf anderen SourceCode wie der bringt mir nix und hab ich selber zu Haufen.
 

Schandro

Top Contributor
^^ Vergiss deinen Code erstmal. Du musst zuerst die Grundlagen von Zeichnen mit Swing/AWT verstehen. Deswegen hab ich meinen Code gepostet (der nix direkt mit deinem Code zu tun hat...), damit du mal ein Beispiel hast wie mans richtig macht.

Ich glaub, ich hab einfach nur einen Flüchtigkeitsfehler gemacht
Nein.
 

Leroy42

Top Contributor
Das Programm hat leide nichts mit meinem zu tun.
Eben! :D

Ich möchte auf das Canvas malen, du jedoch hast ein globales g als Variable.

Schandro hat kein "globales g" sondern es ist als Übergabeparameter
in einer, durch das System aufgerufenen Methode, deklariert!

Soweit war ich auch schon, da hat er dann gemalt.
Toll! :)

Doch nun will ich auf der Canvas malen und brauch dazu eine eigene Zeichenmethode.

Nein! Du mußt nur die paintComponent-Methode deines Canvas überschreiben. :toll:

Ich glaub, ich hab einfach nur einen Flüchtigkeitsfehler gemacht und wollt schaun ob ihr erfahrenen Programmierer das schnell bemerkt.

Flüchtigkeitsfehler in einem ansonsten total wuseligen Programm
zu finden, liegt uns einfach nicht. :eek:

Verweiße auf anderen SourceCode wie der bringt mir nix und hab ich selber zu Haufen.

Dann ist dieses Forum für dich leider kaum hilfreich! ;(
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
Z JSlider - Text wird nich angezeigt Java Basics - Anfänger-Themen 0
R ImageIcon wird nich angezeigt - Jar, Eclipse Java Basics - Anfänger-Themen 6
K javac wird nich gefunden Java Basics - Anfänger-Themen 1
E Methodendeklaration mit throws wird nich behandelt Java Basics - Anfänger-Themen 3
S Bild wird bei Start nich angezeigt Java Basics - Anfänger-Themen 2
J shuffle cards wird nicht ausgeführt. Java Basics - Anfänger-Themen 2
K Warum wird mir auf der Konsole des Servers nicht "xxxx" angezeigt (Server/Client) Java Basics - Anfänger-Themen 4
K Warum wird hier nur etwas in eine txt Datei geschrieben und nicht in alle drei (InputStream/OutputStream/Reader/Writer) Java Basics - Anfänger-Themen 1
I Exception wird gefangen, aber trotzdem in Error Log? Java Basics - Anfänger-Themen 10
H JDK installieren jdk-21 wird nicht erkannt Java Basics - Anfänger-Themen 13
T if-else Bedingung wird ignoriert Java Basics - Anfänger-Themen 4
K Warum wird mir "Empfangen vom Client:" nicht sofort ausgegeben(Server/Client) Java Basics - Anfänger-Themen 3
P Webseite vom Smartmeter wird nur unleserlich angezeigt Java Basics - Anfänger-Themen 7
A Warum wird mein jdk nicht gefunden? Java Basics - Anfänger-Themen 3
J jar Befehl wird nicht erkannt Java Basics - Anfänger-Themen 7
M Anonyme Klassen - Warum wird in der Konsole nichts ausgegeben? Java Basics - Anfänger-Themen 1
T catch(InputMismatchException) wird nicht ausgefürt/erkannt Java Basics - Anfänger-Themen 12
berserkerdq2 Intelij, wie kann ich einstellen, dass die aktuelle Klasse ausgeführt wird, wenn ich aufs Startsymbol drücke, gibts da eine Tastenkombination? Java Basics - Anfänger-Themen 11
M Verständnisfrage: Warum wird die Datei ohne Inhalt übertragen Java Basics - Anfänger-Themen 3
Ostkreuz Wieso wird die Methode nochmal aufgerufen? Java Basics - Anfänger-Themen 5
Oneixee5 Maven Plugin wird 2 mal ausgeführt Java Basics - Anfänger-Themen 10
R Compiler-Fehler Variable wird nicht gefunden bzw. erkannt? Java Basics - Anfänger-Themen 2
D Interface Methode wird ungewollt in der Subklasse überschrieben Java Basics - Anfänger-Themen 5
C Was tun wenn .class erwartet wird ? Java Basics - Anfänger-Themen 6
T Meine Klasse wird nicht gefunden Java Basics - Anfänger-Themen 1
T Wie kann man es machen das ein Objekt nicht übermalt wird Java Basics - Anfänger-Themen 2
K Warum wird mir hier nach dem ersten Durchlauf zwei mal "welchen Datentyp wollen sie übergeben?" ausgegeben ? Java Basics - Anfänger-Themen 1
MiMa Ungültiges Datum wird nicht erkannt ?? Java Basics - Anfänger-Themen 6
schemil053 Multithread - Input verrutscht während etwas ausgegeben wird Java Basics - Anfänger-Themen 6
K REGEX - Rechnungsbetrag wird nicht richtig ausgelesen. Java Basics - Anfänger-Themen 3
G Timer - ScheduledExecutorService wird schon vorher beendet Java Basics - Anfänger-Themen 5
X Erste Schritte Scanner eingabe wird übersprungen Java Basics - Anfänger-Themen 4
H Compiler-Fehler Klasse in einem Package wird nicht gefunden bzw. akzeptiert Java Basics - Anfänger-Themen 12
L Switch-Case Multiplikation wird nicht ausgegeben Java Basics - Anfänger-Themen 1
J In der Ausgabe wird ohne Eingabe in den else Block gesprungen. Java Basics - Anfänger-Themen 0
J In der Ausgabe wird ohne Eingabe in den else Block gesprungen. Java Basics - Anfänger-Themen 5
M Text wird in der Console nicht ausgegeben. Java Basics - Anfänger-Themen 11
I Methoden Wieso wird mein Array "a" verändert und meine Variable "a" nicht? Java Basics - Anfänger-Themen 4
S Datei anlegen Problem! Groß- und Kleinschreibung wird nicht unterschieden Java Basics - Anfänger-Themen 4
sserio Zweidimensionales Array [][] wird untereinander ausgegeben Java Basics - Anfänger-Themen 14
sserio Math. Befehl wird rot markiert Java Basics - Anfänger-Themen 5
M Rechteck wird nicht angezeigt Java Basics - Anfänger-Themen 3
B Bungeecord | ProxiedPlayer wird nicht in ArrayList hinzugefügt Java Basics - Anfänger-Themen 1
U Methode wird genutzt, ohne dass ich die aufrufe? Java Basics - Anfänger-Themen 4
S Methoden Return Rückgabewert wird nicht übergeben Java Basics - Anfänger-Themen 8
M Mein quellcode wird nicht in der Konsole ausgegeben Java Basics - Anfänger-Themen 3
I Code wird nicht ausgeführt Java Basics - Anfänger-Themen 2
M wird der Konstruktor nicht als 1. ausgeführt? Java Basics - Anfänger-Themen 13
G Main Methode wird beim ersten Aufruf nicht richtig ausgeführt Java Basics - Anfänger-Themen 1
K Präzedenregeln in Java sagen, dass +expr und -expr vor + von Addition und - von Addition stehen, warum wird dann z. B. a+b als eine Addition ausgeführ Java Basics - Anfänger-Themen 7
M Was wird hier genau getestet? Java Basics - Anfänger-Themen 9
M Wie schreibe ich eine if-Verzweigung um, so dass ein Bedingungsoperator benutzt wird? Java Basics - Anfänger-Themen 9
I Programm erkennt nicht an das Array zurückgegeben wird trotz Initialisierung *einfach* Java Basics - Anfänger-Themen 9
K Jlabel mit itemlistevent Text gegeben, wird nicht angezeigt Java Basics - Anfänger-Themen 5
P Mein Programm wird zwar erfolgreich Compiliert, öffnet sich aber nicht Java Basics - Anfänger-Themen 6
M Referenzen zuweisen und wird gleichzeitig ausgeführt Java Basics - Anfänger-Themen 6
O System.out.println wird nicht ausgegeben? Java Basics - Anfänger-Themen 11
Zrebna Umgebungsvariable Wieso wird meine verwendete JDK-Version in der Prompt nicht erkannt? Java Basics - Anfänger-Themen 6
el_pato DialogFenster wird nicht in Schleife geöffnet? Java Basics - Anfänger-Themen 30
J if-Schleife innerhalb einer if-Schleife wird in der Konsole nicht gelesen Java Basics - Anfänger-Themen 4
P Apache Derby wird in Eclipse trotz Anbindung nicht gefunden Java Basics - Anfänger-Themen 6
H Array wird als Rückgabewert nicht akzeptiert? Java Basics - Anfänger-Themen 2
Poppigescorn scan.nextInt() wiederholen bis eine Zahl eingeben wird Java Basics - Anfänger-Themen 7
F Session wird mehrfach erzeugt Java Basics - Anfänger-Themen 11
F Initialisieren eines Web-Mp3 Players in Tabs durch "booleans" erst wenn Tab geöffnet wird ...? Java Basics - Anfänger-Themen 1
fuerteb Compiler-Fehler Methode wird nicht bzw. als Fehler erkannt Java Basics - Anfänger-Themen 4
L JScrollPane wird nicht angezeigt Java Basics - Anfänger-Themen 10
D Hilfe beim Erzeugen eines Arrays NullPointerException wird ausgelöst Java Basics - Anfänger-Themen 11
J JTable Titel wird nicht angezeigt Java Basics - Anfänger-Themen 6
krgewb Long wird gerundet Java Basics - Anfänger-Themen 2
Zwanglos Warum wird nur die erste Zeile im while Block ausgeführt? Java Basics - Anfänger-Themen 8
F Wieso wird immer die falsche Mausposition angegeben? Java Basics - Anfänger-Themen 1
H GridPane wird nicht angezeigt Java Basics - Anfänger-Themen 0
M Was habe ich hier falsch, dass wenn ich z.B.: 11 eingebe mir false zurück gegeben wird? Java Basics - Anfänger-Themen 2
M Java Spiel wie Wer wird Millionär Java Basics - Anfänger-Themen 1
H Endkapital wird nicht korrekt ausgegeben. Java Basics - Anfänger-Themen 5
C Methodenrückgabe wird in der main nicht berücksichtigt Java Basics - Anfänger-Themen 2
X compareTo Methode wird ignoriert Java Basics - Anfänger-Themen 7
kodela Hauptklasse wird nicht gefunden Java Basics - Anfänger-Themen 3
H Befehl wird nicht ausgeführt - System.out.println Java Basics - Anfänger-Themen 3
I Input/Output Code wird doppelt ausgeführt Java Basics - Anfänger-Themen 3
P Bedingung in Schleife wird nicht ausgeführt Java Basics - Anfänger-Themen 5
P Variablen HttpResponse.getBody() wird automatisch org.json Object und kann nicht zu json.simple Object gecastet werden? Java Basics - Anfänger-Themen 7
N Selection Algorithmus: Methode wird nicht erkannt (BlueJ) Java Basics - Anfänger-Themen 3
N package wird doppelt im exporer angezeigt Java Basics - Anfänger-Themen 2
N Bedinugng If-Abfrage wird nie erfüllt Java Basics - Anfänger-Themen 4
M Else wird nicht ausgeführt. Java Basics - Anfänger-Themen 5
H Wie wird ein String intern gespeichert? Java Basics - Anfänger-Themen 10
A char array wird überschrieben Java Basics - Anfänger-Themen 6
E Methoden Action Event wird nicht vollständig ausgeführt Java Basics - Anfänger-Themen 3
L Iterieren durch eine ArrayList. Integer Array wird übergeben Java Basics - Anfänger-Themen 17
S setContentView(R.Layout.XXX) wird Rot angezeigt Java Basics - Anfänger-Themen 0
C Beispiel-Code mit Pair wird nicht compiliert. Java Basics - Anfänger-Themen 8
S Integer Wert wird nicht übernommen Java Basics - Anfänger-Themen 2
J Int wird als Null ausgegeben Java Basics - Anfänger-Themen 8
F Switch case wird als char nicht erkannt.... Java Basics - Anfänger-Themen 6
S for-Schleife wird ignoriert Java Basics - Anfänger-Themen 15
NeoLexx Variable für Array wird nicht korrekt übergeben Java Basics - Anfänger-Themen 45
tom.j85 Doppelte Foreach Schleife: Am Ende wird immer das Gleiche Objekt eingefügt Java Basics - Anfänger-Themen 4
M BorderLayout, 2Panels, EAST wird nicht angezeigt ?? Java Basics - Anfänger-Themen 2

Ähnliche Java Themen

Neue Themen


Oben