Problem mit dem "zeichnen" per JPanel.

Kai008

Erfahrenes Mitglied
Ich wollte mal versuchen statt mit der überschrieben Paint zu zeichnen alle Bilder auf ein JPanel zu kleben und dieses dann auf das JFrame zu kleistern:

Java:
public class Main extends javax.swing.JFrame
{
	public Main()
	{
		this.setSize(800, 600);
		this.setDefaultCloseOperation(javax.swing.JFrame.EXIT_ON_CLOSE);
		this.setVisible(true);
		this.newFrame();
	}
	private void newFrame()
	{
		javax.swing.JPanel panel = new javax.swing.JPanel();
		panel.setLayout(null);
		panel.setBackground(java.awt.Color.RED);
		
		javax.swing.JLabel label =
			new javax.swing.JLabel(new javax.swing.ImageIcon("img\\0.png"));
		label.setLocation(30, 30);
		panel.add(label);
		
		this.add(panel);
	}
	public static void main(String[] args)
	{
		new Main();
	}
}

Nur habe ich das Problem, dass er das Bild nicht anzeigt. Und in vielleicht 3 von 10 Fällen färbt er auch den Hintergrund vom Beginn an Rot. Ändere ich die Größe des JFrames bessert er das nach, aber das Bild sehe ich trotzdem nicht. Wenn ich setLayout auskommentiere zeigt er zwar das Bild, allerdings auch kaum vom Beginn an, und ich bin nicht wie beim Null-Layout in der Lage, die Position zu ändern. Es wird mir immer horizontal zentriert ein bischen unter der Titelleiste angezeigt.

Bitte zeigt mir wie man sowas besser macht.
 
Hallo,

Ritchie hatte eigentlich schon den richtigen Ansatz gebracht. Was er nur nicht bedacht hatte war, dass wenn das JLabel 0x0 Pixel groß ist kann man es auch nicht sehen. Es genügt nicht nur die Location zu setzen.
Also entweder bei dir im Code noch label.setSize() einfügen oder bei label.setBounds() eine Größe eintragen.

Dein Panel wird von Anfang an rot gezeichnet. Du siehst dein Panel nur nicht nach dem Start des Programms, weil das Panel noch nicht angezeigt wird. Du zeigst nämlich erst das Fenster an und fügst dann das Panel hinzu. In einem solchen Fall muss das Fenster nämlich neu gezeichnet werden. Das erreichst du mit der Methode repaint.
Wenn du die Größe des Fensters mit der Maus änderst, wird das Fenster nämlich neu gezeichnet und deshalb siehst du dann die rote Farbe.

MFG

Sascha
 
Danke, das wars. Ich wusste nicht, dass repaint() allgemein das JFrame aktualisiert, dachte, dass das nur mit der paint(java.awt.Graphics), die ich sonst immer benutzt habe zu tun hat.
 
Die repaint()-Methode ruft ja auch die paint-Methode auf. Alles was im Fenster dargestellt wird, wird mit dieser Methode gezeichnet.

MFG

Sascha
 

Neue Beiträge

Zurück