# resize ImageIcon



## rob3000 (27. Feb 2006)

Hallo,

Ich habe verschiedene Fotos, die ich mit Hilfe von ImageIcons in einem JLabel anzeige. Jetzt möchte ich aber gerne das Photo bzw. das ImageIcon verkleinern, bevor ich es anzeige. Weiß jemand wie das funktioniert?:L 

rob ???


----------



## lin (27. Feb 2006)

forumsuche? -> #getScaledInstance


----------



## rob3000 (27. Feb 2006)

Naja das ist aber für Image-Objekte. Ich müsste ImageIcons verkleinern, da ich sie dann in einer JTable anzeigen möchte. Image-Objekte kann man ja nicht direkt in einer JTable anzeigen lassen. ImageIcons soweit ich weiß schon. 

Hat jemand eine Idee?


----------



## rob3000 (27. Feb 2006)

Kann man ein ImageIcon nicht verkleinern bzw. eben das Foto das in dem ImageIcon steckt?


----------



## lin (27. Feb 2006)

guck dir doch mal den Konstruktor von ImageIcon an... man für was gibts ne API :wink:



> ImageIcon(Image image)
> Creates an ImageIcon from an image object.


----------



## rob3000 (27. Feb 2006)

Hi,

oh sorry,danke, da hab ich nicht genau gesehen. Leider bekomme ich noch immer eine java.lang.ClassCastException.

Mein Code sieht folgendermaßen aus:


```
int result = chooser.showDialog(this, "Choose");
		switch(result) 
		{
	    	case JFileChooser.APPROVE_OPTION:
	   		 	
	    		pictures = new ArrayList();
	    		Vector images = new Vector();
	    		Vector columns = new Vector();
	    		columns.add("Images");
	    		File[] files = chooser.getSelectedFiles();
	    		for(int k = 0; k < files.length; k++)
	    		{
	    		    Image image = Toolkit.getDefaultToolkit().getImage( files[k].getAbsolutePath() );
	    		    ImageFilter filter = new ReplicateScaleFilter(60,45);
	    		    ImageProducer producer = new FilteredImageSource(image.getSource(),filter);
	    		    Image resizedImage = Toolkit.getDefaultToolkit().createImage(producer);
	    		    ImageIcon icon = new ImageIcon(resizedImage);
	    			pictures.add(files[k]);
	    			images.add(icon);
	    		}
	     
	    		DefaultTableModel model = new DefaultTableModel(images, columns);
	    		jTable = new JTable( model )
	    		{
	    			//  Returning the Class of each column will allow different
	    			//  renderers to be used based on Class
	    			public Class getColumnClass(int column)
	    			{
	    				return getValueAt(0, column).getClass();
	    			}
	    		};
	    		jTable.setPreferredScrollableViewportSize(jTable.getPreferredSize());
	     
	    		jTable.setModel(model);
		}
```
Die java.lang.ClassCastException tritt bei der Zeile auf wo ich das DefaultTableModel mit den zeilen und spalten instantiiere. Hat jemand eine Ahnung, was hier der Fehler sein könnte? - Ich habe in anderen Code-Samples gesehen, dass es eigentliche gehen müsste, ImageIcons in Tabellenzellen anzuzeigen....? :bahnhof: 

rob


----------



## rob3000 (28. Feb 2006)

also irgendwie finde ich den fehler nicht....


----------



## rob3000 (28. Feb 2006)

Hi,

Habe die exception jetzt endlich gefunden. Jetzt habe ich aber leider noch ein Problem, wenn ich jetzt Bilder auswähle kommt zwar keine Exception mehr, aber die Tabelle wird auch nicht mit den Icons gefüllt. 

Mein Code sieht folgendermaßen aus:


```
case JFileChooser.APPROVE_OPTION:
	   		 	Vector row;
	    		Vector rows = new Vector();
				Vector columns = new Vector();
				columns.add("Images");
	    		File[] files = chooser.getSelectedFiles();
	    		Object[][] data = new Object[files.length][files.length];
	    		for(int k = 0,j=0; k < files.length; k++)
	    		{
	    			row = new Vector();
	    			Image image = Toolkit.getDefaultToolkit().getImage( files[k].getAbsolutePath() );
	    			ImageFilter filter = new ReplicateScaleFilter(60,45);
	    		    ImageProducer producer = new FilteredImageSource(image.getSource(),filter);
	    		    Image resizedImage = Toolkit.getDefaultToolkit().createImage(producer);
	    		    ImageIcon icon = new ImageIcon(resizedImage);
	    			//pictures.add(files[k]);
	    			row.add(icon);
	    			rows.add(row);
	    		}
	     
	    		DefaultTableModel model = new DefaultTableModel(rows, columns);
	    		jTable = new JTable( model )
	    		{
	    			//  Returning the Class of each column will allow different
	    			//  renderers to be used based on Class
	    			public Class getColumnClass(int column)
	    			{
	    				return getValueAt(0, column).getClass();
	    			}
	    		};
	    		jTable.setPreferredScrollableViewportSize(jTable.getPreferredSize());
	     
	    		jTable.setModel(model);
```

Weiß jemand warum dieses Problem auftritt? :bahnhof: Es muss denke ich irgendwas mit der getColumnClass Methode zu tun haben...??

mfg rob


----------

