Warum übermalt paint das ganze Fenster?

einfachich

Mitglied
Hallo,

ich habe ein JFrame, in das per GridLayout(3,1) drei übereinanderliegende Bereiche geschaffen werden.
In den mittleren Bereich kommt ein JPanel, auf das per paint-Methode zB eine Linie gezeichnet werden soll.

Frage:
Ich möchte in der Mitte einen schwarzen Hintergrund. Die Zeichnung soll nicht über das ganze JFrame gehen (wie im Beispiel unten), sondern nur über dem schwarzen Hintergrund geschehen.

Weiß jemand Rat?

Java:
public class Asdf extends JFrame{
  public static void main(String[] args) {
	Asdf a = new Asdf();
	a.setSize(500,500);
	a.setVisible(true);
		
	Container c = a.getContentPane();
	c.setLayout(new GridLayout(3,1));
	c.add(new JButton("1")); //im oberern Bereich ein Button 
		
	JPanel p = new JPanel(); //in der Mitte soll gezeichnet werden
	c.add(p);
		
	c.add(new JButton("3")); //im unteren Bereich ein Button
  }
  public void paint(Graphics g){  //zeichnet leider über das ganze JFrame
	g.setColor(Color.red);
	g.drawLine(0, 0, 500, 500);
  }
}

PS: Natürlich könnte ich irgendwas mit clipping machen, aber da muss ich feste Koordinaten eingeben. Die Ändern sich aber, wenn ich das JFrame mit der Maus größer ziehe. Am liebsten wäre es mir, wenn sich der Ursprung für die Zeichnung nicht linksoben am JFrame, sondern linksoben am JPanel orientiert.
 
Zuletzt bearbeitet:

einfachich

Mitglied
Danke, von paintComponent habe ich schon gelesen. Aber ich verstehe das nicht. Woher weiß die Methode paintComponent(), dass ich das JPanel meine? vg
 

einfachich

Mitglied
Das verstehe ich nicht. Wenn ich paint() von JFrame überschreibe, wird das ganze JFrame übermalt.

Ich habe jetzt eine Unterklasse von JPanel gebastelt und paint() von JFrame in diese Unterklasse verschoben. Funktioniert soweit. Aber jetzt funktioniert
Java:
setBackground(Color.black);
nicht, egal ob ich die Anweisung von Asdf oder von oben aus starte. Ich kriege einen roten Strich auf grauem Hintergrund. Weiß jemand warum?

Java:
class Qwer extends JPanel{
	public void paint(Graphics g){
		g.setColor(Color.red);
		g.drawLine(100, 0, 500, 500);
	}
}
 
Zuletzt bearbeitet:

einfachich

Mitglied
Da kommt keine Fehlermeldung. Statt ein roter Strich auf schwarzem Hintergrund, erscheint ein roter Strich auf grauem Hintergrund, so als hätte ich die Anweisung "setBackground(Color.black);" nicht gegeben.
 
M

Marcinek

Gast
Debuuge doch, ob die Methode aufgerufen wird.

Ansonsten musst du schreiben, wo sie steht.
 

einfachich

Mitglied
Die Methode wird aufgerufen. Ich kann sie entweder in dern Constructor von Qwer oder nach der Instanzierung von Qwer in Asdf ausführen.

Constructor in Qwer:
Java:
Qwer(){setBackground(Color.black);

oder nach Instanziierung in Asdf
Java:
Qwer a = new Qwer();
a.setBackground(Color.black);

Der Hintergrund des Panels bleibt leider grau.
 
U

Unregistrierter

Gast
Der Hintergrund wird auch nicht durch Magie farbig:
entweder du malst selbst ein schwarzes Rechteck vor deiner Linie
oder du rufst paint() in der oberklasse auf
 
B

Beni

Gast
Da gibts nichts zu checken, hier steht bereits die Lösung:

Der Hintergrund wird auch nicht durch Magie farbig:
entweder du malst selbst ein schwarzes Rechteck vor deiner Linie
oder du rufst paint() in der oberklasse auf

Java:
public void paintComponent( Graphics g ){
  super.paintComponent( g );

  g.setColor( Color.RED );
  g.drawLine( ... );
}
 

jgh

Top Contributor
where is the prob...:

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

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;

public class Asdf extends JFrame {
	public static void main(String[] args) {

		Asdf a = new Asdf();
		a.setLayout(new GridLayout(3, 1));
		a.add(new JButton("1")); // im oberern Bereich ein Button

		MyJPanel p = new MyJPanel();
		// in der Mitte soll gezeichnet werden
		a.add(p);

		a.add(new JButton("3")); // im unteren Bereich ein Button

		a.setSize(600, 600);
		a.setVisible(true);
		a.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
	}

}

class MyJPanel extends JPanel {

	@Override
	protected void paintComponent(Graphics g) {
		super.paintComponent(g);
		setBackground(Color.black);
		g.setColor(Color.red);
		g.drawLine(0, 0, 584, 187);
	}
}
 

einfachich

Mitglied
Danke.
Es hat an "super.paintComponent(g);" gelegen.

Ich sehe, es geht nur, wenn in der Klasse des Hauptprogramms (also Asdf) selbst keine paint()-Methode vorhanden ist. Sobald man die reinsetzt (auch wenn sie leer bleibt), gibt es wieder keinen schwarzen Hintergrund.

Trotzdem, danke!
 
Zuletzt bearbeitet:

jgh

Top Contributor
na klar geht das auch...du kannst auch in deinem "Hauptprogramm" eine paint-Methode überschreiben...aber wie der Name schon sagt, überschreibst du.

Java:
	@Override
	public void paint(Graphics g) {
		super.paint(g);
	}

solltest du aber das [c]super.paint(g)[/c] nicht aufrufen...macht er halt nichts mehr in der paint-Methode...und dann zeichnet er auch nicht sauber seine Komponenten.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
T ableitung übermalt die funktion AWT, Swing, JavaFX & SWT 3
L Scrollbar übermalt AWT, Swing, JavaFX & SWT 2
G Dialog "übermalt" Teile des Frames AWT, Swing, JavaFX & SWT 20
H 2D-Grafik Problem mit Paint AWT, Swing, JavaFX & SWT 1
frager2345 Warum paintComponent hier und nicht paint AWT, Swing, JavaFX & SWT 2
U Was ist der Unterschied von paint und paincomponent? AWT, Swing, JavaFX & SWT 3
L 2D-Grafik Swing paint|paintComponent AWT, Swing, JavaFX & SWT 2
krgewb 2D-Grafik paint-Methode wird zu oft ausgeführt AWT, Swing, JavaFX & SWT 5
S Zeichen ohne paint-Methode AWT, Swing, JavaFX & SWT 2
J Swing Wann brauche ich @Override vor der paint()-Methode? AWT, Swing, JavaFX & SWT 1
G Eine paint-Methode, 2 Welten? AWT, Swing, JavaFX & SWT 3
H Swing + Paint: Mehrere Objekte zeichnen lassen AWT, Swing, JavaFX & SWT 3
A paint-Methode aufrufen AWT, Swing, JavaFX & SWT 13
Xanny 2D-Grafik Beginner! Probleme mit Swing, Gprahics class und paint AWT, Swing, JavaFX & SWT 13
L Berechnungen in paint AWT, Swing, JavaFX & SWT 8
S Grafik: Programm kommt nicht zur paint()-Methode AWT, Swing, JavaFX & SWT 6
W Paint-Methode in anderer Klasse funktioniert nicht AWT, Swing, JavaFX & SWT 7
S 2 Paint-Methoden in einer Klasse ? AWT, Swing, JavaFX & SWT 2
J zwei Paint methoden in einer Klasse AWT, Swing, JavaFX & SWT 3
P Paint und paintComponent AWT, Swing, JavaFX & SWT 12
F 2D-Grafik Was ruft die Paint - Methode auf ? AWT, Swing, JavaFX & SWT 2
S JButton u. Label auf paint-Methode AWT, Swing, JavaFX & SWT 1
S 2 paint-Methoden in einer Klasse ? AWT, Swing, JavaFX & SWT 2
S Paint Methode ohne implements JPanel AWT, Swing, JavaFX & SWT 1
S Farbe ändern bei der paint-Methode AWT, Swing, JavaFX & SWT 5
J ActionListener soll auf paint() Methode zugreifen AWT, Swing, JavaFX & SWT 1
J Problem mit der paint Methode AWT, Swing, JavaFX & SWT 0
Junb 2D-Grafik paint() Methode bugt? AWT, Swing, JavaFX & SWT 2
C JFrame paint ohne hintergrund nutzen AWT, Swing, JavaFX & SWT 6
I Paint-Methode von nicht statischen Objekten aufrufen AWT, Swing, JavaFX & SWT 3
A Swing Paint mit Button Clear den Hintergrund säubern um wieder zeichnen zu können AWT, Swing, JavaFX & SWT 2
K 2D-Grafik Paint - Wie binde ich repaint ein? AWT, Swing, JavaFX & SWT 8
D JSlider "laggt" nach überschreiben der paint methode AWT, Swing, JavaFX & SWT 2
S paint() verzögern AWT, Swing, JavaFX & SWT 9
K AWT begrenzte anzahl paint aufrufe AWT, Swing, JavaFX & SWT 6
B Infolabel Probleme mit Paint() ? AWT, Swing, JavaFX & SWT 8
L AWT paint mit ArrayList und Iterator AWT, Swing, JavaFX & SWT 3
Furtano AWT paint braucht ein Graphics Objekt ? AWT, Swing, JavaFX & SWT 2
L Swing 64bit Problem mit paint/paintComponent AWT, Swing, JavaFX & SWT 7
A Paint Methode externer auruf AWT, Swing, JavaFX & SWT 5
T JFrame und paint() AWT, Swing, JavaFX & SWT 5
B Ablauf der paint-Methoden von JComponents AWT, Swing, JavaFX & SWT 20
J AWT Methode paint() AWT, Swing, JavaFX & SWT 4
F 2D-Grafik Hostkomponentengröße in paint AWT, Swing, JavaFX & SWT 2
L JFrame an Paint-Inhalt anpassen AWT, Swing, JavaFX & SWT 6
X Bild via FileChooser in paint-Methode laden AWT, Swing, JavaFX & SWT 2
T paint() wird nicht aufgerufen AWT, Swing, JavaFX & SWT 8
M JMenuBar im Applet und paint AWT, Swing, JavaFX & SWT 9
G paint-Methode kopiert GUI AWT, Swing, JavaFX & SWT 14
H paint überlappend AWT, Swing, JavaFX & SWT 5
E paint AWT, Swing, JavaFX & SWT 3
H Swing paint() von JPanel wird nicht aufgerufen AWT, Swing, JavaFX & SWT 10
L AWT Paint(g) im Listener aufrufen AWT, Swing, JavaFX & SWT 2
S JCheckBox Paint AWT, Swing, JavaFX & SWT 7
F AWT Probleme mit der paint() methode AWT, Swing, JavaFX & SWT 2
C Unterschiedlicher Aufruf der paint() Methode ? (AWT/Swing) AWT, Swing, JavaFX & SWT 2
L Problem mit paint Methode und Bild AWT, Swing, JavaFX & SWT 7
F Swing Paint mit Canvas Element AWT, Swing, JavaFX & SWT 35
K AWT paint wird nicht aufgerufen AWT, Swing, JavaFX & SWT 7
R LayoutManager Image Paint + Text Panel AWT, Swing, JavaFX & SWT 10
F paint-Methode des JComboboxEditorComponent AWT, Swing, JavaFX & SWT 2
S Threads in einen Frame zeichnen lassen (Paint()?!) AWT, Swing, JavaFX & SWT 5
radiac Swing JFrame - paint(g) - FrameObjects bei activeRendering AWT, Swing, JavaFX & SWT 3
I AWT paint() in MouseEvent aufrufen klappt nicht AWT, Swing, JavaFX & SWT 8
T paint() wird zweimal ausgeführt AWT, Swing, JavaFX & SWT 6
hdi Swing JLabel & paint-Methode gemixt - wie schlimm wirklich? AWT, Swing, JavaFX & SWT 5
N Paint methode anhalten und neustarten AWT, Swing, JavaFX & SWT 5
H AWT Wann ist paint() fertig? AWT, Swing, JavaFX & SWT 7
R [gelöst]Fenster schließen - trotz Endlosschleife in der Paint-Methode? AWT, Swing, JavaFX & SWT 3
W Steuerelemente und paint() in einem JPanel AWT, Swing, JavaFX & SWT 3
M Allgemeines zur paint Methode AWT, Swing, JavaFX & SWT 5
M AWT Component/Canvas erzeugt unerwünschten Rahmen bei paint AWT, Swing, JavaFX & SWT 3
T Dialog ohne Frame, direktes paint in graphics AWT, Swing, JavaFX & SWT 5
G Probleme mit repaint / paint AWT, Swing, JavaFX & SWT 6
A paint()-Methode für Videoexport nutzen AWT, Swing, JavaFX & SWT 2
K repaint() ruft paint() nicht auf AWT, Swing, JavaFX & SWT 14
J Canvas / paint() AWT, Swing, JavaFX & SWT 2
bugmenot paint() verzögert ausgeführt? AWT, Swing, JavaFX & SWT 4
S paint() in anderen Methoden AWT, Swing, JavaFX & SWT 5
J getFontMetrics außerhalb von paint(Graphics g) AWT, Swing, JavaFX & SWT 8
D Paint() Methode aus einer anderen Klasse aufrufen AWT, Swing, JavaFX & SWT 6
H paint verwenden AWT, Swing, JavaFX & SWT 3
S java.awt.Component und paint() AWT, Swing, JavaFX & SWT 4
A Paint funktioniert nicht richtig AWT, Swing, JavaFX & SWT 7
L Dynamisches Ändern der Größe in JPanel mit paint()-Methode AWT, Swing, JavaFX & SWT 8
G JScrollPane mit "paint" scrollt nicht AWT, Swing, JavaFX & SWT 2
C paint-Methode überschreiben AWT, Swing, JavaFX & SWT 19
hdi meine paint-methode macht faxen? AWT, Swing, JavaFX & SWT 21
T Variable Menge an Bildern außerhalb paint() zeichnen? AWT, Swing, JavaFX & SWT 2
G Paint und Buttons AWT, Swing, JavaFX & SWT 8
G JFrame JPanel und Paint(Image)? AWT, Swing, JavaFX & SWT 6
S Programm aufgrund von paint() zu langsam AWT, Swing, JavaFX & SWT 18
G paint() wird aufgerufen, aber nicht angezeigt AWT, Swing, JavaFX & SWT 10
G 2x Graphics in einer paint() miteinander verbinden AWT, Swing, JavaFX & SWT 11
M Probleme mit paint() aus JFrame AWT, Swing, JavaFX & SWT 2
G paint() Methode aus anderer klasse aufrufen? AWT, Swing, JavaFX & SWT 6
G Frage zum paint Prozess AWT, Swing, JavaFX & SWT 3
D JPanel und Paint AWT, Swing, JavaFX & SWT 2
B Gui und Zeichnen (paint ? ) AWT, Swing, JavaFX & SWT 4
L Anzeigen von fotos: ImageIcon oder BufferedImage + paint() ? AWT, Swing, JavaFX & SWT 5

Ähnliche Java Themen

Neue Themen


Oben