paint-Methode funzt nicht

MOEP_BIBER

Aktives Mitglied
Hey Leute,
ich programmiere erst seit 3 Wochen mit Java und bring es mir selbst bei also bitte habt Nachsicht^^
Ich hab vor ner Woche ein Mastermind Spiel programmiert und hab versucht mit der paint-Methode und g.drawOval() Kreise zu erstellen.
Jedoch is einfach nichts aufgetaucht und deshalb hab ich die Ergebnisausgabe dann einfach mit Textfeldern gemacht und diese einen schwarzen Background gegeben.
Da mich aber interessieren würde was ich falsch gemacht habe und ich irgendwann mal bestimmt diese Methode brauche post ich hier meinen Code und hoffe auf Antworten ;D

den Code habe ich zusammengekürzt, eigentlich hat diese Klasse 2500 zeilen.

Java:
import java.awt.Dimension;
import java.awt.Graphics;
import javax.swing.JFrame;
import javax.swing.JPanel;


public class Test {
	private JFrame jFrame = null; 
	private JPanel jContentPane = null;

	public Test(String d) {
		initialize();
        }

	private void initialize() {
		getJFrame();
		getJContentPane();
		jFrame.setVisible(true);
		jFrame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
	}

	public void paint(Graphics g) {
		g.drawOval(20, 20, 20, 20);
		
	}

	private JFrame getJFrame() {
		if (jFrame == null) {
			jFrame = new JFrame();
			jFrame.setSize(new Dimension(438, 504));
			jFrame.setTitle("Mastermind");
			jFrame.setResizable(false);
			jFrame.setContentPane(getJContentPane());
		}
		return jFrame;
	}

	private JPanel getJContentPane() {
		if (jContentPane == null) {
			jContentPane = new JPanel();
			jContentPane.setLayout(null);
        }
		return jContentPane;
	}
}

Vielen Dank
 
In Swing zeichnet man in der paintComponent Methode und nicht in der paint (AWT).

Das JFrame hat bereits eine contentPane. brauchst du nicht extra zu erstellen.
Mach lieben ein neues JPaenl und added es der contentPane und mal darin

ca so
Java:
import java.awt.Graphics;

import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.WindowConstants;


public final class ShowImage {

	private JFrame frame;
	private ImagePanel imagePanel;

	public ShowImage() {
		init();
	}

	private void init() {
		frame = new JFrame("Screenshot");
		frame.setSize(600, 450);
		imagePanel = new ImagePanel();
		frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
		frame.getContentPane().add(imagePanel);
		frame.setVisible(true);
	}

	static class ImagePanel extends JPanel {

		public ImagePanel() {
		}

		@Override
		public void paintComponent(Graphics g) {
			super.paintComponent(g);
			g.fillOval(50, 50, 50, 50);
		}
	}

	public static void main(String[] args) throws Exception {
		new ShowImage();
	}
}
 
Annahme: in der JavaDoc zur paint() Methode ist ein Link, den du vermutlich übersehen hast. Lies dir mal durch, was da alles steht.
 
hey ich hab das ganze probiert und es funktioniert,
nur leider versteh ich es nicht und deshalb bringts mir nichts =/
ich erstell den jframe mit dem visual editor in eclipse und kopier dann mein jpanel hinein.
was ist daran falsch?
und wieso kann man die paintcomponent methode nicht einfach aufrufen das wär wesentlich einfacher find ich =)
 
In deinem Code hat die Klasse Text zwar eine paint(Graphics g), das nützt Dir beim Zeichnen nichts -ausser Du rufst Sie selbst auf.
Zum Zeichnen musst Du die paint(Graphics g) [AWT] bzw. die paintComponent(Graphics g) [Swing] einer graphischen Komponente (z.B. JComponent) überschreiben (s. Bsp von Joe).
Die paint des JFrames würde ich nicht überschreiben.
MOEP_BIBER hat gesagt.:
und wieso kann man die paintcomponent methode nicht einfach aufrufen
Das verbietet Dir niemand. Nur was bezweckst Du damit?
 
Noch ein Tipp:
Wenn man schnell ein Verwaltungsprogramm oder ähnliches mit vielen Buttons, Textfeldern, oder Tabellen machen will, sind GUI-Builder wie der Visual Editor oder der von Netbeans eigentlich ganz gut, aber, wenn man selbst was zeichnen möchte, bzw. die Graphik variabel sein soll, sollte man diese selbst von Hand schreiben und nicht zusammenklicken, das gibt nur unnötig Probleme mit erstelltem Code oder Formatierung.
 
Hey Leute,
ich hab noch ne generelle Frage zu dem ganzen:
soll man die neue Panelklasse in der Klasse "ShowImage" erstellen oder kann man ne neue Java Datei mit der Klasse im selben Package erstellen?
Eclipse schlägt mir nämlich sofort vor eine neue Datei zu erstellen und nicht das ganze im selben Code zu machen.
Also was ist besser bzw gibts da n ungeschriebenes Gesetz oder sowas?^^

MfG Biber
 
soll man die neue Panelklasse in der Klasse "ShowImage" erstellen oder kann man ne neue Java Datei mit der Klasse im selben Package erstellen?
Eclipse schlägt mir nämlich sofort vor eine neue Datei zu erstellen und nicht das ganze im selben Code zu machen.
Also was ist besser bzw gibts da n ungeschriebenes Gesetz oder sowas?^^
Da gibt's kein grundsätzliches "Gesetz". Das hängt vom Kontext ab. Welche Komplexität und welches Ausmaß hat die Klasse, wird sie nur innerhalb der Klasse "ShowImage" verwendet oder soll sie eventuell auch mal in anderen Teilen des Programms eingesetzt werden? Davon abhängig kann man sie als innere oder eigenständige Klasse definieren.
 
Die KSKB sollten hier möglichst ohne Aufwand benutzbar sein, darum wird dafür bei mir schnell mal eine innere Klasse gebastelt, anstatt 2,3,.. Files anzulegen 🙂 . Grunsätzlich aber nicht nötig.
 

Zurück
Oben