nicht sichtbares JPanel / JFrame als Image speichern

Phorx

Mitglied
Guten Morgen zusammen!

Ich möchte ein JPanel in ein Image umwandeln. Ich denke die Grundfunktion stimmt, jedoch habe ich Probleme damit, das es nicht sichtbar sein soll.

Die Klasse zu der die folgende Methode gehört wird von JPanel abgeleitet und zeichnet die Streifen im Hintergrund. cp ist ein ChartPanel von JFreeChart und wird zu Beginn auf das eigene JPanel geaddet:

Java:
public BufferedImage getBufferedImage(int width, int height){
		
		setSize(width, height);
		setPreferredSize(new Dimension(width, height));
		cp.setOpaque(false);
		

		JFrame frame = new JFrame();
		
		frame.setBackground(Color.black);
		
		frame.setSize(width, height);
		
		frame.add(this);
		frame.setVisible(true);
		BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
		
		doLayout();
		
		repaint();
		revalidate();
		
		frame.print(image.getGraphics());

		//frame.setVisible(true);
                //frame.setVisibile(false);
		
		return image;
	}

Das Problem an der Sache ist, dass ich das JFrame nicht Visible setzen möchte. Allerdings funktioniert die Bildausgabe nur mit einem sichtbaren JFrame. Mit setVisible(false); sieht es nicht so toll aus... siehe Anhang 🙂

Vielen Dank für Ideen, Hilfen und Ratschläge.

Mit freundlichem Gruß,
Phillip
 

Anhänge

  • frameCopy.JPG
    frameCopy.JPG
    67,4 KB · Aufrufe: 35
Zuletzt bearbeitet:
ich hoffe dieser Teil des Codes ist nur für uns eingefügt worden, ansonsten solltest du dir mal über dein Design Gedanken machen 😉

[java=8] JFrame frame = new JFrame();

frame.setBackground(Color.black);

frame.setSize(width, height);

frame.add(this);
frame.setVisible(true);[/code]

imho ansonsten die paintComponent(Graphics g) überschreiben und dort das Bild zeichnen lassen.

grundsätzlich solltest du deinen Frame aber nicht in einer Methode deklarieren...denn dann ist er nur innerhalb dieser Methode sichtbar!!!
 

Neue Themen


Zurück
Oben