Graphics

Status
Nicht offen für weitere Antworten.

Sir_Steve

Mitglied
HI!
Ich bin ein Neuling in JAVA muss aber sagen dass es echt geil funzt. Allerdings habe ich ein prob:
Ich will in einem Canva ein paar Linien zeichnen. Ich habe ein Frame erstellt, ein SubCanva definiert
(extends Canva), habe das in den Frame eingefügt und will jetzt was zeichnen. Dazu habe ich die Methode paint.
Dieser Methode wird ein Graphics Objekt übergeben. Meine Frage: Wie erstelle ich so ein Objekt damit ich es übergeben kann? Thx 4 help!

Steve 8)
 
das brauchst du nicht erstellen. du definierst einfach die methode public void paint(Graphics g), und in der methode zeichnest du mit dem Graphics-Objekt deine Striche.
 
Ja okay, aber wie rufe ich die Methode paint dann auf? Ich muss ihr ja was übergeben! Man kann doch nix übergeben ohne es erstellt zu haben? Plz tell me!
 
die methode wird automatisch aufgerufen. wenn du sie manuell noch mal aufrufen willst, nimmst du repaint().
 
AH! i see!
okay, aber wenn ich dann auf knopfdruck etwas zeichnen will?
also sagen wir ich habe diese subklasse subcanva die von canvas erbt. dann habe ich da eine methode
paintline(graphics g) und wenn ein knopf drückt wird soll die methode aufgerufen werden... wie mache ich das dann?
ist das überhaupt möglich oder muss ich alles was gezeichnet wird mit paint und repaint und halt mit viele switches in der methode machen?
Thx 4 Help!!!

grüße Steve
 
Gleich noch eine frage: wie kann ich dann 2 kreise nebeneinander machen?
wenn ich for mache geht das ned, if geht ned. ich werde hier mal schnell ein kleines prog posten:

Code:
import java.awt.* ;
import java.awt.event.*; 

//hier wird eine Subklasse von Canvas erstellt, was nötig ist!

class SubCanva extends Canvas {
	
	int i = 0;
	
	public SubCanva(int Zahl) {
		this.i = Zahl;
	}
	
	
	public Dimension getMinimumSize() {
		return new Dimension (500, 500);
	}
	public Dimension getPreferredSize() {
		return getMinimumSize();
	}
	public void paint (Graphics Grafik) {
		Color Rot = new Color(255,0,0);
		Grafik.setColor (Rot);
		for(int i = this.i; i <= 10; i++){
			Grafik.drawOval (100,100,(i * 10),(i * 10));	
		}
	}

	
}




class KannWas{
	public static void main(String[] args){
	//zuerst amal ein Fenster anlegen
	Frame MainWindow = new Frame("Linie");
	//jetzt ein Canvas, weil das kann was. *prust*	
	SubCanva Canva = new SubCanva(10);
	//jetzt layout wählen
	MainWindow.setLayout (new BorderLayout() );
	//jetzt canvas einfügen
	MainWindow.add (Canva, "Center");
	MainWindow.setSize(1000,1000);
	MainWindow.setVisible(true);	
	}
}

wenn ich jetzt compeliere gibts immerhin keinen error 🙂
aber sobald ich ausführe bekomme ich den fehler
"Exeption in threa "main" java.lang.NoSuchMethodError: main
es lieg an der for weil wenn ich die weglasse passt alles. aber ich will ned nur einen kreis malen!!!!
wie mache ich das nun?

danke für hilfe, Steve
 
nur eine kleine frage: wieso nennst du das alles "Canava" es heißt "Canavas" mit S am ende 😉
 
deine klasse KannWas muss public deklariert werden, weil sie ja deine main-Methode enthält. die datei muss dann KannWas.java heissen.
 
kleine ergänzung:

beim neuzeichnen wird auch update(Graphics g) aufgerufen, wenn ich das noch richtig im kopf hab
 
lol, na klar! das ich die klasse mit main public machen muss ist doch irgendwie logisch, danke!!!
gut, jetzt kann ich immerhin schon mehrere kreise zeichnen wenn ich für jeden kreis die drawoval(...)-methode einzeln eingebe. das mag ich aber ned.
kann ich ned einfach in einer FOR-Schleife einfach einmal den draw befehl hinschreiben und dann eben ein paar mal ausführen (durch for eben). bei mir geht es no ned weil immer der selbe fehler kommt 🙁
wenn das noch geht freu ich mich sehr! vielen danke auch jetzt schon!

(wegen canva, ich nahm an das canvas mehrzahl ist... diesen fehler werde ich natürlich NIE wieder tun...)
 
Das mit den Buttons kannst du folgendermaßen lösen:

1.) Du setzt eine Statusvariable auf einen best. Wert, wenn man auf einen bestimmten Button klickt.
Beim ActionListener des Buttons löst du repaint() aus.
In der Paint-Fkt. prüfst du die Statusvariable, und rufst dann je nachdem die eigentliche Zeichenfunktion auf:
Code:
void button1_zeichnen(Graphics g)
{
 g.drawRect(10,10,20,20);
}

void paint(Graphics g)
{
 if (status == 1)
    button1_zeichnen(g);
}
Somit bekommst du ein übersichtliches Programm.

2.) Solltest du das Graphics-Objekt wirklich außerhalb der void paint() brauchen, kannst du das mit getGraphics() tun. Beachte aber, was passiert, wenn neu gezeichnet werden muss.

/€ und mit code tags bekommst du etwas mehr übersichtlichkeit in deine posts
 
@sir sag welcher fehler kommt, den generell geht das schon

@special wann wurde hier was mit buttons gefragt? ich hab da nix gesehen
 
Status
Nicht offen für weitere Antworten.

Zurück
Oben