Visualizzazione dei risultati da 1 a 6 su 6
  1. #1
    Utente di HTML.it
    Registrato dal
    Jun 2013
    Messaggi
    4

    Animazione Interfaccia grafica

    Salve vorrei animare una JTextFiled, colorandola di nero, inserire una pausa e poi colorare di un'altro colore, leggendo ho visto che non devo utilizzare i Thread ma devo usare il Timer ma non so come, questo è quello che vorrei fare:

    m[x2][y2].setBackground(Color.black);
    pausa
    m[x2][y2].setBackground(Color.red);

    la matrice contiene le JTextField.

  2. #2
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,325
    Crea un ActionListener che, in base ad una variabile (ad esempio una booleana se hai solo due colori) cambi il colore delle textfield:

    codice:
    public class CambiaColore implements ActionListener {
       private boolean colorWhite;
       private JTextField[][] matrice;
    
       public CambiaColore(JTextField[][] matrice) {
          this.matrice = matrice;
          colorWhite = true;   // all'inizio le JTextField sono bianche
       }
    
       @Override
       public void actionPerformed(ActionEvent ae) {
          // Cambio il colore a tutte le JTextField in base al valore di "colorWhite"
          for(int row=0; row<matrice.length; row++) {
             for(int col=0; col<matrice[row].length; col++) {
                matrice[row][col].setBackground(colorWhite ? Color.BLACK : Color.WHITE);
             }
          }
          colorWhite = !colorWhite;
       }
    }
    Poi crei un Timer (javax.swing.Timer) passandogli un'istanza di questo ActionListener ed il delay (ovvero, il tempo di pausa):

    codice:
    // Suppongo che la matrice di JTextField si chiami "m", come da tuo esempio
    // 2000 = 2 secondi (2000 millisecondi)
    new Timer(2000, new CambiaColore(m)).start();
    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
    Registrato dal
    Jun 2013
    Messaggi
    4
    Grazie mille, oggi pomeriggio provo

  4. #4
    Utente di HTML.it
    Registrato dal
    Jun 2013
    Messaggi
    4
    Allora inizialmente funziona

    codice:
    System.out.println("modifica giocatore 2 colore rosso in x-->"+x2+"\ty"+y2+"\n");
     new Timer(1000, new CambiaColore(m,x2,y2,"NERO")).start(); 
    System.out.println("rimodifica giocatore 2 colore rosso in x-->"+x2+"\ty"+y2+"\n");
     new Timer(1000, new CambiaColore(m,x2,y2,"ROSSO")).start(); 
    //non ricolora la cella di rosso
    però non mi ricolora la cella

  5. #5
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,325
    Non è ciò che ti ho suggerito: non devi creare 2 Timer, ne basta uno... è lui che deve fare tutto il lavoro e nel mio esempio già lo fa (cambia da bianco a nero e viceversa ogni 2 secondi).


    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

  6. #6
    Utente di HTML.it
    Registrato dal
    Jun 2013
    Messaggi
    4
    Grazie , ma ho risolto da solo, il problema è che non avevo capito come funzionavano i timer.
    in caso serva ad altri a cui il timer si esegue e non si ferma più(continua a eseguire ogni delay.
    serve il metodo timer.setRepeats(false); che permette di eseguire il timer solo una volta.

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.