In einem Java-Fenster zeichnen

Hallo Zusammen,

erstmal würde ich gerne das Forum begrüssen. Habe mich gerade eben angemeldet und habe auch schon die erste Frage:

Es geht um ein kleines Java Programm mit dem ich in ein Fenster etwas Zeichnen möchte. Ich habe zwei Beispielcodes angefügt (Zeichnen und Zeichnen2).

Bei Zeichnen geht nur das Fenster auf, es wird aber nichts gezeichnet.

Bei Zeichnen2 funktioniert das Zeichnen Problemlos.

Wieso ist das so? Und was ist der Unterschied zwischen den beiden Codes? Ich würde eigentlich den Code in "Zeichnen" bevorzugen.


Vielen Dank für eure Hilfe




p.s. Da es mir darum geht die Basics zu lernen, möchte ich auch genau wissen was ich da programmiert habe und wo genau de Fehler sind.

Java:
import java.awt.*;




public class Zeichnen 
{
	public static void main(String str[])
	{
		Frame wnd = new Frame();
		wnd.addWindowListener(new WindowClosingAdapter(true));
		wnd.setBackground(Color.lightGray);
		wnd.setSize(500,500);
		wnd.setVisible(true);
		
	}
		
		
		
				
	public void paint(Graphics g)
	{
		
		g.setColor(Color.red);
		g.drawRect(100,30,100,30);
		g.fillRect(100,30,100,30);
				
		
	}
	}

Java:
import java.awt.Color;
import java.awt.Frame;
import java.awt.Graphics;




public class Zeichnen2 extends Frame
{
	public static void main(String str[])
	{
		
		Zeichnen2 wnd = new Zeichnen2();
	}
		
		
		public Zeichnen2()
		{
			
			addWindowListener(new WindowClosingAdapter(true));
			setBackground(Color.lightGray);
			setSize(500,500);
			setVisible(true);
		
		}
				
	public void paint(Graphics g)
	{
		
		g.setColor(Color.red);
		g.drawRect(100,30,100,30);
		g.fillRect(100,30,100,30);
				
		
	}
	}
 
Zuletzt bearbeitet:

jgh

Top Contributor
im der
Code:
Zeichnen
-Klasse machst du einen neuen Frame
Java:
	Frame wnd = new Frame();
das du anschließend die paintMethode definierst ist egal, weil du nicht einen Zeichnen-Frame öffnest, sondern einen Frame.

In Zeichnen2 öffnest du halt den Zeichnen2-Frame, also deine Klasse die von Frame erbt und somit überschreibst du die paint-Methode und dein Rechteck wird angezeigt.

Edit:
Java:
class Zeichnen2 extends Frame {
	public static void main(String str[]) {

		Zeichnen2 wnd = new Zeichnen2();
		wnd.addWindowListener(new WindowClosingAdapter(true));
		wnd.setBackground(Color.lightGray);
		wnd.setSize(500, 500);
		wnd.setVisible(true);
	}

	public void paint(Graphics g) {

		g.setColor(Color.red);
		g.drawRect(100, 30, 100, 30);
		g.fillRect(100, 30, 100, 30);

	}
}
 
Zuletzt bearbeitet:
P

Picus

Gast
Vielleicht in der Klasse zwei die [c] // [/c] bei [c]extends frame[/c] weglassen.

Gruss
P.
 
Erstmal vielen Dank für die rasche Antwort.

Etwas ist mir noch unklar:


Warum genau funktioniert der erste Code nicht ("Zeichnen")? Kann man das so erklären, dass die Paint-Methode nicht weiß wo sie zeichnen soll (oder kein Frame findet), da ich ein Frame erstellt habe aber ein Zeichnen-Frame?
 
G

Gast2

Gast
Warum genau funktioniert der erste Code nicht ("Zeichnen")? Kann man das so erklären, dass die Paint-Methode nicht weiß wo sie zeichnen soll (oder kein Frame findet), da ich ein Frame erstellt habe aber ein Zeichnen-Frame?
Nein, die wird schlichtweg einfach nicht aufrufen..

Man sollte sich auch nicht unbedingt in den Zeichenvorgang von Frames einmischen. Überschreib lieber die paint/paintComponent Methode eines Panels/JPanels.
 
OK, also nicht auf dem Frame zeichnen, sondern vorher ein Panel erstellen.
Obwohl das im Java Handbuch wie in "Zeichnen2" gezeigt wird.

Wie sieht das mit dem Aufruf "Zeichnen2 wnd = new Zeichnen2();" aus. Es wird "wnd" gelb unterstrichen, also Variable wird nicht benutzt.

Ausserdem wird Zeichnen2 in "public class Zeichnen2 extends Frame
" gelb unterstrichen mit der Meldung:The serializable class Zeichnen2 does not declare a static final serialVersionUID field of type long

D.h. irgendwas ist nicht sauber programmiert...hat jemand ne Idee?
 
G

Gast2

Gast
OK, also nicht auf dem Frame zeichnen, sondern vorher ein Panel erstellen.
Ja, das ist sauberer.

Wie sieht das mit dem Aufruf "Zeichnen2 wnd = new Zeichnen2();" aus. Es wird "wnd" gelb unterstrichen, also Variable wird nicht benutzt.
Richtig, da warnt eclipse dich, weil das in der Regel nicht gewollt ist. Du kannst das umgehen indem du nur
Code:
new Zeichnen2();
schreibst.

Ausserdem wird Zeichnen2 in "public class Zeichnen2 extends Frame
" gelb unterstrichen mit der Meldung:The serializable class Zeichnen2 does not declare a static final serialVersionUID field of type long
Java möchte gerne dass jede Klasse die das Interface Serializable implementiert diese serialVersionUID angeben. Näheres zu der Konstanten findest du bei Google.
 
Man sollte sich auch nicht unbedingt in den Zeichenvorgang von Frames einmischen. Überschreib lieber die paint/paintComponent Methode eines Panels/JPanels.

Zum allgemeinen Verständniss:

Ich sollte also beim Zeichnen nicht in Ebenen denken (wie z.B.HTML oder Photoshop), sondern dass bei einem Zeichnen-Vorgang die Ursprüngliche (Frame) Zeichnung überschrieben (also geändert) wird.

Mit anderen Worten: Ein Frame (oder Panel etc.) ist schon eine Zeichnung, die ich mit der Methode Paint überschreibe, also abändere. Ist das richtig?
 

jgh

Top Contributor
na ja so halbwegs:

Ein (J)Frame, (J)Panel etc. haben mehrere Methoden wie sie sich zeichnen.
Du kannst diese Methoden überschreiben, grundsätzlich ist es egal, ob du die Methode in einem JPanel, oder einem JFrame überschreibst..aber da logischerweise der JFrame viel komplexer als ein JPanel ist, überschreibt man eher die Methode eines JPanels und packt diesen dann in den Frame.

Das mit den Ebenen passt eigentlich imho auch...
 

jgh

Top Contributor
mmmh, in Ebenen denken wie bei Photoshop passt auch, da du auch in Swing, oder mit AWT auch Panels übereinander legen kannst. Nur -wie du schon sagst- kannst du jede Ebene in seinem Zeichenvorgang verändern.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
Schandro Den größten passenden java.awt.Font zu einem Rectangle berechnen AWT, Swing, JavaFX & SWT 2
F [Java 1.5] Shapes auf einem JPanel zoomen AWT, Swing, JavaFX & SWT 11
J Java-Eingabefeld wie in einem Browser AWT, Swing, JavaFX & SWT 8
Juelin Zugriff auf Bildschirmobjekte aus einem anderen Programm AWT, Swing, JavaFX & SWT 6
M Seltsame Exception bei setVisible(true) Methode in einem JFrame AWT, Swing, JavaFX & SWT 2
MartinNeuerlich Kann mir jemand, der einen Mac mit einem m1 oder m2-Chip hat, eine POM geben mit der Javafx-Fullscreen beim Mac mit m-Chip funktioniert? AWT, Swing, JavaFX & SWT 1
W 2 JTables in einem Swing-Fenster? AWT, Swing, JavaFX & SWT 5
J JavaFx PDF in einem Element in einem Fenster anzeigen. AWT, Swing, JavaFX & SWT 11
Mojo7310 Ändern von Text in JLabel mit einem Button AWT, Swing, JavaFX & SWT 11
I JTable mit einem Button zu einer Detail Seite springen AWT, Swing, JavaFX & SWT 4
S Swing zu einem Datum Tage addieren/subtrahieren AWT, Swing, JavaFX & SWT 6
E Swing Mausposition auf einem JFrame erkennen AWT, Swing, JavaFX & SWT 5
Jose05 NullPointerException bei Beschreiben eines Labels aus einem Array AWT, Swing, JavaFX & SWT 12
ExceptionOfExpectation Textdarstellung auf einem Canvas mit Hilfe von repaint(); AWT, Swing, JavaFX & SWT 6
2 JavaFX die ChoiceBox leitet den String nicht weiter oder es komm zu einem NullPointer AWT, Swing, JavaFX & SWT 8
L JavaFX javafx.fxml.LoadException bei einem Taschenrechner AWT, Swing, JavaFX & SWT 5
Z GUI Forms - Mehrere Fenster in einem Projekt AWT, Swing, JavaFX & SWT 18
N Nur bei einem Textfiled Nullpointerexception bei getText() AWT, Swing, JavaFX & SWT 1
H JComobox in einem JPopupNeu AWT, Swing, JavaFX & SWT 7
P Button simpler random auf einem JPanel verteilen? AWT, Swing, JavaFX & SWT 3
W Inject bei einem Swing Frontend AWT, Swing, JavaFX & SWT 8
H Daten aus einer XML(x83-Datei) in einem JFrame anzeigen lassen AWT, Swing, JavaFX & SWT 9
Z Swing Drag and Drop mit einem JButton AWT, Swing, JavaFX & SWT 1
Z Mit einem Button einen anderen Button Triggern AWT, Swing, JavaFX & SWT 3
D AWT Wie kann ich ein Frame von einem anderen aus beeinflussen? AWT, Swing, JavaFX & SWT 7
T Setzen von der Schriftgröße bei einem Shell AWT, Swing, JavaFX & SWT 15
A checkbox in einer TableView abhängig von einem anderen Celleninhalt disablen AWT, Swing, JavaFX & SWT 1
J Fenster mit Inhalten aus einem Array Füllen AWT, Swing, JavaFX & SWT 4
D JavaFX Ein Parameter von einem Stage(GUI) zu einem anderen übergeben AWT, Swing, JavaFX & SWT 6
T Bilder bei einem JFrame einfügen AWT, Swing, JavaFX & SWT 4
S JavaFX Variablen in einem FXML File verwenden AWT, Swing, JavaFX & SWT 8
A Objekt von einem Window erstellen? AWT, Swing, JavaFX & SWT 8
Drachenbauer Swing Wie ändere ich die helle geklickt-Farbe von einem JButton? AWT, Swing, JavaFX & SWT 4
ralfb1105 JavaFX Alert Confirmation Dialog aus einem Service Thread AWT, Swing, JavaFX & SWT 8
F JavaFX Aktuelle Zeit in einem TextField anzeigen AWT, Swing, JavaFX & SWT 7
M JavaFX Bild zur ImageView in einem Kreis anzeigen. AWT, Swing, JavaFX & SWT 4
F JavaFX PNG aus einem resource Ordner laden AWT, Swing, JavaFX & SWT 8
F JavaFX Checken ob der Input einem festgelegten Format gleicht AWT, Swing, JavaFX & SWT 7
B JavaFX Bilder in einem Gewissen bereich halten AWT, Swing, JavaFX & SWT 1
cool_brivk24 BufferedImage einem ClickEvent hinzufügen AWT, Swing, JavaFX & SWT 13
Q-bert Doppelclick auf einem List item AWT, Swing, JavaFX & SWT 9
J JavaFX von einem Array aus Buttons herausfinden auf welcher geklickt wurde aus dem Array. AWT, Swing, JavaFX & SWT 1
C SWT autosize bei gc.drawString() auf einem Label AWT, Swing, JavaFX & SWT 7
R Farbe zu einem Eckpunkt generieren AWT, Swing, JavaFX & SWT 2
T Reihenfolge der Komponenten im einem JFrame AWT, Swing, JavaFX & SWT 8
F abgeleitete Panels von einem ContentPanel AWT, Swing, JavaFX & SWT 4
heinz ketchup While-Schleife in einem Service für GUI AWT, Swing, JavaFX & SWT 22
D zwei JLabel stapeln in einem JPanel AWT, Swing, JavaFX & SWT 5
H Hintergrundbild in einem Programm AWT, Swing, JavaFX & SWT 4
F RGB-Werte aus einem String einlesen AWT, Swing, JavaFX & SWT 26
stroggi Swing Mehrere transparentes Objekte (Grafiken) über einem Bild (JLabel) darstellen AWT, Swing, JavaFX & SWT 4
I JavaFX Fenster wird auf einem anderen Rechner anders dargestellt AWT, Swing, JavaFX & SWT 5
DaCrazyJavaExpert Swing Zwei gleichgroße Panels in einem Scrollpane mit Layout AWT, Swing, JavaFX & SWT 9
W Swing Hilfe beim Einbinden von Bildern in einem JFrame AWT, Swing, JavaFX & SWT 8
F AWT mehrere Panels in einem Frame AWT, Swing, JavaFX & SWT 17
L JavaFX Mehrere JavaFX Szenen mit einem Menü AWT, Swing, JavaFX & SWT 1
L JavaFX Klickverhalten bei einem Panel AWT, Swing, JavaFX & SWT 1
V JavaFX Button Controller Fehler, trotz Erfolg in einem anderem Code? AWT, Swing, JavaFX & SWT 7
Y Darstellung und MouseHover bei bestimmten Wörtern in einem String AWT, Swing, JavaFX & SWT 2
GreenTeaYT Wie vergebe Ich den Jframe Title den Namen aus einem Element von der Arraylist ? AWT, Swing, JavaFX & SWT 4
H Geld pro Sekunde in einem Clickerspiel AWT, Swing, JavaFX & SWT 4
Java_RY wie kann ich auf JButtons in einem JPanel zugreifen AWT, Swing, JavaFX & SWT 3
F Zeichnung einem JPanel im Layoutmanager zuweisen AWT, Swing, JavaFX & SWT 3
Ghostman1711 Hinzufügen ausgewählter Dateinen des Filechoosers zu einem JTable AWT, Swing, JavaFX & SWT 9
T AWT Farben in einem Bild ändern AWT, Swing, JavaFX & SWT 8
R Swing JLabel berührung an einem anderen Label prüfen AWT, Swing, JavaFX & SWT 3
M Text in einem Label fett setzen AWT, Swing, JavaFX & SWT 4
E Swing Copy und Paste eines einzelnen Knoten aus einem JTree AWT, Swing, JavaFX & SWT 1
7 JavaFX Problem beim Zeichnen eines Dreiecks in einem GUI AWT, Swing, JavaFX & SWT 6
K JavaFX Mehrere Cell Editors in einem TreeView Item AWT, Swing, JavaFX & SWT 2
F JavaFX JavaFX - Hintergrundmusik in einem seperatem Task/Service AWT, Swing, JavaFX & SWT 6
D JavaFX Gesetzte Variable in einem Controller im Controller laden AWT, Swing, JavaFX & SWT 1
D Swing JCombobox in einem JTable vorbelegen AWT, Swing, JavaFX & SWT 4
T Swing JTable Zeile mit ausgelesenen Werten mit Hilfe von einem Button hinzufügen AWT, Swing, JavaFX & SWT 1
E JavaFX MenuBar und ToolBar zu einem Bereich AWT, Swing, JavaFX & SWT 3
Y Kann man Buttons in einem JFrame rund machen ? AWT, Swing, JavaFX & SWT 2
D Timer für Bildfolge in einem jLabel AWT, Swing, JavaFX & SWT 5
C (JavaFX 8) SQLite Datenbank in einem TableView darstellen AWT, Swing, JavaFX & SWT 2
M JavaFX wie kann mann sein frame mit einem Icon fersehen? AWT, Swing, JavaFX & SWT 2
L 2D-Grafik Dreieck in einem Kreis??? AWT, Swing, JavaFX & SWT 1
F Swing Image einem Button hinzufügen AWT, Swing, JavaFX & SWT 5
J Swing unterschiedliche Inhalte in einem JFrame AWT, Swing, JavaFX & SWT 3
R Swing Mehrere JTextFields mit einem Document Listener AWT, Swing, JavaFX & SWT 2
T Swing Größe einer Komponente in einem BoxLayout / FlowLayout festlegen AWT, Swing, JavaFX & SWT 7
S Punkt finden der in einem Shape liegt..? AWT, Swing, JavaFX & SWT 11
A Swing Externe Klassen aufrufen und in einem bereits vorhandenen Container einfügen AWT, Swing, JavaFX & SWT 0
P LayoutManager TextField.setSize(); in einem FlowLayout AWT, Swing, JavaFX & SWT 3
H Position eines JLabel in einem JPanel AWT, Swing, JavaFX & SWT 2
Shams Probleme bei dem Hinzufügen von Komponenten zu einem JFrame AWT, Swing, JavaFX & SWT 3
M Mehrere Jpanel in einem JScrollPane (Layout) AWT, Swing, JavaFX & SWT 2
M Java FX Innerhalb einem FXML-Dialog weiteren FXML-Dialog einblenden AWT, Swing, JavaFX & SWT 3
J Bilder als Variable an einem Objekt speichern AWT, Swing, JavaFX & SWT 3
D Swing &MouseListener in einem JFrame, sinnig? AWT, Swing, JavaFX & SWT 11
J RadioButton-Gruppe in Kombination mit einem Button AWT, Swing, JavaFX & SWT 6
S 3D-Grafik 3d Grafik auf einem JPanel oder im JScrollPane AWT, Swing, JavaFX & SWT 1
G Text im textfeld in einem Editor anzeigen AWT, Swing, JavaFX & SWT 18
V Fenster in einem Fenster anordnen AWT, Swing, JavaFX & SWT 7
E Alles in einem Fenster AWT, Swing, JavaFX & SWT 5
F SWT Problem mit Tabelle und Combobox in einem Wizard AWT, Swing, JavaFX & SWT 5
A Probleme mit 2 JFrames in einem Programm AWT, Swing, JavaFX & SWT 7

Ähnliche Java Themen


Oben