Ciao a tutti, in una JLabel ho inserito una immagine e vorrei inserire sopra l'immagine 2 JButton.
E' possibile farlo?codice:URL mapUrl = new URL("http://www......"); Icon img = new ImageIcon(mapUrl); JLabel.setIcon(img); JLabel.repaint();
Ciao a tutti, in una JLabel ho inserito una immagine e vorrei inserire sopra l'immagine 2 JButton.
E' possibile farlo?codice:URL mapUrl = new URL("http://www......"); Icon img = new ImageIcon(mapUrl); JLabel.setIcon(img); JLabel.repaint();
Innanzitutto: motivo? Ovvero, quale è l'obiettivo finale?
Tecnicamente si tratta solo di questioni di "layout". Una possibilità è quella di sfruttare il posizionamento "assoluto" dei componenti. Non è una bella cosa, in generale, ma per casi estremi si può fare. Tieni presente che i layout manager, perlomeno tutti quelli basilari, non permettono sovrapposizioni di componenti. Inoltre gestire lo z-order (ovvero strati diversi di componenti slegati tra di loro) è sempre stato abbastanza critico (per cose davvero avanzate c'è infatti JLayeredPane).
Un'altra possibilità è data da una caratteristica dei componenti Swing. Tecnicamente sono tutti dei container, perché JComponent estende java.awt.Container. Quindi sono possibili casi un po' assurdi del tipo: un JButton che contiene un JTextField o un JTextArea che contiene dei JCheckBox. Generalmente hanno poco senso. Usare un JLabel come "contenitore" infatti generalmente non si fa .... nel tuo caso potrebbe forse essere accettabile.
Ci sono comunque anche altri modi ... ripeto che tutto dipende dagli obiettivi finali.
P.S. repaint(); non ti serve in quel codice mostrato.
Ok la questione è questa:
ho l'immagine di una mappa che (che ricevo tramite api di google static maps).
Ho già costruito due JButton per lo zoom in e lo zoom out che fanno il loro dovere. Ora vorrei spostare questi due bottoni direttamente sull'immagine, in un angolino.
l'immagine è presente in una JLabel (mapHolder) che a sua volta è contenuta in un JPanelcodice:URL mapUrl = new URL("http://maps.googleapis.com/maps/api/staticmap?center=Bayingol,china&zoom=2&size=600x500&sensor=false&language=en&maptype=roadmap"); Icon img = new ImageIcon(mapUrl); mapHolder.setIcon(img); mapHolder.repaint();
P.S. il repaint(); mi serve perchè questa parte di codice si trova all'interno dell'actioperformed di un Jbutton che mi aggiorna l'immagine
Ultima modifica di roquentin; 24-03-2015 a 14:45
Ultima modifica di roquentin; 24-03-2015 a 15:09
No, ripeto che repaint() non ti serve. setIcon "sa" già chiedere il repaint. In generale ai componenti Swing non serve chiedere esplicitamente repaint. Hanno tutta la logica per sapere se/come/dove/quando fare un repaint della loro superficie.
Piuttosto dovresti preoccuparti di una cosa più rilevante: quando ImageIcon carica da url, utilizza dietro le quinte la API del Toolkit, in modo specifico il suo getImage(). Che però sfrutta un meccanismo di "caching", cioè a parità di url, ti restituisce sempre lo stesso oggetto Image. Quindi attenzione a quanti url presumi vengano gestiti!
JLabel non ha layout-manager (=posizionamento assoluto). Devi quindi dare i bounds ai componenti che hanno quel JLabel come parente strutturale.
Nel senso che devo definire le coordinate dei 2 jButton all'interno della JLabel ?
Ok però succede una cosa strana: ho aggiunto i due JButton con add() alla JLabel ma nel design di netbeans me li visualizza dove erano prima mentre se eseguo il progetto, nella GUI mi vengono visualizzati in una generica posizione all'interno dell'immagine...non capisco...per quale motivo?
Onestamente, quali siano le implicazioni (spesso più negative che positive) con gli editor di GUI (parlando in generale) .... non lo so. Personalmente non uso alcun editor "grafico" delle interfacce desktop.
In generale le coordinate di un componente sono relative al suo contenitore. Cioè (0,0) è sempre l'angolo in alto-sinistra del componente "parente".
ma a quanto pare non è molto consigliato utilizzare setBounds per il posizionamente, in quanto la posizione può variare anche in base alla scelta del L&F, giusto?