Resize von Image nach Resize von Button

B3ast

Mitglied
Hallo,

ich habe folgendes Problem bei dem ich leider auch über Google nicht weitergekommen bin.

Ich habe ein Frame mit drei ToggleButtonwidgets. Die drei Buttons skalieren/resizen mit dem Frame. Ziehe ich das Frame größer werden die Buttons sowohl horizontal als auch vertikal angepasst/resized.

Die Buttons wiederrum enthalten ein ImageIcon welches ich mit der Methode "getScaledInstance" auf den Button anpasse. Die Icons skalieren also mit dem Button und der Button mit dem Fenster. Ziel soll sein, dass sich das Icon der Buttons nach dem Ziehen vom Frame an die jeweiligen Frames anpasst.

Java:
ImageIcon img = new ImageIcon(getClass().getResource("/tabledemo/final70.png"));
                img.setImage(img.getImage().getScaledInstance(jToggleButton1.getSize().width - 4, jToggleButton1.getSize().height - 4, Image.SCALE_SMOOTH));
                jToggleButton1.setIcon(img);

Das funktioniert grundsätzlich auch super solange das Fenster größer wird. Wird das Frame jedoch kleiner resizen sich die Buttons nicht zurück da das Icon bereits mehr Platz braucht, welcher nach dem Resizen des Buttons nicht mehr zur Verfügung steht.

Gibt es eine Möglichkeit (vll. durch Überschreiben einer Supermethode, aber welcher) das Vorhaben umzusetzen? Oder übersehe ich grundlegendes?

Danke schonmal! 🙂
 
Hallo B3ast,
generell sind ImageIcons immer sehr unhandlich besser Funktioniert so etwas mit Images bzw. BufferedImages. Bei deinem Problem würde ich dir empfehlen eine SubClass vom JToggleButton zu schreiben die du um den Parameter eines Background Images erweiterst.

ImageToggleButton.java
Java:
import java.awt.Graphics;
import java.awt.Image;

import javax.swing.JToggleButton;


public class ImageToggleButton extends JToggleButton{
	private Image img;
	public ImageToggleButton() {
		setContentAreaFilled(false);
	}
	@Override
	protected void paintComponent(Graphics g) {
		if(getImg()!=null)
		g.drawImage(getImg(), 0, 0, getWidth(),getHeight(),this);
		super.paintComponent(g);
	}
	public Image getImg() {
		return img;
	}
	public void setImg(Image img) {
		this.img = img;
	}
}

Gruß Simon 🙂
 

Zurück
Oben