Bild ändert Größe des Gridbag Layouts

arno.jucker

Mitglied
Hallo zusammen und guten Morgen,

ich hab ein kleines Problem.
Und zwar bastle ich gerade an einer grafischen Oberfläche rum
bei der sich durch Mausklicks jeweils ein anderes Bild anzeigen lasse.

Das funktioniert auch prima, nur ändert sich mein Layout, bzw. die Größe
meines gridbag Elements, je nach Bildgröße.
Jetzt würde ich ihm gerne sagen, dass das Bild nur so groß sein darf, wie
ich ihm das beim Gridbag gesagt habe.

Das funktioniert ja aufgrund des Gridbag (wohl) nicht so einfach mit setbounds oder sonstigen ähnlichen Befehlen. Außerdem will ich ja auch keine absolute Größe angeben, sondern in Abhängigkeit der Gridbag Elements.

Java:
    ImageIcon icon = new ImageIcon();
    JLabel imageLabel = new JLabel(icon);
...
...
public void init(){
....
....

         constraints.fill = GridBagConstraints.BOTH; 
         buildConstraints(constraints, 1, 1 , 1,1,100,100);//bild
         gridbag.setConstraints(imageLabel, constraints);
         movieFrame.add(imageLabel);
Mit mouseListener ändere ich dann das Bild
Java:
	public void mouseClicked(MouseEvent arg0) {
		icon = new ImageIcon(blabla);  	        
  	        imageLabel.setIcon(icon);
	}

Kann mir jemand helfen?
Vielen Dank schon mal.
Und verschneite Grüße
 
Das geht evtll. mit setMinimumSize(), setMaximumSize() und setPreferredSize().
Wenn du in den Methoden deine Werte entsprechend angibst, sollte sich das GridBagLayout auch danach richten.
U.U. ist auch noch der Aufruf von validate() danach notwendig.
 
Hi,

vielen vielen Dank. Die Layout Form wird jetzt nicht geändert, aber nun schneidet er zu große Bilder einfach ab, anstatt sie zu skalieren.
Ich dachte das wäre mit
Java:
constraints.fill = GridBagConstraints.BOTH;
erledigt.

Sorry für diese Montag morgen Fragen.
Danke nochmals.
 
Scaliere das Bild auf die richtige Größe!
Java:
    public BufferedImage setMyImageSize(Image showImage, int iWidth, int iHeight){
        BufferedImage bufferedImage = new BufferedImage(iWidth, iHeight, BufferedImage.TYPE_INT_RGB);     // create the image's graphics
        Graphics2D g = bufferedImage.createGraphics();     // Drawing hints with focus on quality
        g.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
        g.setRenderingHint(RenderingHints.KEY_RENDERING, RenderingHints.VALUE_RENDER_QUALITY);
        g.setRenderingHint(RenderingHints.KEY_INTERPOLATION, RenderingHints.VALUE_INTERPOLATION_BICUBIC);     // Apply scalefactor
        g.drawImage(showImage, 0, 0, iWidth, iHeight, null);
        return bufferedImage;
    }

Ich weis nicht mehr wie gut und wie schnell mit dieser Methode die Bilder scaliert werden, habe den Kode aus meinen Anfängen rausgekrammt.
 

Neue Themen


Zurück
Oben