Visualizzazione dei risultati da 1 a 4 su 4

Discussione: sfondo JScrollPane

  1. #1
    Utente di HTML.it
    Registrato dal
    Jun 2008
    Messaggi
    396

    sfondo JScrollPane

    Ho scritto questo codice, pensavo bastasse per impostare lo sfondo al pannello con lo scroll, ma mi sbagliavo. Sapete darmi una mano a correggerlo?

    codice:
    public class backgroundedScrollPanel extends javax.swing.JScrollPane
    {
        protected Image img;
    
        public backgroundedScrollPanel(String localURL)
        {
            super();
            try
            {this.img = ImageIO.read(getClass().getResource(localURL));}
            catch (IOException ex)
            {System.out.print("Impossibile leggere l'immagine per creare il pane \n");}
        }
    
        public void setImage(String immagine)
        {
           try
            {this.img = ImageIO.read(getClass().getResource(immagine));}
    
            catch (IOException e)
            {System.out.print("Impossibile caricare l'immagine per creare il pane \n");}
        }
    
        @Override
        /* override del metodo paintComponent: questo metodo viene chiamato automaticamente per questo e-
         * lemento grafico ogni volta che esso viene disegnato sullo schermo. Noi non facciamo altro  che
         * disegnare esclusivamente un'immagine delle stesse dimensioni del pane                   */
    
       protected void paintComponent(Graphics g) {
            if (img == null) {
                super.paintComponent(g);
                System.out.print("Impossibile caricare l'immagine per creare il pane \n");
            } else {
                int panelWidth = getWidth();
                int panelHeight = getHeight();
    
                 g.drawImage(img,0,0,panelWidth,panelHeight,null);
    
                    }
                }
    
    }

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

    Re: sfondo JScrollPane

    Originariamente inviato da Salinas
    Ho scritto questo codice, pensavo bastasse per impostare lo sfondo al pannello con lo scroll, ma mi sbagliavo.
    JScrollPane ha dentro un JViewport che è quello che alla fine contiene il componente "view" da scrollare.
    Quindi anche se disegni sul JScrollPane, "sopra" la sua superficie c'è il JViewport.

    Il primo passo verso la soluzione: invocare setOpaque(false) sul JViewport che ottieni da getViewport(). In modo che il JViewport sia "trasparente".

    Ma ci sarebbe un secondo altro problema. Quale è il componente che fa da "view"??? Perché JViewport normalmente occupa tutto lo spazio rettangolare disponibile escludendo le barre gestite da JScrollPane. E al componente che fa da "view" fisicamente viene fatto occupare tutto lo spazio disponibile.
    Morale: se il componente che fa da "view" (es. un JTextArea o un JTable) è "opaco", allora comunque non vedi ancora nulla dello sfondo!!


    Ah, quei catch con quei messaggi nei costruttori non sono appropriati. Quel messaggio nel paintComponent non è appropriato.
    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
    Jun 2008
    Messaggi
    396
    dentro allo scrollPane ci metto un'immagine.
    Si infatti non basta, nei bordi si intravede l'immagine sottostante ma cmq si vede tutto bianco, lo sfondo non è visibile.

    Hai qualche altro suggerimento?

  4. #4
    Utente di HTML.it
    Registrato dal
    Jun 2008
    Messaggi
    396

    [RISOLTO]

    Ho risolto mettendo dentro il jScrollPane(classico) un pannello con lo sfondo personalizzato.
    Adesso funziona!

    Ciao e grazie dell'attenzione

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.