Visualizzazione dei risultati da 1 a 5 su 5
  1. #1
    Utente di HTML.it
    Registrato dal
    Jan 2014
    Messaggi
    8

    [newbie] Problema con un Jframe e immagine!

    Ciao a tutti,

    E' da poco che ho preso in mano java e sono arrivato a studiare i Jframe e fin li tutto apposto

    Questa è la classe del Jframe
    codice:
    /*
     * To change this license header, choose License Headers in Project Properties.
     * To change this template file, choose Tools | Templates
     * and open the template in the editor.
     */
    
    package provajframemain;
    
    import java.awt.Dimension;
    import java.awt.LayoutManager;
    import java.awt.Toolkit;
    import javax.swing.JFrame;
    import javax.swing.JPanel;
    
    /**
     *
     * @author Giovanni
     */
    public class ProvaJFrame extends JFrame {
       
    public ProvaJFrame() {
    
        setTitle("Questo è un JFrame !");
    
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    
        Dimension dimensioniSchermo = Toolkit.getDefaultToolkit().
    
                getScreenSize();
        
    
        int larghezzaFrame, altezzaFrame;
    
        larghezzaFrame = (int) (dimensioniSchermo.getWidth() / 4);
    
        altezzaFrame = (int) (dimensioniSchermo.getHeight() / 2);
    
        setSize(larghezzaFrame, altezzaFrame);
    
        setLocation(((int) dimensioniSchermo.getWidth() / 4),
    
                ((int) dimensioniSchermo.getHeight() / 4));
    
        setVisible(true);
    }
    
    }
    Poi ho voluto implementare la classe PannelloConImmagine che visualizzasse una immagine dentro al JFrame.
    E qui mi blocco perchè dopo aver fatto copia incolla del codice da un esempio da una dispensa JavaAwtSwin, non so proprio cosa scrivere nella classe Main per far visualizzare l'immagine! (il JFrame va).
    Sono andato a vedere vari tutorials su youtube che spiegano come farlo e con il loro metodo sono riuscito, ma solo perchè loro facevano tutto direttamente nel main e usando Jlabel o Jpanel, e non è il metodo che voglio usare io, dato che ho le 3 classi separate.
    Il problema è che non ho proprio idea di cosa scrivere, e di cosa implementare nel main per far funzionare il tutto.. Aparte il JFrame che quello son riuscito.

    Ecco il resto delle classi..

    PannelloConImmagine-

    codice:
    /*
     * To change this license header, choose License Headers in Project Properties.
     * To change this template file, choose Tools | Templates
     * and open the template in the editor.
     */
    
    package provajframemain;
    
    import java.awt.FlowLayout;
    import java.awt.Graphics;
    import java.awt.LayoutManager;
    import java.awt.image.BufferedImage;
    import java.io.IOException;
    import javax.imageio.ImageIO;
    import javax.swing.JLabel;
    import javax.swing.JPanel;
    
    /**
     *
     * @author Giovanni
     */
    class PannelloConImmagine extends JPanel {
    
        private BufferedImage miaImmagine;
       private JPanel pannello;
    
        public PannelloConImmagine() {
    
            try {
              
                miaImmagine = ImageIO.read(getClass().getClassLoader().getResource("images/120926.gif"));
                
                
           
          
                
            } catch (IOException ex) {
    
                miaImmagine = null;
    
    }
    
    }
    
    
        @Override
    
        public void paintComponent(Graphics g) {
    
            super.paintComponent(g);
    
            g.drawImage(miaImmagine, 0, 0, null);
    }
    
    }
    Classe Main-

    codice:
    /*
     * To change this license header, choose License Headers in Project Properties.
     * To change this template file, choose Tools | Templates
     * and open the template in the editor.
     */
    
    package provajframemain;
    
    import java.awt.Graphics;
    
    /**
     *
     * @author Giovanni
     */
    public class ProvaJframeMain {
        private static Graphics Graphics;
    
        /**
         * @param args the command line arguments
         */
        public static void main(String[] args) {
            // TODO code application logic here
         ProvaJFrame frame = new ProvaJFrame();
        
         
        
        
        
        
        }
        
    }
    Grazie.

  2. #2
    Utente di HTML.it
    Registrato dal
    Nov 2009
    Messaggi
    755
    Tralasciando la qualità del codice e alcune cosette inutili (sei un novello a quanto dici)..be' hai creato la finestra, hai creato il pannello, ora devi assemblare il tutto.
    Il main della tua classe di test potrebbe essere un qualcosa del genere:

    codice:
    public static void main (String [] args) {
       ProvaJFrame pf = new ProvaJFrame ();
       pf.getContentPane ().add (new PannelloConImmagine ());
       pf.pack ();
       pf.setVisible (true);
    }
    Catturare l'eccezione per settare l'immagine a null non ha alcun senso poichè l'immagine se non settata punterebbe già di suo a null (non punterebbe a nulla in pratica)..e poi ovviamente poichè sopprimi l'eccezione non sai se l'immagine è realmente raggiunta e caricata quindi sii sicuro che il path ad essa sia esatto.

    Ultima modifica di zipangulu; 31-01-2014 a 00:51

  3. #3
    Utente di HTML.it
    Registrato dal
    Jan 2014
    Messaggi
    8
    Ok, grazie zipangulu !
    Funziona tutto, ho dovuto togliere "pf.pack ();" perchè mi visualizzava il frame schiacciato(era una fessura in pratica).

    L'immaigne è .gif e non si muove, so che non dovrebbe (in teoria) muoversi, ma, su internet ho trovato un jframe gia fatto e ci ho messo la mia immagine, e si muove, anche se molto piu veloce del normale.
    Perchè?

    Se volete leggere è questo:

    codice:
    import java.awt.Dimension;
    import java.awt.FlowLayout;
    import java.awt.Toolkit;
    import javax.imageio.ImageIO;
    import javax.swing.ImageIcon;
    import javax.swing.JFrame;
    import javax.swing.JLabel;
    
    
    public class JframeConImmagine extends JFrame{
        private ImageIcon immagine;
        private JLabel label;
        
    public JframeConImmagine()
        {
            setLayout(new FlowLayout());
            immagine = new ImageIcon(getClass().getClassLoader().getResource("images/120926.gif"));
        
            label = new JLabel(immagine);
            add(label);
        }
    public static void main(String[] args) {
        
        JframeConImmagine c = new JframeConImmagine();
        c.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        Dimension dimensioniSchermo = Toolkit.getDefaultToolkit().getScreenSize();
        int larghezzaFrame, altezzaFrame;
        c.pack();
        larghezzaFrame = (int) (dimensioniSchermo.getWidth() / 4);
        altezzaFrame = (int) (dimensioniSchermo.getHeight() / 2);
        c.setSize(larghezzaFrame, altezzaFrame);
        c.setLocation(((int) dimensioniSchermo.getWidth() / 4),((int) dimensioniSchermo.getHeight() / 4));
        c.setVisible(true);
        
        }
        
    }
    Grazie mille, ciao!
    Ultima modifica di faza; 01-02-2014 a 18:51

  4. #4
    Utente di HTML.it
    Registrato dal
    Nov 2009
    Messaggi
    755
    ho dovuto togliere "pf.pack ();" perchè mi visualizzava il frame schiacciato(era una fessura in pratica).
    si nel tuo caso il pack non andava bene poichè tu hai settato le dimensioni al frame piuttosto che al pannello..di solito (almeno io) si settano le dimensioni desiderate al pannello e dopo averlo incapsulato nel frame si invoca su quest'ultimo il "pack" che lo incarica di adattare le sue dimensioni a ciò che contiene (in parole semplici).


    Nella tua implementazione non avviene l'animazione poichè hai passato come ImageObserver null, quindi modifica la tua riga di codice del paintComponent di PannelloConImmagine da

    codice:
    g.drawImage(miaImmagine, 0, 0, null);
    a

    codice:
    g.drawImage(miaImmagine, 0, 0, this);
    Probabilmente anche qui vedrai l'animazione della gif più rapida rispetto a come la vedresti su un normale visualizzatore di immagini..per risolvere questo problema potresti:
    -modificare i delay dei frame che compongono la gif
    -sovrascrivere il metodo ImageUpdate del pannello su cui stai disegnando aggiungendoci ad esempio uno sleep (anche se non è bene far "dormire" l'EDT)

    Ultima modifica di zipangulu; 01-02-2014 a 19:27

  5. #5
    Utente di HTML.it
    Registrato dal
    Jan 2014
    Messaggi
    8
    Grazie mille zipangulu !
    Ultima modifica di LeleFT; 10-02-2014 a 13:46

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.