View Full Version : [Java, Swing] Immagine stretched
qual è il modo più rapido in Swing di mostrare all'interno di un componente un'immagine stretched? è possibile ad esempio caricarla come icona e metterla in un JLabel? per ora ho fatto esattamente così ma riesco solo a visualizzarla a dimensioni naturali, mentre invece vorrei che assumesse quelle del JLabel. un canvas potrebbe aiutarmi? spero di non doverla disegnare manualmente utilizzando un oggetto Graphics, ma in caso dovessi farlo quale sarebbe il posto più adatto? metodo paint overriddato in una classe derivata? metodo update? altro?
qual è il modo più rapido in Swing di mostrare all'interno di un componente un'immagine stretched? è possibile ad esempio caricarla come icona e metterla in un JLabel? per ora ho fatto esattamente così ma riesco solo a visualizzarla a dimensioni naturali, mentre invece vorrei che assumesse quelle del JLabel. un canvas potrebbe aiutarmi? spero di non doverla disegnare manualmente utilizzando un oggetto Graphics, ma in caso dovessi farlo quale sarebbe il posto più adatto? metodo paint overriddato in una classe derivata? metodo update? altro?Direi che la cosa migliore è creare un nuovo componente estendendo JComponent e fare l'override di paintComponent().
sigh, temevo una cosa del genere. qualche metodo in JLabel per allineare/stretchare l'icona m'avrebbe fatto comodo. grazie comunque dell'informazione.
non so se questo fa comomdo http://forum.java.sun.com/thread.jspa?threadID=646824&messageID=3808828
comunque se c'è un metodo che fa sta cosa in automatico è da qualche parte in Graphics2D.. dubito che JLabel ne sappia qualcosa :p
Se vuoi un'icona particolare cambiare il componente è un po' bizzarro: che c'entra lui, poverello. Crea un'icona particolare.
L'icona è un'interfaccia, Icon. Icon ha un metodo, paintIcon, che disegna sè stesso avendo a disposizione tutte le informazioni necessarie a "strecciarsi" in lungo e in largo.
In particolare ha:
il Component su cui dovrà disegnarsi (da cui ricavi l'area disegnabile)
il punto di origine a partire dal quale dovrà disegnarsi
il Graphics (è un Graphics2D) col quale disegnarsi.
Dunque:
public class StretchedIcon implement Icon {
private final Image IMAGE;
public StretchedIcon(Image image) { this.IMAGE = image; }
public int getIconWidth() { return IMAGE.getWidth(null); }
public int getIconHeight() { return IMAGE.getHeight(null); }
public void paintIcon(Component c, Graphics g, int x, int y) {
g.drawImage(IMAGE, 0, 0, c.getWidth(), c.getHeight());
}
}
Icon icon = new StretchedIcon(ImageIO.read(...
JLabel.setIcon(icon);
Nota che il mio paintIcon è alla vaccinara. Devi considerare i bordi del componente (Insets margini = c.getInsets()) per disegnare l'immagine in modo tale che non si sovrapponga con altre decorazioni. E' solo un idea di come fare.
Nota che il mio paintIcon è alla vaccinara. Devi considerare i bordi del componente (Insets margini = c.getInsets()) per disegnare l'immagine in modo tale che non si sovrapponga con altre decorazioni. E' solo un idea di come fare. grazie dell'idea ma il fatto che con questo sistema potrei sovrascrivere le decorazioni è un problema, che è anche di facile soluzione ma tanto vale non averlo: ho fatto come ha suggerito andbin (creato un nuovo componente e sovrascritto paintComponent) e il Graphics che ottengo come parametro sembra riferirsi esclusivamente a quella che in terminologia Win32 chiamerei "client area".
Devi tener conto del margine interno a prescindere dal fatto che tu voglia usare o non usare Icon.
Posto che dovresti usare Icon, ovviamente :D.
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.