Visualizzazione dei risultati da 1 a 8 su 8
  1. #1
    Utente di HTML.it
    Registrato dal
    Feb 2006
    Messaggi
    62

    Java: JPanel con immagine di sfondo

    Salve, sapete dirmi se è possibile impostare un'immagine di sfondo in una JPanel?
    O se esiste un'oggetto (tipo JLabel) per risolvere il problema?
    O, ancora meglio, se la JFrame supporta una proprietà come immagine di sfondo?
    Grazie!
    CIAO!
    Catia

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

    Re: Java: JPanel con immagine di sfondo

    Originariamente inviato da catia.ci
    Salve, sapete dirmi se è possibile impostare un'immagine di sfondo in una JPanel?
    O se esiste un'oggetto (tipo JLabel) per risolvere il problema?
    O, ancora meglio, se la JFrame supporta una proprietà come immagine di sfondo?
    Grazie!
    CIAO!
    Catia
    Estendi JPanel e fai l'override del metodo paintComponent.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  3. #3
    Puoi usare una JLabel settando le dimensioni uguali a quelle del JPanel e poi col metodo setIcon setti l'immagine di sfondo della JLabel (oppure l'immagine la puoi specificare direttamente nel costruttore della JLabel)

  4. #4
    Utente di HTML.it
    Registrato dal
    Nov 2004
    Messaggi
    107
    fai come ha detto andbin!

    Estendi la classe JPanel e la chiami come vuoi tu (ad esempio BackgroundedFrame) e praticamente ti crei una classe personalizzata che abbia uno sfondo! Ti faccio un esempio:

    codice:
    public class BackgroundedFrame extends JPanel{
      BufferedImage img;
      int width;
      int height;
    
      public BackgroundedFrame(File f){
        super(true); //crea un JPanel con doubleBuffered true
        try{
          setImage(ImageIO.read(f));
        } catch(Exception e) {}
    
      public void setImage(BufferedImage img){
        this.img = img;
        width = img.getWidth();
        height = img.getHeight();
      }
    
      // sovrascrivi il metodo paintComponent passandogli l'immagine partendo dalle coordinate 0,0 senza usare un ImageObserver (null)
      public void paintComponent(Graphics g){
        super.paintComponent(g);
        g.drawImage(img, 0, 0, null);
      }
    }
    Ovviamente partendo da questo puoi creare altri costruttori sovraccarichi magari passandogli direttamente la stringa con il percorso del file, poi te la converti in File e poi in BufferedImage per richiamarti il metodo setImage!

    Tutto chiaro? Se hai problemi chiedi pure! Ciao!
    Giovanni

  5. #5
    Utente di HTML.it
    Registrato dal
    Feb 2006
    Messaggi
    62
    Grazie dell'aiuto! Mi sapete però dire in quale libreria posso trovare la classe BufferedImage ? E' supportata in Java 1.5.0???
    Fatemi sapere!

  6. #6
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da catia.ci
    Mi sapete però dire in quale libreria posso trovare la classe BufferedImage ? E' supportata in Java 1.5.0???
    java.awt.image.BufferedImage disponibile da ... sempre.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  7. #7
    Scusate, una domanda. E per sovrapporre due immagini come si può fare?
    Io avevo provato così, ma naturalmente non funziona.
    codice:
    import java.awt.*;
    import javax.imageio.*;
    import javax.swing.*;
    import java.io.*;
    import java.awt.image.BufferedImage;
    
    public class Immagini
    {
    	public static void main (String args [])
    	{
    		JFrame f=new JFrame ("Immagini");
    		File file=new File(percorso);
    		JPanel p=new BackgroundedFrame(file);
    		File file1=new File(percorso);
    		p=new BackgroundedFrame(file1);
    		
    		f.add(p);
    		f.setVisible(true);
    		
    	}
    }
    
    class BackgroundedFrame extends JPanel
    {
      	BufferedImage img;
      	int width;
      	int height;
    
      	public BackgroundedFrame(File f)
      	{
        	      super(true); //crea un JPanel con doubleBuffered true
        	      try
        	      {
          		   setImage(ImageIO.read(f));
        	      } 
        	      catch(Exception e) {}
            }
    
      	public void setImage(BufferedImage img)
      	{
        	      this.img = img;
        	      width = img.getWidth();
        	      height = img.getHeight();
      	}
    
      // sovrascrivi il metodo paintComponent passandogli l'immagine partendo dalle coordinate 0,0 senza usare un ImageObserver (null)
      	public void paintComponent(Graphics g)
      	{
        	      super.paintComponent(g);
        	      g.drawImage(img, 0, 0, null);
      	}
    }

  8. #8
    appena risolto..grazie comunque

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.