Visualizzazione dei risultati da 1 a 5 su 5

Discussione: JButton....

  1. #1
    Utente di HTML.it L'avatar di paul78
    Registrato dal
    Apr 2010
    Messaggi
    515

    JButton....

    con questo codice i jbutton non funzionano..

    questo è il cod:

    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  {
    	ImageIcon img;
    	Image animation; 
    	Immagine currentAnimation = new Immagine();
    	JFrame frame = new JFrame("prova Animazione");
    	JButton buttonPause = new JButton("Pause");
    	JButton buttonPlay = new JButton("Play");
    	JButton buttonImage1 = new JButton("Image1");
    	JButton buttonImage2 = new JButton("Image2");
    	Timer timer;
    	JScrollPane scroll = new JScrollPane();
    
    	
    	public GifAnimata() {	
    		prova();
    		
    	}
    	public void prova()  {
    		
    		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();
    			}
    		});
    		p.add(buttonImage1);
    		buttonImage1.addActionListener(new ActionListener() {					
    			public void actionPerformed(ActionEvent evt) {
    				img = new ImageIcon("c://db/testi/moda.jpg");
    				animation = img.getImage();								
    				prepareImage(animation,this);
    				currentAnimation.setX(10);
    				currentAnimation.setY(+250); 		
    				timer = new Timer(50, new ActionListener() {  				             
    		            public void actionPerformed(ActionEvent ae) { 
    		            	currentAnimation.setY(currentAnimation.getY() - 1);	
    		            	scroll.repaint(); 
    		            } 
    		            
    		        });
    				
    			}
    
    			private void prepareImage(Image animation,
    					ActionListener actionListener) {
    				// TODO Auto-generated method stub
    				currentAnimation.setY(currentAnimation.getY() - 1);
    				panel.repaint();
    			}
    
    			
    		});
    		p.add(buttonImage2);
    		buttonImage2.addActionListener(new ActionListener() {					
    			public void actionPerformed(ActionEvent evt) {
    				img = new ImageIcon("c://db/testi/grignani.jpg");
    				animation = img.getImage();								
    				prepareImage(animation, this);
    				currentAnimation.setX(10);
    				currentAnimation.setY(+250); 		
    				timer = new Timer(200, new ActionListener() {  				             
    		            public void actionPerformed(ActionEvent ae) { 
    		            	currentAnimation.setY(currentAnimation.getY() - 1);	
    		                scroll.repaint(); 
    		            } 
    		        });
    			}
    
    			private void prepareImage(Image animation,
    					ActionListener actionListener) {
    				// TODO Auto-generated method stub
    				currentAnimation.setY(currentAnimation.getY() - 1);
    				panel.repaint();
    			}
    		});
    		frame.setTitle("Gif Animata");
    		frame.setSize(1100, 720);   
    		panel.add(new JLabel(img));
            JScrollPane scrollPane = new JScrollPane(panel);
            frame.getContentPane().add(scrollPane, BorderLayout.CENTER);
    		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();
    
    	}
    	};
    	   
       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;
    	}
    }
    come mai???

  2. #2
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,326
    Che vuol dire che "non funzionano"?

    Non sono stato lì a leggermi tutto il codice (anche perchè provo un ribrezzo acuto per il codice della grafica autogenerato, che mi scoraggia completamente), ma ho notato un po' di cose che non tornano: ogni tanto compare un fantomatico oggetto chiamato "panel" che non si sa chi sia. Ho immaginato che fosse l'oggetto chiamato "p" (ma non ne ho la certezza). Se così fosse ci sarebbe un errore grave: tale pannello verrebbe aggiunto due volte alla finestra (una in modo diretto e una in modo indiretto), ma non lo posso sapere.

    Una cosa che odio e che rende il codice difficilmente manutenibile (e difficilmente capibile per chi cerca di leggerlo) sono i listener implementati come anonymous-class. Va bene finchè è uno, può andare finchè sono due. Quando cominciano a diventare più di due, io li sposto in classi separate o cerco di usare un solo listener per tutti. Il codice si pulisce e gli eventuali problemi sono automaticamente confinati e facilmente individuabili.

    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  3. #3
    Utente di HTML.it L'avatar di paul78
    Registrato dal
    Apr 2010
    Messaggi
    515
    Quando clicco su buttonPlay e buttonPause non rispondono ai comandi...

  4. #4
    Utente di HTML.it L'avatar di paul78
    Registrato dal
    Apr 2010
    Messaggi
    515
    ho modificato il cod. ma il problema è sempre quello!!!

    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  {
    	ImageIcon img;
    	Image animation; 
    	Immagine currentAnimation = new Immagine();
    	JFrame frame = new JFrame("prova Animazione");
    	JButton buttonPause = new JButton("Pause");
    	JButton buttonPlay = new JButton("Play");
    	JButton buttonImage1 = new JButton("Image1");
    	JButton buttonImage2 = new JButton("Image2");
    	Timer timer;
    	JScrollPane scroll = new JScrollPane();
    
    	
    	public GifAnimata() {	
    		prova();
    		
    	}
    	public void prova()  {
    		
    		JPanel p = new JPanel();
    
    		
    		p.add(buttonImage1);
    		buttonImage1.addActionListener(new ActionListener() {					
    			public void actionPerformed(ActionEvent evt) {
    				img = new ImageIcon("c://db/testi/moda.jpg");
    				animation = img.getImage();								
    				prepareImage(animation,this);
    				currentAnimation.setX(10);
    				currentAnimation.setY(+250); 		
    				timer = new Timer(50, paintTimer);  				                  
    			}
    
    			private void prepareImage(Image animation,
    					ActionListener actionListener) {
    				// TODO Auto-generated method stub
    				currentAnimation.setY(currentAnimation.getY() - 1);
    				panel.repaint();
    			}
    			
    			
    		});
    		p.add(buttonImage2);
    		buttonImage2.addActionListener(new ActionListener() {					
    			public void actionPerformed(ActionEvent evt) {
    				img = new ImageIcon("c://db/testi/grignani.jpg");
    				animation = img.getImage();								
    				prepareImage(animation, this);
    				currentAnimation.setX(10);
    				currentAnimation.setY(+250); 		
    				timer = new Timer(200, paintTimer);			             
    	
    			}
    
    			private void prepareImage(Image animation,
    					ActionListener actionListener) {
    				// TODO Auto-generated method stub
    				currentAnimation.setY(currentAnimation.getY() - 1);
    				panel.repaint();
    			}
    			
    		});
    		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);   
    		panel.add(new JLabel(img));
            JScrollPane scrollPane = new JScrollPane(panel);
            frame.getContentPane().add(scrollPane, BorderLayout.CENTER);
    		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);
    			scroll.repaint();
    					
    				}
    			};
       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;
    	}
    }

  5. #5
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,326
    Ho capito il problema copiando il codice e provandolo.
    Come ho già detto è strutturato malissimo: crei classi anonime in continuazione e questo non ti consente di gestire in modo corretto le cose.

    Quello che manca è il repaint() della finestra... ma anche qui: perchè GifAnimata estende JFrame e al suo interno crei un oggetto JFrame (chiamato frame)? E' già lei un JFrame...

    Comunque, non voglio star lì a fare le pulci: crea un metodo (anche privato) che invoca un repaint() sull'oggetto "frame" e richiama questo metodo nel paintTimer come ultima istruzione.

    PS: i pulsanti rispondono correttamente al clic e fanno il loro dovere.

    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

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.