Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 13
  1. #1
    Utente di HTML.it
    Registrato dal
    Jul 2014
    Messaggi
    480

    Inserire JButton su immagine

    Ciao a tutti, in una JLabel ho inserito una immagine e vorrei inserire sopra l'immagine 2 JButton.
    codice:
    URL mapUrl = new URL("http://www......");
                Icon img = new ImageIcon(mapUrl);
                JLabel.setIcon(img);
               JLabel.repaint();
    E' possibile farlo?

  2. #2
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,254
    Quote Originariamente inviata da roquentin Visualizza il messaggio
    Ciao a tutti, in una JLabel ho inserito una immagine e vorrei inserire sopra l'immagine 2 JButton.
    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.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    Java Versions Cheat Sheet

  3. #3
    Utente di HTML.it
    Registrato dal
    Jul 2014
    Messaggi
    480
    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.
    codice:
    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();
    l'immagine è presente in una JLabel (mapHolder) che a sua volta è contenuta in un JPanel

    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

  4. #4
    Utente di HTML.it
    Registrato dal
    Jul 2014
    Messaggi
    480
    Quote Originariamente inviata da andbin Visualizza il messaggio
    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.

    Ho semplicemente fatto così:
    codice:
    mapHolder.add(zoomIn);
    mapHolder.add(zoomOut);
    dove MapHolder è la JLabel che contiene l'immagine.

    Ora me li visualizza sull'immagine ma non riesco a posizionarli, come posso fare?
    Ultima modifica di roquentin; 24-03-2015 a 15:09

  5. #5
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,254
    Quote Originariamente inviata da roquentin Visualizza il messaggio
    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
    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!

    Quote Originariamente inviata da roquentin Visualizza il messaggio
    Ora me li visualizza sull'immagine ma non riesco a posizionarli, come posso fare?
    JLabel non ha layout-manager (=posizionamento assoluto). Devi quindi dare i bounds ai componenti che hanno quel JLabel come parente strutturale.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    Java Versions Cheat Sheet

  6. #6
    Utente di HTML.it
    Registrato dal
    Jul 2014
    Messaggi
    480
    Nel senso che devo definire le coordinate dei 2 jButton all'interno della JLabel ?

  7. #7
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,254
    Quote Originariamente inviata da roquentin Visualizza il messaggio
    Nel senso che devo definire le coordinate dei 2 jButton all'interno della JLabel ?
    Sì: setLocation+setSize oppure setBounds.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    Java Versions Cheat Sheet

  8. #8
    Utente di HTML.it
    Registrato dal
    Jul 2014
    Messaggi
    480
    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?

  9. #9
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,254
    Quote Originariamente inviata da roquentin Visualizza il messaggio
    ma nel design di netbeans me li visualizza dove erano prima
    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.

    Quote Originariamente inviata da roquentin Visualizza il messaggio
    mentre se eseguo il progetto, nella GUI mi vengono visualizzati in una generica posizione all'interno dell'immagine...non capisco...per quale motivo?
    In generale le coordinate di un componente sono relative al suo contenitore. Cioè (0,0) è sempre l'angolo in alto-sinistra del componente "parente".
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    Java Versions Cheat Sheet

  10. #10
    Utente di HTML.it
    Registrato dal
    Jul 2014
    Messaggi
    480
    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?

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.