JPanel con sfondo immagine

di il
4 risposte

JPanel con sfondo immagine

Salve a tutti, mi sono appena iscritta al forum...Ho un problema...vorrei creare una jframe che abbia un'immagine di sfondo...fin qui nessun problema...A questa finestra vorrei aggiungere dei pulsanti, delle label e cosi' via... Riesco anche ad aggiungere questi componenti ma non me li posiziona nel punto che vorrei, perchè io li vorrei al centro... Forse dovrei aggiungere un altro jPanel e a questo aggiungere i componeti... ma poi mi andrebbe a coprire il jPanel con l'immagine...non so... Di seguito inserisco il codice utilizzato...Grazie anticipatamente se qualcuno mi aiuta...
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Container;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.GridBagConstraints;
import java.awt.Image;
import java.awt.Insets;
import java.io.File;
import java.io.IOException;

import javax.imageio.ImageIO;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;

import quicktime.qd.GDevice;



public class Home {

	@SuppressWarnings("deprecation")
	
	public static void main(String[] args) {
	
		Finestra finestra = new Finestra();
		finestra.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		finestra.show();

	}

}

class Finestra extends JFrame{

	private static final long serialVersionUID = -5303040173658951059L;
	private JLabel intestatario = null;
	private JLabel via = null;
	private JLabel comune = null;
	private JLabel partitaIva = null;
	
	public Finestra(){
		setTitle("Home");
		setSize(825, 550);
		PannelloImmagini pannelloImmagini = new PannelloImmagini();
		Container contentPane = getContentPane();
		//Label Intestatario
		GridBagConstraints gridBagConstraints = new GridBagConstraints();
		gridBagConstraints.gridx = 1;
		gridBagConstraints.insets = new Insets(-350, 0, 0, 0);
		gridBagConstraints.gridy = 0;
		intestatario = new JLabel();
		intestatario.setText("Prova");
		intestatario.setForeground(new Color(255, 0, 51));
		intestatario.setFont(new Font("Brush Script MT", Font.PLAIN, 38));
		//Label Via
		GridBagConstraints gridBagConstraints11 = new GridBagConstraints();
		gridBagConstraints11.gridx = 1;
		gridBagConstraints11.gridy = 1;
		gridBagConstraints11.insets = new Insets(-270, 0, 0, 0);
		via = new JLabel();
		via.setLocation(200, 100);
		via.setText("Prova");
		via.setForeground(new Color(0, 102, 102));
		via.setFont(new Font("Brush Script MT", Font.PLAIN, 30));
		// Label Comune
		GridBagConstraints gridBagConstraints2 = new GridBagConstraints();
		gridBagConstraints2.gridx = 1;
		gridBagConstraints2.gridy = 2;
		gridBagConstraints2.insets = new Insets(-195, 0, 0, 0);
		comune = new JLabel();
		comune.setText("Prova");
		comune.setForeground(new Color(0, 102, 102));
		comune.setFont(new Font("Brush Script MT", Font.PLAIN, 30));
		// Label P.Iva
		GridBagConstraints gridBagConstraints3 = new GridBagConstraints();
		gridBagConstraints3.gridx = 1;
		gridBagConstraints3.gridy = 3;
		gridBagConstraints3.insets = new Insets(-120, 0, 0, 0);
		partitaIva = new JLabel();
		partitaIva.setText("Prova");
		partitaIva.setForeground(new Color(0, 102, 102));
		partitaIva.setFont(new Font("Brush Script MT", Font.PLAIN, 28));
		pannelloImmagini.add(intestatario);
		pannelloImmagini.add(via);
		pannelloImmagini.add(comune, gridBagConstraints2);
		pannelloImmagini.add(partitaIva, gridBagConstraints3);
		getContentPane().add(pannelloImmagini);
	}
	
}

class PannelloImmagini extends JPanel{
	
	private static final long serialVersionUID = 6679038779869120082L;
	private Image image;

	public PannelloImmagini(){
		
		try {
			image = ImageIO.read(new File ("./DSC00331.gif"));
		} catch (IOException e) {
			e.printStackTrace();
		}
		
	}
	
	public void paintComponent(Graphics g){
		
		super.paintComponent(g);
		if (image==null)
			return;
		
		//Disegno l'immagine dall'angolo superiore sinistro
		
		g.drawImage(image,0,0,null);
		
	}
	
}

4 Risposte

  • Re: JPanel con sfondo immagine

    Inserisci un nuovo jpanel però trasparente cosi non dovrebbe coprire l'immagine del jpanel principale.
    Prova ad utilizzare il metodo
    setOpaque (false);
    dell'oggetto jpanel per renderlo trasparente.
  • Re: JPanel con sfondo immagine

    Grazie che hai risposto... avevo già provato così... e per sicurezza stamattina ho riprovato di nuovo... ma forse sbaglio qualcosa... rimando il codice con il suggerimento che mi hai dato, così puoi vedere se ho sbagliato...
    
    import java.awt.BorderLayout;
    import java.awt.Color;
    import java.awt.Container;
    import java.awt.Font;
    import java.awt.Graphics;
    import java.awt.GridBagConstraints;
    import java.awt.Image;
    import java.awt.Insets;
    import java.io.File;
    import java.io.IOException;
    
    import javax.imageio.ImageIO;
    import javax.swing.JFrame;
    import javax.swing.JLabel;
    import javax.swing.JPanel;
    
    import quicktime.qd.GDevice;
    
    
    
    public class Home {
    
    	@SuppressWarnings("deprecation")
    	
    	public static void main(String[] args) {
    	
    		Finestra finestra = new Finestra();
    		finestra.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    		finestra.show();
    
    	}
    
    }
    
    class Finestra extends JFrame{
    
    	private static final long serialVersionUID = -5303040173658951059L;
    	private JLabel intestatario = null;
    	private JLabel via = null;
    	private JLabel comune = null;
    	private JLabel partitaIva = null;
    	
    	public Finestra(){
    		setTitle("Home");
    		setSize(825, 550);
    		PannelloImmagini pannelloImmagini = new PannelloImmagini();
    		JPanel jPanel = new JPanel();
    		jPanel.setOpaque(false);
    		//Label Intestatario
    		GridBagConstraints gridBagConstraints = new GridBagConstraints();
    		gridBagConstraints.gridx = 1;
    		gridBagConstraints.insets = new Insets(-350, 0, 0, 0);
    		gridBagConstraints.gridy = 0;
    		intestatario = new JLabel();
    		intestatario.setText("Prova");
    		intestatario.setForeground(new Color(255, 0, 51));
    		intestatario.setFont(new Font("Brush Script MT", Font.PLAIN, 38));
    		//Label Via
    		GridBagConstraints gridBagConstraints11 = new GridBagConstraints();
    		gridBagConstraints11.gridx = 1;
    		gridBagConstraints11.gridy = 1;
    		gridBagConstraints11.insets = new Insets(-270, 0, 0, 0);
    		via = new JLabel();
    		via.setLocation(200, 100);
    		via.setText("Prova");
    		via.setForeground(new Color(0, 102, 102));
    		via.setFont(new Font("Brush Script MT", Font.PLAIN, 30));
    		// Label Comune
    		GridBagConstraints gridBagConstraints2 = new GridBagConstraints();
    		gridBagConstraints2.gridx = 1;
    		gridBagConstraints2.gridy = 2;
    		gridBagConstraints2.insets = new Insets(-195, 0, 0, 0);
    		comune = new JLabel();
    		comune.setText("Prova");
    		comune.setForeground(new Color(0, 102, 102));
    		comune.setFont(new Font("Brush Script MT", Font.PLAIN, 30));
    		// Label P.Iva
    		GridBagConstraints gridBagConstraints3 = new GridBagConstraints();
    		gridBagConstraints3.gridx = 1;
    		gridBagConstraints3.gridy = 3;
    		gridBagConstraints3.insets = new Insets(-120, 0, 0, 0);
    		partitaIva = new JLabel();
    		partitaIva.setText("Prova");
    		partitaIva.setForeground(new Color(0, 102, 102));
    		partitaIva.setFont(new Font("Brush Script MT", Font.PLAIN, 28));
    		//pannelloImmagini.add(intestatario);
    		//pannelloImmagini.add(via);
    		//pannelloImmagini.add(comune, gridBagConstraints2);
    		//pannelloImmagini.add(partitaIva, gridBagConstraints3);
    		jPanel.add(intestatario,gridBagConstraints);
    		getContentPane().add(jPanel);
    		getContentPane().add(pannelloImmagini);
    	}
    	
    }
    
    class PannelloImmagini extends JPanel{
    	
    	private static final long serialVersionUID = 6679038779869120082L;
    	private Image image;
    
    	public PannelloImmagini(){
    		
    		try {
    			image = ImageIO.read(new File ("./DSC00331.gif"));
    		} catch (IOException e) {
    			e.printStackTrace();
    		}
    		
    	}
    	
    	public void paintComponent(Graphics g){
    		
    		super.paintComponent(g);
    		if (image==null)
    			return;
    		
    		//Disegno l'immagine dall'angolo superiore sinistro
    		
    		g.drawImage(image,0,0,null);
    		
    	}
    	
    }
    
  • Re: JPanel con sfondo immagine

    Ho risolto da sola il problema...Scrivo la soluzione che puo' essere di aiuto anche a qualche altro...Nel codice avevo dimenticato di dichiarare che tipo di layout deve avere il pannello... Il codice è il seguente...
    pannelloImmagini.setLayout(new GridBagLayout());
  • Re: JPanel con sfondo immagine

    Scusa ma non ho avuto tempo di passare da questo sito, quindi di vedere il codice che hai scritto. Comunque sono contento che hai risolto.
Devi accedere o registrarti per scrivere nel forum
4 risposte