Visualizzazione dei risultati da 1 a 3 su 3
  1. #1
    Utente di HTML.it
    Registrato dal
    Sep 2012
    Messaggi
    13

    Problemi utilizzo classe Timer

    Ciao ha tutti.In questi giorni ho creato una semplicissima applicazione java per imparare ad utilizzare la classe Timer per creare piccole animazioni.L' app consiste in un Jpanel che teoricamente dovrebbe cambiare le propie dimensioni dopo 2 secondi.Purtroppo ciò non accade,qualcuno potrebbe dirmi il perché? Ecco il codice sorgente:


    import java.awt.Color;
    import java.awt.GraphicsConfiguration;
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
    import java.awt.event.MouseAdapter;
    import java.awt.event.MouseEvent;
    import java.util.Scanner;
    import javax.swing.*;
    import java.awt.event.*;


    public class Concorrente2
    {
    public static void main(String [] args){
    grafica g=new grafica();
    g.setVisible(true);
    g.setSize(500,500);

    evento e=new evento();
    Timer t=new Timer(2000,e);
    t.start();

    }
    }
    class grafica extends JFrame{
    JPanel p=new JPanel();
    public grafica(){
    setLayout(null);
    p.setBackground(Color.GREEN);
    add(p);
    p.setSize(100,100);
    }
    }
    class evento implements ActionListener{
    public void actionPerformed(ActionEvent e){
    grafica g=new grafica();
    g.p.setSize(200,200);
    }
    }

  2. #2
    Utente di HTML.it
    Registrato dal
    Dec 2009
    Messaggi
    1,123
    Ciao, posta il codice usando i tag code.

    Ti consiglio di studiare perchè ci sono un po' di cose che non sono corrette...
    Un esempio è il modo in cui crei l'oggetto JPanel. Il costruttore esiste per inizializzare gli elementi.
    Inoltre, di solito si usa lo specificatore di accesso private, quando si dichiara una variabile in una classe (riguardati la OOP, l'incapsulamento).

    Non funziona perchè commetti un errore molto importante. Nella classe Evento (che ti ho rinominato con l'iniziale maiuscola, come da convenzione) tu crei un altro oggetto grafica, e questo comporta una chiamata al JPanel di quell'oggetto, non di quello creato in precedenza. Per ovviare a queto problema puoi passare ad Evento l'oggetto Grafica.

    codice:
    import java.awt.Color;
    import java.awt.GraphicsConfiguration;
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
    import java.awt.event.MouseAdapter;
    import java.awt.event.MouseEvent;
    import java.util.Scanner;
    import javax.swing.*;
    import java.awt.event.*;
    
    
    public class Concorrente2 {
      public static void main(String [] args){
        Grafica g=new Grafica();
        g.setVisible(true);
        g.setSize(500,500);
    
        Evento e=new Evento(g);
        Timer t=new Timer(2000,e);
        t.start();
    
      }
    }
    
    class Grafica extends JFrame{
      private JPanel p;
      
      public Grafica(){
        setLayout(null);
        p = new JPanel();
        p.setBackground(Color.GREEN);
        p.setSize(100,100);
    	
        add(p);
    	
        // distrugge la finestra quando premi la X
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
      }
      
      void changeSize(int x, int y) {
        p.setSize(x,y);
      }
    }
    
    class Evento implements ActionListener{
      private Grafica g;
    
      Evento(Grafica g) {
        this.g = g;
      }
    
      public void actionPerformed(ActionEvent e){
        g.changeSize(200,200);
      }
    }
    osserva bene come accedo al pannello! Non accedo direttamente, in quanto è privato, ma uso un metodo così detto "getter" chiamato changeSize() (puoi chiamarlo come vuoi, ovviamente) a cui passo le dimensioni del frame.


    Se hai domande, sono qui. ^^

  3. #3
    Utente di HTML.it
    Registrato dal
    Sep 2012
    Messaggi
    13
    Grazie tante per i consigli, ho risolto subito il problema

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.