Visualizzazione dei risultati da 1 a 6 su 6
  1. #1
    Utente di HTML.it
    Registrato dal
    Jul 2008
    Messaggi
    9

    Swing: Immagine di sfondo e scritte sopra

    Ciao a tutti

    Quello che devo fare è un JPanel con un immagine di sfondo e sopra delle scritte fatte con JLabel o JTextField.
    Bene, ho caricato la mia immagina con questo:

    public class ImagePanel extends JPanel {

    private Image img;

    public ImagePanel(Image img) {
    this.img = img;
    Dimension size = new Dimension(img.getWidth(null), img.getHeight(null));
    setPreferredSize(size);
    setMinimumSize(size);
    setMaximumSize(size);
    setSize(size);
    setLayout(null);
    }

    protected void paintComponent(Graphics g) {
    g.drawImage(img, 0, 0, null);
    }

    E fino a qui tutto bene, l'immagine si vede.
    Poi ho aggiunto un altro pannello (JPanel) sopra quello dell'immagine che a sua volta contiene i componenti JLabel e JTextField delle scritte.
    In questo pannello ho settato setOpaque(false).

    Succede questo, solo i JTextField si vedono, ma solo se a loro volta hanno setOpaque(true), i JLabel non si vedono, opachi o non opachi che siano.
    Se tolgo il pannello dell'immagine di sfondo va tutto perfettamente.

    Che succede ?

  2. #2
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284

    Re: Swing: Immagine di sfondo e scritte sopra

    Originariamente inviato da Tomash
    Poi ho aggiunto un altro pannello (JPanel) sopra quello dell'immagine che a sua volta contiene i componenti JLabel e JTextField delle scritte.
    Sopra vuol dire "contenuto"? Cioè "figlio" del ImagePanel? In altre parole hai fatto tuoImagePanel.add(unAltroPannello) ?

    Normalmente la sovrapposizione di componenti "fratelli" è non dico critica ma più delicata per le questioni di z-order.

    Il tuo ImagePanel potrebbe benissimo fare da "contenitore" per altri componenti es. JLabel, ecc...
    tuoImagePanel.add(unaLabel);
    ....
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  3. #3
    Utente di HTML.it
    Registrato dal
    Jul 2008
    Messaggi
    9
    No, c'è un pannello base che fa da contenitore a cui ho aggiunto gli altri due (immagine e scritte).

    Provo a fare come dici tu, ad aggiungere i componenti delle scritte direttamente a quello dell'immagine.

  4. #4
    Utente di HTML.it
    Registrato dal
    Jul 2008
    Messaggi
    9
    Un momento, non posso farlo, l'immagine può esserci o non esserci, se faccio così e non carico il pannello con l'immagine non carico nemmeno le scritte.

  5. #5
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da Tomash
    No, c'è un pannello base che fa da contenitore a cui ho aggiunto gli altri due (immagine e scritte).
    In AWT/Swing la principale abilità sta solo nel saper "inscatolare" componenti, dentro contenitori, magari dentro altri contenitori, ecc.....
    E ogni contenitore può avere (o no) un layout manager specifico.

    Originariamente inviato da Tomash
    Un momento, non posso farlo, l'immagine può esserci o non esserci, se faccio così e non carico il pannello con l'immagine non carico nemmeno le scritte.
    Ma il pannello potrebbe sempre esserci e in paintComponent basterebbe fare: img non è null? la disegno, altrimenti super.paintComponent(g).
    Fare comunque sempre la invocazione super non sarebbe male.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  6. #6
    Utente di HTML.it
    Registrato dal
    Jul 2008
    Messaggi
    9
    Dopo avere provato varie combinazioni, quella che funziona è risultata quella che impila tutti i pannelli, in pratica aggiungo un nuovo pannello con l'immagine e ad esso aggiungo quello con le scritte (ora sono padre e figlio, non più fratelli).

    Curioso il fatto che aggiungendo tutti i componenti sul pannello base, drowImage per l'immagine e poi aggiunti i campi uno ad uno, appariva per un attimo limmagine di sfondo, poi spariva per lasciare il posto a lebae e textfield.

    Grazie dei consigli.

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