# Bilder in JScrollPane zentrieren



## Jens81 (9. Sep 2009)

Hallo zusammen,

ich gebe Bilder in einem JScrollPane aus. Das funktioniert auch soweit:


```
BufferedImage map = ImageIO.read(new File("..."));
Bild karte = new Bild();
karte.setImage(map);
showMap = new JScrollPane(karte);
showMap.setBounds(20,80,625,380);
showMap.getViewport().setBackground(Color.WHITE);
geo_reiter5.add(showMap);
ausWind.repaint();
```

Nun sollen die Bilder (unterschiedliche Größen) aber möglichst nicht in der linken, oberen Ecke angezeigt werden, sondern zentriert. Ich habe mich hier schon umgeschaut und gelesen, dass man das über ein Panel mit entsprechendem Layout machen kann / muss.

Dies ist mein Versuch, dies umzusetzen:

```
BufferedImage map = ImageIO.read(new File("..."));
Bild karte = new Bild();
karte.setImage(map);
JPanel t = new JPanel();
t.setLayout(new BorderLayout());
t.setBackground(Color.white);
t.add(BorderLayout.CENTER, karte);
showMap = new JScrollPane(t);
showMap.setBounds(20,80,625,380);
geo_reiter5.add(showMap);
ausWind.repaint();
```

Allerdings werden die Bilder immernoch links oben angezeigt. Was mache ich falsch?


----------



## Verjigorm (9. Sep 2009)

karte.setImage(map);

wäre interessant was dort gemacht wird.
Addest du das Bild auf ein Label als Icon? oder zeichnest du es selbst in der paintComponent()?


----------



## André Uhres (9. Sep 2009)

Versuch's mal so:

```
JPanel center = new JPanel(new GridBagLayout());
//center.setPreferredSize(new Dimension(map.getWidth(), map.getHeight()));
center.add(karte);
showMap = new JScrollPane(center);
```


----------



## Jens81 (9. Sep 2009)

```
public class Bild extends JComponent {

	private static final long serialVersionUID = -2465608256743822560L;
	
	private BufferedImage image; 
	 
	  public void setImage( BufferedImage image ) 
	  { 
	    this.image = image; 
	    setPreferredSize(new Dimension(image.getWidth(), image.getHeight()));
	    repaint(); 
	    invalidate();
	  } 
	 
	  protected void paintComponent( Graphics g ) 
	  { 
	    if ( image != null ) 
	      g.drawImage( image, 0, 0, this ); 
	  } 
}
```


----------



## Jens81 (9. Sep 2009)

Mit dem GridBag geht's, dass habe ich schon getestet. Danke hierfür schonmal 

Mich würd aber interessieren warum das mit dem BorderLayout nicht geht... bzw. nur CENTER scheint nicht zu funktionieren; EAST und SOUTH verändern die Bildposition.


----------



## André Uhres (9. Sep 2009)

Jens81 hat gesagt.:


> Mich würd aber interessieren warum das mit dem BorderLayout nicht geht... bzw. nur CENTER scheint nicht zu funktionieren


Der Center Bereich zentriert nicht, sondern beansprucht allen verfügbaren Platz,


----------

