# Bild in einem JScrollPane anzeigen



## Guest (5. Jul 2004)

hallo,
ich hab das problem ja schonmal angesprochen und wollte es jetzt nochmal in einem eigenen thema posten weil es echt wichtig ist...
ich will ein bild in einer jscrollpane anzeigen, falls es mal größer als das fenster ist. sollte ja eigentlich nicht so schwer sein. ich mach das folgendermaßen:

```
//im konstruktor: 
this.setContentPane(getJContentPane()); 

//in der methode getJContentPane, hier ohne jscrollpane, bild wird angezeigt: 
private Container getJContentPane() { 
         if (this.c == null) { //c ist vom Typ Container    
            c = this.getContentPane(); 
            this.b = new Bild(); 
            c.add(this.b);    
         } 
         return c; 
} 

//und mit scrollpane dachte ich geht das ganze so, leider wird dann kein bild mehr angezeigt: 
private Container getJContentPane() { 
         if (this.c == null) {    
            c = this.getContentPane(); 
            this.jscrollpane = new JScrollPane(); 
            c.add(this.jscrollpane); 
            this.b = new Bild(); 
                         c.add(this.jscrollpane);    
         } 
         return c; 
   }
```
wie gesagt, sobald ich eine jscrollpane einbaue, wird das bild nicht mehr angezeigt, als wenn die pane das bild überzeichnet.
beni meinte ich soll es mal so probieren:

```
if (this.c == null) {    
            c = this.getContentPane(); 
            this.b = new Bild(); 
            this.jscrollpane = new JScrollPane( this.b );  // man muss dem JScrollPane auch was zum anzeigen geben. 
            c.add(this.jscrollpane); 

            c.add(this.jscrollpane);    
         } 
         return c; 
   }
```
dann wird zwar das bild angezeigt, aber keine scrollbalken...


----------



## Beni (5. Jul 2004)

Ich hab da noch ein Beispiel, vielleicht hilft dir das noch weiter (ist nicht 100% dasselbe, aber macht was ähnliches).


```
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.image.BufferedImage;

import javax.swing.JComponent;
import javax.swing.JFrame;
import javax.swing.JScrollPane;

public class Main {
	public static void main (String args[]) {
		Image img = createImage();
		Bild bild = new Bild( img );
		JScrollPane scroll = new JScrollPane( bild );
		
		JFrame frame = new JFrame();
		frame.getContentPane().add( scroll );
		frame.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );
		frame.setBounds( 100, 100, 200, 200 );
		frame.setVisible( true );
	}
	
	private static Image createImage(){
		BufferedImage img = new BufferedImage( 600, 600, BufferedImage.TYPE_INT_RGB );
		Graphics g = img.createGraphics();
		
		g.setColor( Color.RED );
		g.fillOval( 0, 0, 400, 400 );
		
		g.setColor( Color.GREEN );
		g.fillOval( 200, 0, 400, 400 );
		
		g.setColor( Color.BLUE );
		g.fillOval( 0, 200, 400, 400 );
		
		g.setColor( Color.LIGHT_GRAY );
		g.fillOval( 200, 200, 400, 400 );
		
		g.dispose();
		return img;
	}
}

public class Bild extends JComponent{
	private Image img;
	public Bild( Image img ){
		this.img = img;
		
		int w = img.getWidth( this );
		int h = img.getHeight( this );
		
		setPreferredSize( new Dimension( w, h ) );
	}
	
	protected void paintComponent( Graphics g ) {
		g.drawImage( img, 0, 0, this );
	}
}
```


----------



## Guest (5. Jul 2004)

ich glaub ich habs...
es ist wichtig dass getpreferedsize die gleiche größe wie das bild selber hat.... dann werden auch scrollbalken gesetzt.


----------



## Guest (5. Jul 2004)

... ich meine natürlich setPreferedSize  :wink:


----------

