Visualizzazione dei risultati da 1 a 7 su 7
  1. #1
    Utente di HTML.it L'avatar di paul78
    Registrato dal
    Apr 2010
    Messaggi
    515

    Add JScrollPane ad un immagine animata

    ciao a tutti!!!

    ho questa animazione:

    codice:
    import java.awt.*;
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
    import java.awt.image.ImageObserver;
    
    import javax.swing.*;
    
    public class GifAnimata extends JFrame  {
    
    	Image animation; 
    	Immagine currentAnimation = new Immagine();
    	JFrame frame = new JFrame("prova Animazione");
    	JButton buttonPause = new JButton("Pause");
    	JButton buttonPlay = new JButton("Play");
    	Timer timer;
    	public GifAnimata() {	
    		prova();
    		
    	}
    	public void prova()  {
    		
    		ImageIcon ball_IMG_ICON = new ImageIcon("c://immagine.jpg");
    		animation = ball_IMG_ICON.getImage(); 
    													
    		prepareImage(animation, this);
    		currentAnimation.setX(10);
    		currentAnimation.setY(+100); 		
    		prepareImage(animation, this);
    		timer = new Timer(100, paintTimer);
    		
    		JPanel p = new JPanel();
    
    		p.add(buttonPlay);
    		buttonPlay.addActionListener(new ActionListener() {					
    			public void actionPerformed(ActionEvent evt) {
    				timer.start();
    			}
    		});
    		p.add(buttonPause);
    		buttonPause.addActionListener(new ActionListener() {					
    			public void actionPerformed(ActionEvent evt) {
    				timer.stop();
    			}
    		});
    		frame.setTitle("Gif Animata");
    		frame.setSize(1100, 720);   
    		frame.add(panel);
    		frame.add(p, BorderLayout.NORTH);
    		frame.setLocationRelativeTo( null );
    		frame.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );
    		frame.setVisible( true );
    	}
    
    	JPanel panel = new JPanel() {
        public void paint(Graphics g) {
    		super.paint(g);
    		Graphics2D g2d = (Graphics2D) g;
    		g.setColor(Color.WHITE);
    		g.fillRect(0, 0, 1100, 720);
    		g2d.drawImage(animation, currentAnimation.getX(), currentAnimation.getY(), this); 								
    		Toolkit.getDefaultToolkit().sync(); 
    		g.dispose();
    
    	}
    	};
    	// in quale direzione inviare l'immagine
    	Action paintTimer = new AbstractAction() { 
    		public void actionPerformed(ActionEvent e) {			
    			//currentBall.setX(currentBall.getX() + 5);
    			currentAnimation.setY(currentAnimation.getY() - 1);
    			frame.repaint();
    		}
    	};
    	// in quale direzione inviare l'immagine
    		Action paintTimerPause = new AbstractAction() { 
    			public void actionPerformed(ActionEvent e) {			
    				//currentBall.setX(currentBall.getX() + 5);
    				currentAnimation.setY(currentAnimation.getY() - 1);
    
    			}
    		};
    	   
       public static void main(String[] args) {
    	   GifAnimata ga = new GifAnimata();
       }
    }
    class Immagine {
    	/*
    	 * Simple Object class to store the ball's co-ordinates.
    	 */
    	private int x;
    	private int y;
    
    	Immagine() {
    		;
    	} 
    
    	public int getX() { 
    		return x;
    	}
    
    	public void setX(int x2) {
    		x = x2;
    	}
    
    	public int getY() {
    		return y;
    	}
    
    	public void setY(int y2) {
    		y = y2;
    	}
    }
    con questo cod. aggingo solo il JPanel...senza il JFrame in un'altro script...fino quì va tutto ok!!!

    ora vorrei aggiungere un JScrollPane al JPane...come faccio??

    ho provato in tutti i modi ma lo scrollPane non esce!!!!

  2. #2
    Utente di HTML.it L'avatar di paul78
    Registrato dal
    Apr 2010
    Messaggi
    515
    al frame ho scritto:

    codice:
    scroll.getViewport().add(panel);
    		frame.setTitle("Gif Animata");
    		frame.setSize(1100, 720);   
    		frame.add(scroll);
    		frame.add(p, BorderLayout.NORTH);
    		frame.setLocationRelativeTo( null );
    		frame.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );
    		frame.setVisible( true );
    ma non appare nessuno jscrollPane....

  3. #3
    Utente di HTML.it
    Registrato dal
    Aug 2002
    Messaggi
    8,013
    ti consiglio di nuovo di programmare con le API sotto mano perchè mi pare che tu vada un po' a tentoni. Quello che normalmente si fa con un JScrollPane è creare il componente (JPanel o che) a cui vorresti aggiungere la funzionalità di scroll e poi inserire questo nello JScrollPane

    codice:
    TuoJPanel tuoPannello = new TuoJPanel(tuoi_parametri);
    JScrollPane scroll = new JScrollPane(tuoPannello);
    dove TuoJPanel è una ipotetica classe che estende JPanel e che contiene tutto quello che vuoi poter rendere scrollabile.

    A questo punto aggiungi lo scroll pane al tuo contenitore, dove ti pare.

    Venendo al tuo codice, potresti fare qualcosa del genere:

    questo
    codice:
    frame.add(panel);
    diventa:
    codice:
    JScrollPane scrollPane = new JScrollPane(panel);
    frame.getContentPane().add(scrollPane, BorderLayout.CENTER);
    <´¯)(¯`¤._)(¯`»ANDREA«´¯)(_.¤´¯)(¯`>
    "The answer to your question is: welcome to tomorrow"

  4. #4
    Utente di HTML.it L'avatar di paul78
    Registrato dal
    Apr 2010
    Messaggi
    515
    già fatto!!!!

    non esce!!!!

  5. #5
    Utente di HTML.it L'avatar di paul78
    Registrato dal
    Apr 2010
    Messaggi
    515
    ho provato a scrivere:

    codice:
    JScrollPane scroll = new JScrollPane(panel);
    scroll.setVerticalScrollBarPolicy( JScrollPane.VERTICAL_SCROLLBAR_ALWAYS); 
    frame.getContentPane().add(scroll, BorderLayout.CENTER);
    in questo modo esce il JScrollPane ma esce vuoto...cioè non rispetta la lunghezza dell'immagine...allora il problema non è nel JFrame ma è nell'immagine!!!!...

  6. #6
    Utente di HTML.it
    Registrato dal
    Aug 2002
    Messaggi
    8,013
    questo, ridotto all'osso, ma volendo mantenere un po' la tua struttura, funziona alla perfezione
    codice:
    import javax.swing.*;
    import java.awt.*;
    
    /**
     *
     * @author Andrea
     */
    public class AnimatedGIF extends JFrame {
        
        private String pathToGIF = "C:/Users/Andrea/Desktop/dog.gif";
        private ImageIcon icon = new ImageIcon(pathToGIF);
        
        public AnimatedGIF() {
            super("Prova GIF Animata");
            this.setSize(300, 200);
            JPanel panel = new JPanel();
            panel.add(new JLabel(icon));
            JScrollPane scrollPane = new JScrollPane(panel);
            this.getContentPane().add(scrollPane, BorderLayout.CENTER);
            
            this.setVisible(true);
            this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        }
        
        public static void main (String[] args) {
            new AnimatedGIF();
        }
        
    }
    le dimensioni del JFrame sono volutamente inferiori rispetto alla dimensione dell'immagine (497 x 280), e come atteso, mi escono le barre di scorrimento.
    <´¯)(¯`¤._)(¯`»ANDREA«´¯)(_.¤´¯)(¯`>
    "The answer to your question is: welcome to tomorrow"

  7. #7
    Utente di HTML.it L'avatar di paul78
    Registrato dal
    Apr 2010
    Messaggi
    515
    grazie mille!!!! risolto alla grande!!!

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.