Pagina 1 di 3 1 2 3 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 21
  1. #1

    problemi visulizzazioni immagini gif

    Ciao a tutti! ho un problema nel visualizzare immagini gif,
    in particolare caricando un'immagine gif all'interno di una JLabel dovrei vedere un cerchio rosso che si ingrandisce e rimpicciolisce.
    Purtroppo quando si ingrandisce questo cerchio viene visualizzato erroneamente come un quadrato!
    ho provato a creare immagini gif differenti, più lente, ma niente da fare...

    posto il codice:

    public class Prova3 extends javax.swing.JFrame {

    private static final long serialVersionUID = 1L;
    private JPanel jPanel1;
    public static AllarmeJLabel sds;

    public static void main(String[] args) {
    SwingUtilities.invokeLater(new Runnable() {
    /* (non-Javadoc)
    * @see java.lang.Runnable#run()
    */
    public void run() {
    Prova3 inst = new Prova3();
    inst.setLocationRelativeTo(null);
    inst.setVisible(true);

    }
    });

    }

    public Prova3() {
    super();
    initGUI();
    }

    private void initGUI() {
    try {
    setDefaultCloseOperation(WindowConstants.DISPOSE_O N_CLOSE);
    AnchorLayout thisLayout = new AnchorLayout();
    getContentPane().setLayout(thisLayout);
    this.addComponentListener(new ComponentAdapter() {
    public void componentResized(ComponentEvent evt) {
    thisComponentResized(evt);
    }
    });

    {
    jPanel1 = new PannelloSfondoImmagine();
    jPanel1.setBackground(new Color(255,255,255)); //imposta sfondo
    jPanel1.setBounds( 0, 0, jPanel1.getPreferredSize().width, jPanel1.getPreferredSize().height);
    getContentPane().add(jPanel1);
    }



    {
    sds=new AllarmeJLabel(jPanel1);
    sds.setIconInAllarme(); //qui setto l'immagine gif con il cerchio rosso

    }

    setPreferredSize(new Dimension(jPanel1.getPreferredSize().width+6,
    jPanel1.getPreferredSize().height+34)); //necessaria
    setSize(jPanel1.getPreferredSize().width+6, jPanel1.getPreferredSize().height+34);
    pack();



    } catch (Exception e) {
    e.printStackTrace();
    }
    }
    }



    public class AllarmeJLabel extends Observable {
    private JLabel jlabel;
    private JPanel pannello;
    public void setIconInAllarme(){
    jlabel.setIcon(AllarmeIcon.getAccesoInAllarme());
    }
    ....
    public AllarmeJLabel(JPanel pannello){
    this.pannello= pannello;
    jlabel=new JLabel();
    setIconON();

    jlabel.setMinimumSize(new java.awt.Dimension(AllarmeIcon.getAccesoNOAllarme( ).getIconWidth(),AllarmeIcon.getAccesoNOAllarme(). getIconHeight())); //gif più piccola
    jlabel.setMaximumSize(new java.awt.Dimension(AllarmeIcon.getAccesoInAllarme( ).getIconWidth(),AllarmeIcon.getAccesoInAllarme(). getIconHeight())); //gif più grande

    ......
    private static class AllarmeIcon{
    private static AllarmeIcon istanza;
    private static ImageIcon ledrosso;
    private static ImageIcon ledverde;
    private static ImageIcon ledgrigio;
    private AllarmeIcon() {
    ledrosso=new ImageIcon(getClass().getClassLoader().getResource( "lampeggianterosso.gif"));
    ledverde=new ImageIcon(getClass().getClassLoader().getResource( "lampeggianteverde.png"));
    ledgrigio=new ImageIcon(getClass().getClassLoader().getResource( "lampeggiantegrigio.png"));
    }

    public static ImageIcon getAccesoInAllarme(){
    if(ledrosso==null)
    getInstance();
    return ledrosso;
    }

  2. #2
    Non c'è l'indentazione. Prova a copia/incollare di nuovo il codice però stavolta metti tutto fra i tag
    (code) ... (/code)

    Invece delle parentesi tonde usa le parentesi quadre. Questo tag ti preserva l'indentatura per una leggibilità decente del codice.

    Comunque forse ho capito dove sia il problema:
    Qual'è la grandezza naturale della gif?

  3. #3
    Guarda, ho riscritto il codice in modo che sia molto più semplice e sta tutto in una sola classe,
    ti allego anche l'immagine gif che viene utilizzata nel codice,puoi provarla a eseguirla senza problemi...
    per vedere qual'è il problema guarda questo video:
    http://www.youtube.com/watch?v=fsguHcwPYQo
    grazie


    codice:
    public class NewJFrame extends javax.swing.JFrame {
    	private JPanel jPanel1;
    	private JLabel jLabel1;
    
    	/**
    	* Auto-generated main method to display this JFrame
    	*/
    	public static void main(String[] args) {
    		SwingUtilities.invokeLater(new Runnable() {
    			public void run() {
    				NewJFrame inst = new NewJFrame();
    				inst.setLocationRelativeTo(null);
    				inst.setVisible(true);
    			}
    		});
    	}
    	
    	public NewJFrame() {
    		super();
    		initGUI();
    	}
    	
    	private void initGUI() {
    		try {
    			setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
    			{
    				jPanel1 = new JPanel();
    				getContentPane().add(jPanel1, BorderLayout.CENTER);
    				{
    					jLabel1 = new JLabel();
    					jPanel1.add(jLabel1);
    					jLabel1.setText("jLabel1");
    					jLabel1.setIcon(new ImageIcon(getClass().getClassLoader().getResource("lampeggianterosso.gif")));
    				}
    			}
    			pack();
    		} catch (Exception e) {
    			e.printStackTrace();
    		}
    	}
    
    }
    Immagini allegate Immagini allegate

  4. #4
    Ho scaricato il codice e l'immagine e l'ho fatto partire. Mi succede esattamente quello che ti succede nel video.
    Ho provato a inserire diverse gif animate che avevo sul PC. Posso solo dirti che c'è poco da fare. Dipende solo da come vengono visualizzate dall'ambiente.
    Per esempio FireFox le visualizza in un modo, ACDSee in un modo un poco diverso e java in un altro modo ancora. Le differenze sono nelle velocità.
    Ho aperto la gif tua con GIMP e ho guardate tutti i 50 fotogrammi e sembrano a posto, nel senso che non vedo nessun quadrato rosso. Non penso ci sia una soluzione. Prova a trovare un'altra gif magari.

  5. #5
    Grazie per l'aiuto.
    Questa gif l'ho creata io con flash cs4 e easy gif animator.
    Mi occorre una gif che simboleggi un punto di allarme, anche io avevo provato a caricare altre gif , le altre funzionano, solo questa mi da problemi...

    è da giorni che ci lavoro,
    altre idee?

  6. #6
    Nessuna soluzione poi? Anche io ho lo stesso problema con un pallino rosso che compare e scompare. Compare però come un quadrato!

  7. #7
    Utente di HTML.it
    Registrato dal
    Nov 2009
    Messaggi
    755
    ma invece che utilizzare una gif esterna perchè non ne usi una creata appositamnte nel programma tramite java?eccoti un mio esempio di codice banale forse nn efficientissimo e sicuramente migliorabile(visto che l'ho fatto al volo),ma funzionante.
    Il codice comprende due classi separate,quindi se per provarlo fai copia-incolla fallo separandole
    eccoti il mio codice:
    codice:
    import javax.swing.*;
    import java.awt.*;
    
    class Pannello extends JPanel{
    	private static int l;
    	private static int h;
    	public Pannello(int l,int h){
    		setPreferredSize(new Dimension(200,200));
    		setBackground(Color.green);
    		this.l=l;
    		this.h=h;
    
    	}
    	public void paintComponent(Graphics g){
    		super.paintComponent(g);
    		g.setColor(Color.black);
    		g.drawArc(100-(this.l/2),100-(this.h/2),l,h,0,360);
                    g.setColor(Color.red);
    		g.fillArc(100-(this.l/2),100-(this.h/2),l,h,0,360);
    	}
    	public static void setLH(int l1,int h1){
    		l=l1;
    		h=h1;
    	}
    }
    
    
    
    import javax.swing.*;
    import javax.swing.Timer;//lo importo separatamente per evitare la confuzione tra le varie classi Timer esistenti nei package importati!
    import java.awt.*;
    import java.awt.event.*;
    
    class Animazione extends JFrame implements ActionListener{
    	private Timer timer;
    	private static final int delta=2;
    	private static int currentSize=0;
    	private static boolean aumenta=true;
    	private Pannello pannello;
    
    	public Animazione(){
    		super("Animazione");
    		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    		setResizable(false);
    		timer=new Timer(10,this);
    		timer.start();
    		Container c=getContentPane();
    		pannello=new Pannello(0,0);
    		c.add(pannello);
    
    		pack();
    		setVisible(true);
    
    	}
    	public void actionPerformed(ActionEvent e){
    		if(currentSize==100){
    			aumenta=false;
    		}else if(currentSize==0){
    			aumenta=true;
    		}
    		if(aumenta==true){
    			currentSize+=delta;
    			Pannello.setLH(currentSize,currentSize);
    			pannello.repaint();
    		}else if(aumenta==false){
    			currentSize-=delta;
    			Pannello.setLH(currentSize,currentSize);
    			pannello.repaint();
    		}
    	}
    	public static void main(String [] args){
    		SwingUtilities.invokeLater(new Runnable(){
    			public void run(){
    				new Animazione();
    				}});
    	}
    }
    cambiando il delay del timer potrai modificare a tuo piacimento la velocità di aggiornamento
    spero ti possa essere utile questo mio esempio
    ciao!

  8. #8
    Grazie, dovrebbe andar bene... Lo sto riadattando per le mie esigenze!

  9. #9
    ma invece che utilizzare una gif esterna perchè non ne usi una creata appositamnte nel programma tramite java?
    In questo modo risolvo il problema della visualizzazione, ma se desidero che quell'immagine sia cliccabile cioè che io possa catturare l'evento del click del mouse quando ci clicco sopra non posso usare più usare il metodo addActionListener della classe JLabel, per questo volevo inserire una gif dentro una Jlabel...

    La tua soluzione raggira il problema ma ne fa nascere uno nuovo: come rendere l'immagine sensibile ai click del mouse??????

  10. #10
    Utente di HTML.it
    Registrato dal
    Nov 2009
    Messaggi
    755
    emmm...no guarda che l'animazione creata nel mio esempio sta dentro un JPanel quindi basta munire il panel di un ActionListener è il gioco è fatto!torna tutto come prima...
    ma poi io non capisco una cosa guarda che per "ascoltare" i click o le altre varie azioni del mouse esistono i MouseListener la cui implementazione è simile a quella dell'ActionListener,ma ovviamente comprende metodi diversi
    MouseListener per gestire gli eventi generati con click,pressione,rilascio dei tasti del mouse ecc...

    MouseMotionListener eventi generati col movimento del mouse

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.