gestrechtes Bild in JPanel,

Status
Nicht offen für weitere Antworten.

Developer_X

Top Contributor
Hi, ich würde gern wissen, wie man ein Bild in ein JPanel einfügt, und dieses Bild dann strecht, sodass egal wie groß ich mein Fenster mache, oder auch kleiner mache, sich das bild mitverkleinert bzw. vergrößert und dass das bild immer voll und ganz zu sehen ist, wie geht das?
 
- Überschreib paintComponent des JPanels. (und ruf als erstes super.paintComponent auf...)
- Es gibt eine Graphics#drawImage Methode, die das Bild auf eine bestimmte Breite/Höhe skaliert
 
in etwa so?
Java:
package Start;

import javax.imageio.*;
import javax.swing.*;
import java.awt.*;
import java.awt.image.*;
import java.io.*;

@SuppressWarnings("serial")
public class JavaImage extends JFrame 
{
	public JavaImage()
	{
		super("Test");
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		setSize(400,400);
		setLayout(new BorderLayout());
		
		//Component
		JPanel panel = new JPanel()
		{
			public void paintComponent()
			{
				BufferedImage img = null;
				try {
				    img = ImageIO.read(new File("F:/ScreenShot.Lvl_20.jpg"));
				} catch (IOException e) {
				}


				Graphics g = null;
				 super.paintComponent(g);
				 g.drawImage(img,20,20,this);
			}
		};
		add(panel,"Center");
		
		setVisible(true);
	}
	public static void main(String[]args)
	{
		new JavaImage();
	}
}

geht leider nicht, da erscheint kein bild
 
Java:
                Graphics g = null;
super.paintComponent(g);
Kein Kommentar. Schwachsinn.
...


Du musst natürlich diese Methode überschreiben:
Java:
public void paintComponent(Graphics g){
Der Aufruf von super.paintComponent kommt direkt am Anfang der Methode

Beim Aufruf der drawImage Methode brauchste außerdem noch 2 weitere Parameter damit das Bild skaliert wird, schau einfach mal in die API.

Außerdem solltest du auf keinen Fall das Image innerhalb der paintComponent Methode laden. Sonst wird das Bild bei jedem neuzeichnen der GUI neu von der Festplatte geladen...
 
Zuletzt bearbeitet:
ok aber jetzt ist gar kein bild zu sehen, why?
Java:
package Start;

import javax.imageio.*;
import javax.swing.*;
import java.awt.*;
import java.awt.image.*;
import java.io.*;

@SuppressWarnings("serial")
public class JavaImage extends JFrame 
{
	BufferedImage img;
	JPanel panel;
	public JavaImage()
	{
		super("Test");
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		setSize(400,400);
		setLayout(new BorderLayout());
		
		//Image initialising
          try 
          {
              img = ImageIO.read(new File("F:/ScreenShot.Lvl_20.jpg"));
          } 
          catch (IOException e)
          {
          }

		//Component
		panel = new JPanel()
		{
			public void paintComponent(Graphics g)
			{
				super.paintComponent(g);
				
				g.drawImage(img,0,0,panel.getX(),panel.getY(),this);
			}
		};
		add(panel,"Center");

		setVisible(true);
	}
	public static void main(String[]args)
	{
		new JavaImage();
	}
}
Ich will nämlich dass das bild so groß wie der Panel ist, gestrecht wird versteht ihr?
 
man bin ich doof heute
das ist die lösung
Java:
				g.drawImage(img,0,0,panel.getSize().width,panel.getSize().height,this);
 
Ich will nämlich dass das bild so groß wie der Panel ist, gestrecht wird versteht ihr?
Und deswegen skalierst du das Bild beim malen auf die Postition des panels? Macht Sinn...
€dit: Mittlerweile bist du selber draufgekommen.


Ansonsten:
Dein catch-Block beim laden des Bildes ist leer, deswegen wirst du die Exception die gegebenfalls geschmissen wird nicht sehen..
 
Status
Nicht offen für weitere Antworten.

Zurück
Oben