Visualizzazione dei risultati da 1 a 2 su 2
  1. #1

    Oggetto: centrare un'immagine di sfondo ad un Jpanel

    Ho creato un frame in Java2 il quale visualizza un immagine su un Jpanel, vorrei sapere come posso far comparire l'immagine al centro del frame?
    Di seguito viene riportato il listato del programma:

    import java.awt.*;
    import java.awt.event.*;
    import javax.swing.*;

    /****************** CLASSE DI TEST **********************/

    public class ImageTest{

    public static void main(String[] args){
    ImageFrame frame = new ImageFrame();
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOS E); //permette di chiudere il frame
    frame.show(); //visualizza il frame
    }//main
    }//ImageTest

    /******************* CLASSE CHE COSTRUISCE IL PANNELLO *******************/

    public class ImageFrame extends JFrame{

    /*** Costruttore ***/

    /**
    @requires richiede i package java.awt, java.awt.geom e javax.swing
    @effects dopo aver acquisito le impostazioni ddello schermo dal sistema operativo crea un frame il quale risulterà un quarto dell'intero schermo
    @return restituisce un frame pari ad 1/4 del video contenente figure geometriche
    */

    public ImageFrame(){
    //acquisisce le dimensioni dello schermo
    // La classe Toolkit iteragisce con il sistema operativo
    Toolkit kit = Toolkit.getDefaultToolkit();
    Dimension screenSize = kit.getScreenSize(); //restituisce la dimensione dello schermo come oggetto Dimension
    int screenHeight = screenSize.height;
    int screenWidth = screenSize.width;

    //centra il frame nello schermo
    setSize(screenWidth/2, screenHeight/2); //dimezza la larghezza ed altezza delle dimensioni del video precdentemente acquisite
    setLocation(screenWidth/4, screenHeight/4); //consente di riposizionare il frame

    //imposta l'icona ed il titolo del frame
    Image img = kit.getImage("icon.gif");
    setIconImage(img); //prende un oggetto img e lo usa come icona del frame
    setTitle("Giuseppe SPECCHIO - Progetto LI4"); //imposta il titolo del frame

    //aggiunge un pannello al frame
    ImagePanel panel = new ImagePanel();
    panel.setBackground(SystemColor.window); //imposta il colore di sfondo del frame sul colore predefinto nel sistema operativo
    Container contentPane = getContentPane(); //restituisce l'oggetto pannello del contenuto del JFrame
    contentPane.add(panel); //aggiunge il pannello al frame
    }//ImageFrame

    }//ImageFrame{}

    /***************************** CLASSE CHE GESTISCE L'IMMAGINE ***************************/


    public class ImagePanel extends JPanel{

    /*** Variabili di Classe ***/

    private Image image;

    /**
    @requires richiede i package java.awt, java.awt.event e javax.swing
    @effects dopo aver acquisito le impostazioni dello schermo dal sistema operativo crea un frame il quale risulterà un quarto dell'intero schermo
    @return restituisce un frame pari ad 1/4 del video contenente un'immagine di sfonfo
    */

    public ImagePanel(){

    //acquisisce l'immagine
    image = Toolkit.getDefaultToolkit().getImage("Background.g if");
    MediaTracker tracker = new MediaTracker(this);
    tracker.addImage(image, 0); //aggiunge image all'elenco d'immagini da caricare
    try{ tracker.waitForID(0);} //attende che siano caricate tutte le immagini con l'id specificato
    catch (InterruptedException exception) {}
    }//ImagePanel

    public void paintComponent(Graphics g){
    super.paintComponent(g);

    //acquisisce le dimensioni dello schermo
    // La classe Toolkit iteragisce con il sistema operativo
    Toolkit kit = Toolkit.getDefaultToolkit();
    Dimension screenSize = kit.getScreenSize(); //restituisce la dimensione dello schermo come oggetto Dimension
    int screenHeight = screenSize.height;
    int screenWidth = screenSize.width;

    //disegna l'immagine
    g.drawImage(image, 0, 0, null); //per ottenere l'immagine al centro del frame????
    }//paintComponent

    }//ImagePanel{}
    Giuseppe SPECCHIO

  2. #2
    Utente di HTML.it
    Registrato dal
    Jun 2003
    Messaggi
    45

    Centrare l'immagine

    Buonasera! Dopo una lettura del codice, per centrare l'immagine nel panel occorre eseguire un semplice calcolo a livello di pixel.
    Mediante l'oggetto di classe ToolKit hai acquisito le dimensioni dello schermo assegnandole alla variabile screenSize di tipo Dimension.
    Ciò che ho fatto non è stato altro che settare le coordinate del punto dell'angolo iniziale dell'immagine, in maniera tale da ottenere il punto centrale dell'immagine, in posizione metà ascissa schermo e metà ordinata schermo (naturalmente della risoluzione). Per fare questo ho calcolato la metà dell'ascissa della risoluzione video:
    int screenWidth=screenSize.width/2;
    Allo stesso modo ho calcolato la metà dell'ordinata della risoluzione video:
    int screenHeight=screenSize.height/2;
    Avendo questi due dati, le coordinate del punto dell'angolo sinistro dell'immagine, possono essere calcolate facendo la differenza tra la dimensione metà ottenuta (del video) meno la dimensione metà dell'immagine, eseguendo così una semplice differenza di segmenti che portano il punto centrale dell'immagine proprio al centro del video, centrando dunque l'immagine nel panel. Quest'ultima parte e per aver più chiare le idee ecco la tua classe ImagePanel, l'unica modificata.
    I valori ottenuti saranno quelli da immettere come parametri all'interno del metodo drawImage!

    package forum; //Serve nell'area di sviluppo dove lavoro
    import java.awt.*;
    import java.awt.event.*;
    import javax.swing.*;

    /**
    *

    Title: Risoluzione bug Forum</p>
    *

    Description:Immagine centrata </p>
    *

    Copyright: Copyright (c) 2003</p>
    *

    Company: </p>
    * @author ivanet & diabolik860
    * @version 1.0
    */

    /***************************** CLASSE CHE GESTISCE L'IMMAGINE ***************************/


    public class ImagePanel extends JPanel{

    /*** Variabili di Classe ***/

    private Image image;

    /**
    @requires richiede i package java.awt, java.awt.event e javax.swing
    @effects dopo aver acquisito le impostazioni dello schermo dal sistema operativo crea un frame il quale risulterà un quarto dell'intero schermo
    @return restituisce un frame pari ad 1/4 del video contenente un'immagine di sfonfo
    */

    public ImagePanel(){

    //acquisisce l'immagine
    image = Toolkit.getDefaultToolkit().getImage("C:/WINDOWS/BACKGRND.GIF");
    MediaTracker tracker = new MediaTracker(this);
    tracker.addImage(image, 0); //aggiunge image all'elenco d'immagini da caricare
    try{ tracker.waitForID(0);} //attende che siano caricate tutte le immagini con l'id specificato
    catch (InterruptedException exception) {}
    }//ImagePanel

    public void paintComponent(Graphics g){
    super.paintComponent(g);

    //acquisisce le dimensioni dello schermo
    // La classe Toolkit iteragisce con il sistema operativo
    Toolkit kit = Toolkit.getDefaultToolkit();
    Dimension screenSize = kit.getScreenSize(); //restituisce la dimensione dello schermo come oggetto Dimension
    int screenHeight = screenSize.height / 2; //Ottieni la metà della lunghezza dello schermo
    int screenWidth = screenSize.width / 2; //Ottieni la metà della larghezza dello schermo
    //disegna l'immagine
    int centroAscissaImage=screenWidth - image.getWidth(null)/2; //Metà larghezza schermo (400) meno metà larghezza immagine, ottenendo l'ascissa del centro dell'immagine
    int centroOrdinataImage=screenHeight - image.getHeight(null)/2;//Metà lunghezza schermo (300) meno metà lunghezza immagine, ottenendo l'ordinata del centro dell'immagine
    g.drawImage(image,centroAscissaImage,centroOrdinat aImage,null);
    }//paintComponent

    }//ImagePanel{}


    ivanet
    ivanet

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