Visualizzazione dei risultati da 1 a 10 su 13

Hybrid View

  1. #1
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    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.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  2. #2
    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

  3. #3
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    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.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

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

  5. #5
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    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.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

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 © 2026 vBulletin Solutions, Inc. All rights reserved.