Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Wi-Fi 7 con il design di una vetta innevata: ecco il nuovo sistema mesh di Huawei
Wi-Fi 7 con il design di una vetta innevata: ecco il nuovo sistema mesh di Huawei
HUAWEI WiFi Mesh X3 Pro Suite è probabilmente il router mesh più fotogenico che si possa acquistare oggi in Italia, ma dietro il guscio in acrilico trasparente e le luci LED dinamiche c'è una macchina tecnica costruita attorno allo standard Wi-Fi 7, con velocità teoriche Dual-Band fino a 3,6 Gbps e una copertura fino a 120 m² una volta abbinato il router principale all'extender incluso nel kit
Core Ultra 7 270K Plus e Core Ultra 7 250K Plus: Intel cerca il riscatto ma ci riesce in parte
Core Ultra 7 270K Plus e Core Ultra 7 250K Plus: Intel cerca il riscatto ma ci riesce in parte
Abbiamo provato le nuove CPU Intel Core Ultra 7 270K Plus e Core Ultra 7 250K Plus: più core e ottimizzazioni al funzionamento interno migliorano le prestazioni, anche in virtù di prezzi annunciati interessanti. A questo si aggiungono nuove ottimizzazioni software. Purtroppo, a fronte di prestazioni di calcolo elevate, il quadro rimane incerto nel gaming, dove l'andamento rimane altalenante. Infine, rimane il problema della piattaforma a fine vita.
PC Specialist Lafité 14 AI AMD: assemblato come vuoi tu
PC Specialist Lafité 14 AI AMD: assemblato come vuoi tu
Il modello "build to order" di PCSpecialist permette di selezionare una struttura base per un sistema, personalizzandolo in base alle specifiche esigenze con una notevole flessibilità di scelta tra i componenti. Il modello Lafité 14 AI AMD è un classico notebook clamshell compatto e potente, capace di assicurare una elevata autonomia di funzionamento anche lontano dalla presa di corrente
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 21-03-2007, 22:09   #1
superburp
Member
 
Iscritto dal: Mar 2007
Città: Roma
Messaggi: 102
Problema con un Timer [Java]

Ciao a tutti, sono nuovo di questo forum.

Scrivo perchè ho un problema con un programma da fare con Java. Ho realizzato un programma che fa visualizzare su una porzione di una tastiera di un pianoforte 4 accordi e con la possibilità di creare un accordo cliccando sui vari tasti (con un ovvio limite per il numero di tasti schiacciabili).

Ora vorrei mettere un timer per visualizzare i 4 accordi uno dopo l'altro ad un intervallo di tempo predefinito (ad esempio 2 secondi). Come posso fare? Ho provato a creare un listener, ma sono sicuro che sia sbagliato.
Lo riporto qui, così se qualcuno gentilmente volesse aiutarmi mi farebbe un gran piacere.

Codice:
import javax.swing.timer;

public class ListenerTimer implements ActionListener {

          private PannelloGrafico pannGraf;
          public Timer t;


          public ListenerTimer (PannelloGrafico pannGraf) {
                   this.pannGraf = pannGraf;

          }

          int delay = 1500; //milliseconds

          ActionListener taskPerformer = new ActionListener() {

                   public void actionPerformed (ActionEvent e) {

                             t= new Timer (1500);
                             t.start();

                             if (t=0) {

                             accordoDo=true;
                             accordoLa=false;
                             accordoRe=false;
                             accordoSol=false;
                             }

                             if (t=1500) {

                             accordoLa=true;
                             accordoDo=false; 
                             accordoRe=false;
                             accordoSol=false;
                             }

                             if (t=3000) {

                             accordoRe=true;
                             accordoDo=false; 
                             accordoLa=false;
                             accordoSol=false;
                             }

                             if (t=4500) {

                             accordoSol=true;
                             accordoDo=false; 
                             accordoLa=false;
                             accordoRe=false;
                             }

                  setRepeats (false);

                  }
         }
}
P.S.: Ho usato i colori per cercare di rendere più chiara la struttura, chè altrimenti non so come fare per mantenere gli spazi.
__________________
Java come lava!

Ultima modifica di superburp : 23-03-2007 alle 18:28.
superburp è offline   Rispondi citando il messaggio o parte di esso
Old 22-03-2007, 10:14   #2
lovaz
Senior Member
 
L'Avatar di lovaz
 
Iscritto dal: Jul 2002
Messaggi: 4334
t e' un Timer, non puo' essere =0, =1500, ecc.

E' mooolto piu' semplice:
Codice:
                Timer timer = new Timer( delay, new ActionListener() {
                        public void actionPerformed(ActionEvent e)
                        {
                                // qui metti cosa vuoi eseguire ogni 'delay' msec
                        } });
                timer.start();
Poi ti servira' qualche meccanismo, tipo una lista con i 4 accordi da\
impostare uno dopo l'altro.
lovaz è offline   Rispondi citando il messaggio o parte di esso
Old 22-03-2007, 13:05   #3
superburp
Member
 
Iscritto dal: Mar 2007
Città: Roma
Messaggi: 102
E per mettere le azioni vanno bene i true e false che ho messo? Oppure c'è un altro modo? Grazie comunque.
__________________
Java come lava!
superburp è offline   Rispondi citando il messaggio o parte di esso
Old 22-03-2007, 16:20   #4
superburp
Member
 
Iscritto dal: Mar 2007
Città: Roma
Messaggi: 102
Allora, ho provato a fare come hai detto, ma mi dà più di un problema. Sicuramente sbaglio ancora.

Ho tolto la parte su if t=0, t=1500, ecc., ma non capisco come fare per dare i comando per gli accordi. Non è che mi potresti dire dove mettere quella parte Timer= new Timer ecc.?
__________________
Java come lava!
superburp è offline   Rispondi citando il messaggio o parte di esso
Old 23-03-2007, 09:40   #5
lovaz
Senior Member
 
L'Avatar di lovaz
 
Iscritto dal: Jul 2002
Messaggi: 4334
Ma hai gia' fatto il resto del programma?
Comunque dipende, lo puoi mettere nel costruttore del pannello,
ad esempio, e farlo partire in un listener.

Per quanto riguarda tutti quei boolean, non sono il massimo, servirebbe
ad es. un oggetto Accordo (meglio una enum), ma poi dovresti in qualche
modo visualizzarlo.
lovaz è offline   Rispondi citando il messaggio o parte di esso
Old 23-03-2007, 12:23   #6
Mixmar
Senior Member
 
L'Avatar di Mixmar
 
Iscritto dal: Feb 2002
Città: Trento
Messaggi: 962
Quote:
Originariamente inviato da superburp Guarda i messaggi
P.S.: Ho usato i colori per cercare di rendere più chiara la struttura, chè altrimenti non so come fare per mantenere gli spazi.
Basta che racchiudi il codice nel blocco "CODE".
__________________
"Et Eärallo Endorenna utúlien. Sinome maruvan ar Hildinyar tenn' Ambar-metta!" -- Aragorn Elessar, Heir of Isildur
Mixmar -- OpenSuSE 11.1 on AMD 64 3000+ on DFI LanParty nF4-D | GeForce 6600 GT + Thermaltake Schooner on Samsung 710N
Storage -- ( 2 x Hitachi Deskstar 80 Gb + 1 x Hitachi 250 Gb ) = 1 RAID 5 + 1 Storage space LaCie Ethernet Disk Mini 250 Gb | HP - DV2150 EL MILAN CLAN
Mixmar è offline   Rispondi citando il messaggio o parte di esso
Old 23-03-2007, 18:22   #7
superburp
Member
 
Iscritto dal: Mar 2007
Città: Roma
Messaggi: 102
Quote:
Originariamente inviato da lovaz Guarda i messaggi
Ma hai gia' fatto il resto del programma?
Comunque dipende, lo puoi mettere nel costruttore del pannello,
ad esempio, e farlo partire in un listener.

Per quanto riguarda tutti quei boolean, non sono il massimo, servirebbe
ad es. un oggetto Accordo (meglio una enum), ma poi dovresti in qualche
modo visualizzarlo.
Sì, il resto del programma è fatto; se volete lo posso allegare. Comunque quello che vorrei fare è proprio metterlo nel costruttore e farlo partire in un listener.

P.S.: Lo allego, per chi gli volesse dare un'occhiata.
Allegati
File Type: zip Pianoforte.zip (17.7 KB, 1 visite)
__________________
Java come lava!
superburp è offline   Rispondi citando il messaggio o parte di esso
Old 23-03-2007, 18:28   #8
superburp
Member
 
Iscritto dal: Mar 2007
Città: Roma
Messaggi: 102
Quote:
Originariamente inviato da Mixmar Guarda i messaggi
Basta che racchiudi il codice nel blocco "CODE".
Fatto, grazie per il consiglio.
__________________
Java come lava!
superburp è offline   Rispondi citando il messaggio o parte di esso
Old 27-03-2007, 23:39   #9
superburp
Member
 
Iscritto dal: Mar 2007
Città: Roma
Messaggi: 102
Ho fatto delle modifiche in base a quanto mi è stato detto all'università dall'assistente. Ho fatto un listener con l'avvio del timer:

Codice:
import javax.swing.Timer;

public class ListenerTimer implements ActionListener {

     private Timer t = new Timer (delay, new ActionListener());
     private int delay=1500;
     private PannelloGrafico pannGraf;

     public ListenerTimer (PannelloGrafico pannGraf) {
          this.pannGraf = pannGraf;
     }

     pannGraf.t.start();
A questo punto mi hanno detto che dovrei fare un listener a parte dove mettere la visualizzazione ciclica degli accordi.

Ho provato a fare una cosa del genere, ma mi dà errore (chiede sempre un ; alla riga del for):

Codice:
public class ListenerCiclo implements ActionListener {

     private PannelloGrafico pannGraf;
     private int ciclo;

     public ListenerCiclo (PannelloGrafico pannGraf) {
          this.pannGraf = pannGraf;
     }

     public void actionPerformed (ActionEvent e) {

          for (double pannGraf.ciclo=1; pannGraf.ciclo<4; pannGraf.ciclo++){
               pannGraf.disegnaDo =true;
          }
     }
}
Dove sbaglio?
__________________
Java come lava!
superburp è offline   Rispondi citando il messaggio o parte di esso
Old 28-03-2007, 00:37   #10
PGI-Bis
Senior Member
 
L'Avatar di PGI-Bis
 
Iscritto dal: Nov 2004
Città: Tra Verona e Mantova
Messaggi: 4553
for (double pannGraf.ciclo=1; pannGraf.ciclo<4; pannGraf.ciclo++)

In Java il punto (.) non è un carattere che può far parte del nome di una variabile.

Nel tuo caso, il nome "tentato" è pannGraf.ciclo. E' una dichiarazione perchè è preceduta dal nome di un tipo nel segmento di inizializzazione del ciclo for:

for(double pannGraf.ciclo <- dichiarazione, punto, ahiahaihahai!

Il compilatore ti dice che manca un punto e virgola perchè se dicesse subito dove sta il problema a programmare sarebbero buoni tutti. Non sia mai! .

La soluzione al problema dipende da quello che avresti voluto dire, che hai detto e che il compilatore non ha capito.

E' possibile che tu voglia riferirti ad un campo pubblico di nome ciclo e tipo :> int, dichiarato per le istanze di PannelloGrafico. In questo caso la forma sarebbe:

Codice:
for(pannGraf.ciclo = 1; pannGraf.ciclo < 4; pannGraf.ciclo++) {
    pannGraf.disegnaDo = true;
}
Che è sintatticamente corretto ma lascia un po' perplessi: potresti non ottenere il risultato voluto.
__________________
Uilliam Scecspir ti fa un baffo? Gioffri Cioser era uno straccione? E allora blogga anche tu, in inglese come me!
PGI-Bis è offline   Rispondi citando il messaggio o parte di esso
Old 03-04-2007, 22:05   #11
superburp
Member
 
Iscritto dal: Mar 2007
Città: Roma
Messaggi: 102
Allora, ci sono stati dei cambiamenti. Il concetto alla base del timer l'ho capito all'incirca, però ho dei problemi nella realizzazione pratica.

Per realizzare il timer ho inserito nel file del pannello grafico queste variabili:

Codice:
int noteCiclo;
ActionListener evento = new ActionListener ();
private Timer t = new Timer (delay, evento);
int delay=1500;
Mi dà come errore "cannot find symbol class ActionListener" e "illegal forward reference" (riferito alla riga private Timer t).

Ho poi inserito, sempre nel file, una classe riferita all'evento:

Codice:
	public void actionPerformed (ActionListener evento) {
		if (noteCiclo == 3) {
			accordoDo=true;
			accordoLa=false;
			accordoRe=false;
			accordoSol=false;
			
			noteCiclo++;
		}

		if (noteCiclo == 2) {
			accordoLa=true;
			accordoDo=false;
			accordoRe=false;
			accordoSol=false;

			noteCiclo++;
		}

		if (noteCiclo == 1) {
			accordoRe=true;
			accordoDo=false;
			accordoLa=false;
			accordoSol=false;

			noteCiclo++;
		}

		if (noteCiclo == 0) {
			accordoSol=true;
			accordoDo=false;
			accordoRe=false;
			accordoLa=false;

			noteCiclo++;
		}
	}
E' corretta? Dovrebbe far visualizzare i 4 accordi ciclicamente.

A parte gli errori visti in precedenza, nel complesso va bene? Dove devo mettere i comandi t.start (); e t.stop();? Il primo ho pensato dopo il delay, l'altro alla fine della classe del ciclo. E' giusto?
__________________
Java come lava!
superburp è offline   Rispondi citando il messaggio o parte di esso
Old 04-04-2007, 10:07   #12
lovaz
Senior Member
 
L'Avatar di lovaz
 
Iscritto dal: Jul 2002
Messaggi: 4334
Ehm... non offenderti, ma ti mancano proprio le basi di java, forse sarebbe opportuno
che cominciassi con programmini piu' semplici...

In ogni caso:
Quote:
Originariamente inviato da superburp Guarda i messaggi
Allora, ci sono stati dei cambiamenti. Il concetto alla base del timer l'ho capito all'incirca, però ho dei problemi nella realizzazione pratica.

Per realizzare il timer ho inserito nel file del pannello grafico queste variabili:

Codice:
int noteCiclo;
ActionListener evento = new ActionListener ();
private Timer t = new Timer (delay, evento);
int delay=1500;
Mi dà come errore "cannot find symbol class ActionListener" e "illegal forward reference" (riferito alla riga private Timer t).
Non puoi instanziare un ActionListener, e' un'interfaccia.
E non puoi usare delay finche' non l'hai dichiarato, quindi devi scambiare le ultime due linee.
Quote:

Ho poi inserito, sempre nel file, una classe riferita all'evento:

Codice:
	public void actionPerformed (ActionListener evento) {
		if (noteCiclo == 3) {
			accordoDo=true;
			accordoLa=false;
			accordoRe=false;
			accordoSol=false;
			
			noteCiclo++;
		}

		if (noteCiclo == 2) {
			accordoLa=true;
			accordoDo=false;
			accordoRe=false;
			accordoSol=false;

			noteCiclo++;
		}

		if (noteCiclo == 1) {
			accordoRe=true;
			accordoDo=false;
			accordoLa=false;
			accordoSol=false;

			noteCiclo++;
		}

		if (noteCiclo == 0) {
			accordoSol=true;
			accordoDo=false;
			accordoRe=false;
			accordoLa=false;

			noteCiclo++;
		}
	}
E' corretta? Dovrebbe far visualizzare i 4 accordi ciclicamente.

A parte gli errori visti in precedenza, nel complesso va bene? Dove devo mettere i comandi t.start (); e t.stop();? Il primo ho pensato dopo il delay, l'altro alla fine della classe del ciclo. E' giusto?
Quel codice non visualizza niente, setta solo delle variabili in memoria.

Lo fai partire quando ti serve...
lovaz è offline   Rispondi citando il messaggio o parte di esso
Old 04-04-2007, 15:36   #13
superburp
Member
 
Iscritto dal: Mar 2007
Città: Roma
Messaggi: 102
Quote:
Originariamente inviato da lovaz Guarda i messaggi
Ehm... non offenderti, ma ti mancano proprio le basi di java, forse sarebbe opportuno
che cominciassi con programmini piu' semplici...

In ogni caso:

Non puoi instanziare un ActionListener, e' un'interfaccia.
E non puoi usare delay finche' non l'hai dichiarato, quindi devi scambiare le ultime due linee.

Quel codice non visualizza niente, setta solo delle variabili in memoria.

Lo fai partire quando ti serve...
Non mi offendo, anzi, lo so bene. Purtroppo non l'ho scelto io il programma...

Comunque, mi potresti dire come fare per instanziare l'ActionListener?

Sul codice un amico mi ha detto che dovrebbe in questo modo far vedere gli accordi per un ciclo soltanto (che poi è quello che mi interessa). Dici che non serve neanche a questo?

Grazie comunque per la risposta.
__________________
Java come lava!
superburp è offline   Rispondi citando il messaggio o parte di esso
Old 04-04-2007, 18:22   #14
lovaz
Senior Member
 
L'Avatar di lovaz
 
Iscritto dal: Jul 2002
Messaggi: 4334
Quote:
Originariamente inviato da superburp Guarda i messaggi
Comunque, mi potresti dire come fare per instanziare l'ActionListener?
Devi implementare l'interfaccia, come ad esempio hai fatto sopra con
la classe ListenerCiclo, o con una classe anonima, come ti ho
mostrato nel primo esempio che ti ho fatto.
Quote:
Sul codice un amico mi ha detto che dovrebbe in questo modo far vedere gli accordi per un ciclo soltanto (che poi è quello che mi interessa). Dici che non serve neanche a questo?
Non riesco a capire, quando fai accordoDo = true; eccetera, non fai altro
che impostare delle variabili, per visualizzare questi accordi devi "disegnare",
anche solo aggiungendo delle JLabel a cui cambi il colore di sfondo...

Non ti posso aiutare di più, dovrei scriverti tutto il programma...
lovaz è offline   Rispondi citando il messaggio o parte di esso
Old 04-04-2007, 18:54   #15
superburp
Member
 
Iscritto dal: Mar 2007
Città: Roma
Messaggi: 102
Quote:
Originariamente inviato da lovaz Guarda i messaggi
Devi implementare l'interfaccia, come ad esempio hai fatto sopra con
la classe ListenerCiclo, o con una classe anonima, come ti ho
mostrato nel primo esempio che ti ho fatto.

Non riesco a capire, quando fai accordoDo = true; eccetera, non fai altro
che impostare delle variabili, per visualizzare questi accordi devi "disegnare",
anche solo aggiungendo delle JLabel a cui cambi il colore di sfondo...

Non ti posso aiutare di più, dovrei scriverti tutto il programma...
I disegni degli accordi già ci sono, il resto del programma è fatto. Manca di mettere la possibilità di vedere i 4 accordi ciclicamente. Grazie comunque.
__________________
Java come lava!
superburp è offline   Rispondi citando il messaggio o parte di esso
Old 04-04-2007, 18:58   #16
lovaz
Senior Member
 
L'Avatar di lovaz
 
Iscritto dal: Jul 2002
Messaggi: 4334
Senza vedere il codice che imposta l'accordo è impossibile aiutarti...

Immagino che sia un metodo, impostare una variabile booleana
non fa niente - a meno che poi questa variabile sia usata da qualche
altra parte.
lovaz è offline   Rispondi citando il messaggio o parte di esso
Old 04-04-2007, 19:22   #17
PGI-Bis
Senior Member
 
L'Avatar di PGI-Bis
 
Iscritto dal: Nov 2004
Città: Tra Verona e Mantova
Messaggi: 4553
Facciamo un esempio. E di solito quando uno dice così finisce tutto a schifìo .

E' scritto in fretta, quindi ci sono un po' di faccende in sospeso. Ma l'idea dovrebbe trasparire. C'è una tastiera con 4 tasti. La tastiera ha un metodo, setAccordi, che consente di attivare o disattivare i quattro tasti.

C'è un Timer incorporato in Sequence player che, a intervalli di tot millisecondi, chiama il metodo setAccordi della tastiera.

Gli accordi da usare per attivare/disattivare i tasti sono incorporati in un oggetto Sequence. Questa sequenza di accordi viene data in pasto al sequence player prima di invocare il suo metodo "play". Quando si preme "play", il SequencePlayer legge la sequenza e applica ogni volta il gruppo di accordi successivo alla tastiera.

Codice:
import java.awt.*;
import java.awt.event.*;
import java.util.*;
import javax.swing.*;

public class Main {
	private Tastiera tastiera = new Tastiera();
	private SequencePlayer player = new SequencePlayer(tastiera);

	public void start() {
		Sequence sequence = new Sequence();
		sequence.push(Tastiera.DO + Tastiera.RE);
		sequence.push(Tastiera.DO + Tastiera.FA);
		sequence.push(Tastiera.MI + Tastiera.FA);
		sequence.push(Tastiera.RE + Tastiera.MI);
		player.setSequenza(sequence, 2000);
		JButton button = new JButton("play");
		button.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				player.play();
			}
		});
		JPanel buttonPanel = new JPanel(new FlowLayout(FlowLayout.CENTER));
		buttonPanel.add(button);
		JFrame window = new JFrame();
		window.add(tastiera.getJComponent(), BorderLayout.CENTER);
		window.add(buttonPanel, BorderLayout.SOUTH);
		window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); //brutalone
		window.pack();
		window.setVisible(true);
	}
	
	public static void main(String[] args) {
		SwingUtilities.invokeLater(new Runnable() {
			public void run() {
				new Main().start();
			}
		});
	}
}

class Sequence {
	private LinkedList<Integer> data = new LinkedList<Integer>();
	private int accordoCorrente;

	public void push(int mascheraAccordi) {
		data.add(mascheraAccordi);
	}

	public boolean sequenzaTerminata() {
		return accordoCorrente == data.size();
	}

	public int getProssimoAccordo() {
		return data.get(accordoCorrente++);
	}
}

class SequencePlayer {
	private ActionListener jumper = new ActionListener() {
		public void actionPerformed(ActionEvent e) {
			applicaAccordoSuccessivo();
		}
	};
	private javax.swing.Timer timer = new javax.swing.Timer(0, jumper);
	private Sequence sequenza;
	private Tastiera tastiera;

	public SequencePlayer(Tastiera t) {
		tastiera = t;
	}

	public void setSequenza(Sequence s, int tempo) {
		sequenza = s;
		timer.setDelay(tempo);
	}

	public void play() {
		timer.start();
	}

	public void stop() {
		timer.stop();
	}

	private void applicaAccordoSuccessivo() {
		if(sequenza == null || sequenza.sequenzaTerminata()) {
			tastiera.setAccordi(Tastiera.NESSUNO);
			stop();
		} else {
			tastiera.setAccordi(sequenza.getProssimoAccordo());
		}
	}
}

class Tastiera {
	public static final int NESSUNO = 0;
	public static final int DO = 2;
	public static final int RE = 4;
	public static final int MI = 8;
	public static final int FA = 16;

	private JToggleButton doButton = new JToggleButton("DO");
	private JToggleButton reButton = new JToggleButton("RE");
	private JToggleButton miButton = new JToggleButton("MI");
	private JToggleButton faButton = new JToggleButton("FA");

	private JComponent component;

	public Tastiera() {
		JPanel panel = new JPanel(new GridLayout(1, 4));
		pushAndSet(panel, doButton, reButton, miButton, faButton);
		component = panel;
	}

	public JComponent getJComponent() {
		return component;
	}

	public void setAccordi(int maschera) {
		doButton.setSelected(èAttivo(DO, maschera));
		reButton.setSelected(èAttivo(RE, maschera));
		miButton.setSelected(èAttivo(MI, maschera));
		faButton.setSelected(èAttivo(FA, maschera));
	}

	private void pushAndSet(Container container, JComponent...components) {
		Dimension size = new Dimension(32, 64);
		for(JComponent c : components) {
			c.setPreferredSize(size);
			c.setBorder(BorderFactory.createLineBorder(Color.BLACK));
			container.add(c);
		}
	}

	private boolean èAttivo(int accordo, int maschera) {
		return (maschera & accordo) == accordo;
	}
}
Non è detto che tu possa applicare questo modello alla tua applicazione. Essendo praticamente già scritta è possibile che tu debba trasformarla in qualcosa di più compatibile. Comunque spero dia un'idea circa l'uso di un timer nel contesto da te descritto.
__________________
Uilliam Scecspir ti fa un baffo? Gioffri Cioser era uno straccione? E allora blogga anche tu, in inglese come me!
PGI-Bis è offline   Rispondi citando il messaggio o parte di esso
Old 05-04-2007, 20:28   #18
superburp
Member
 
Iscritto dal: Mar 2007
Città: Roma
Messaggi: 102
Allora, intanto ringrazio tutti per la disponibilità. Poi aggiungo che forse quasi ci sono...
Il problema che ho sta nel modo per fargli visualizzare gli accordi. Il timer però funziona, perchè mettendo una riga System.out.println ("Ciao") compaiono le 4scritte nella finestra del prompt alla distanza impostata dal delay.

Vado con ordine. Nel file Pianforte (dove c'è il main) ho messo questo richiamo ad un listener chiamato Ciclo per quando si clicca su "Visualizzazione ciclica":
Codice:
	JMenuItem menu4di1=new JMenuItem ("Visualizzazione ciclica");
		menu1.add(menu4di1);
		menu4di1.addActionListener (new Ciclo (pannGraf));
Questo Ciclo è così fatto:
Codice:
import java.awt.event.*;

public class Ciclo implements ActionListener {

	private PannelloGrafico pannGraf;
	
	public Ciclo (PannelloGrafico pannGraf) {
		this.pannGraf = pannGraf;
	}

	public void actionPerformed (ActionEvent e) {
		pannGraf.t.start();
	}
}
Il Ciclo fa partire un timer definito nel pannello grafico in questo modo:
Codice:
	public int noteCiclo=0;
	public ListenerCiclo evento = new ListenerCiclo(this);
	public static int delay=1500;
	public Timer t = new Timer (delay, evento);
Qui vengono introdotte la variabile noteCiclo che viene utilizzata nel ListenerCiclo che è così fatto:
Codice:
import java.awt.event.*;
import javax.swing.Timer;

public class ListenerCiclo implements ActionListener {

	private PannelloGrafico pannGraf;

	public ListenerCiclo (PannelloGrafico pannGraf) {
		this.pannGraf = pannGraf;
	}

	public void actionPerformed (ActionEvent e) {

		if (pannGraf.noteCiclo == 3) {
			pannGraf.accordoDo=true;
			pannGraf.accordoLa=false;
			pannGraf.accordoRe=false;
			pannGraf.accordoSol=false;

			pannGraf.noteCiclo++;
		}

		if (pannGraf.noteCiclo == 2) {
			pannGraf.accordoLa=true;
			pannGraf.accordoDo=false;
			pannGraf.accordoRe=false;
			pannGraf.accordoSol=false;

			pannGraf.noteCiclo++;
		}

		if (pannGraf.noteCiclo == 1) {
			pannGraf.accordoRe=true;
			pannGraf.accordoDo=false;
			pannGraf.accordoLa=false;
			pannGraf.accordoSol=false;

			pannGraf.noteCiclo++;
		}

		if (pannGraf.noteCiclo == 0) {
			pannGraf.accordoSol=true;
			pannGraf.accordoDo=false;
			pannGraf.accordoRe=false;
			pannGraf.accordoLa=false;

			pannGraf.noteCiclo++;
		}

		if (pannGraf.noteCiclo == 4) {
			pannGraf.t.stop();
		}			
	}
}
Come ho già detto la parte grafica dei 4 accordi è fatta, si tratta di far sì che quando parte il timer li visualizzi ciclicamente, così come scrive "Ciao". Se questo metodo con true e false non è corretto come dovrei fare?

P.S.: Ho usato il metodo con true e false perchè nel anche pannello grafico ho fatto così.
__________________
Java come lava!

Ultima modifica di superburp : 05-04-2007 alle 20:33.
superburp è offline   Rispondi citando il messaggio o parte di esso
Old 06-04-2007, 16:35   #19
superburp
Member
 
Iscritto dal: Mar 2007
Città: Roma
Messaggi: 102
Stavo pensando che forse potrei eliminare il listener Ciclo mettendo il comando pannGraf.t.start() nel ListenerCiclo e modificando la riga del file Pianoforte da menu4di1.addActionListener (new Ciclo (pannGraf)) in menu4di1.addActionListener (new :ListenerCiclo (pannGraf)).
__________________
Java come lava!
superburp è offline   Rispondi citando il messaggio o parte di esso
Old 06-04-2007, 20:46   #20
superburp
Member
 
Iscritto dal: Mar 2007
Città: Roma
Messaggi: 102
Allora, facendo questa modifica effettivamente il programma funziona ancora.

Il problema che avevo per la visualizzazione era dovuto al fatto che al termine di ogni if del ListenerCiclo non mettevo il repaint(). L'ultimo problema che rimane è come fare per far sì che ogni volta che clicco su Visualizzazione ciclica parta il ciclo? Perchè così lo fa solo una volta, se riclicco non fa nulla.
__________________
Java come lava!
superburp è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


Wi-Fi 7 con il design di una vetta innevata: ecco il nuovo sistema mesh di Huawei Wi-Fi 7 con il design di una vetta innevata: ecc...
Core Ultra 7 270K Plus e Core Ultra 7 250K Plus: Intel cerca il riscatto ma ci riesce in parte Core Ultra 7 270K Plus e Core Ultra 7 250K Plus:...
PC Specialist Lafité 14 AI AMD: assemblato come vuoi tu PC Specialist Lafité 14 AI AMD: assemblat...
Recensione Nothing Phone 4(a): sempre iconico ma ora più concreto Recensione Nothing Phone 4(a): sempre iconico ma...
Corsair Vanguard Air 99 Wireless: non si era mai vista una tastiera gaming così professionale Corsair Vanguard Air 99 Wireless: non si era mai...
L'esperimento BASE del CERN è riu...
Afeela è morta: chiusa definitiva...
Intel BOT altera i risultati, Geekbench ...
Intel e AMD faticano a soddisfare la dom...
Microsoft e NVIDIA insieme per dare una ...
Ring rinnova l'intera gamma video: 4K su...
Recensione Galaxy Buds4 Pro: le cuffie S...
Spotify si arricchisce ancora: arriva So...
I digital twin di AVEVA a supporto delle...
Iliad non si ferma: clienti in crescita ...
XuanTie C950, il chip IA di Alibaba basa...
Volkswagen richiama 94.000 auto elettric...
Le nuove LaserJet di HP portano la critt...
FSR 4 gira sulla GPU di PS5 Pro, ma non ...
Intel rinnova l'offerta professionale: C...
Chromium
GPU-Z
OCCT
LibreOffice Portable
Opera One Portable
Opera One 106
CCleaner Portable
CCleaner Standard
Cpu-Z
Driver NVIDIA GeForce 546.65 WHQL
SmartFTP
Trillian
Google Chrome Portable
Google Chrome 120
VirtualBox
Tutti gli articoli Tutte le news Tutti i download

Strumenti

Regole
Non Puoi aprire nuove discussioni
Non Puoi rispondere ai messaggi
Non Puoi allegare file
Non Puoi modificare i tuoi messaggi

Il codice vB è On
Le Faccine sono On
Il codice [IMG] è On
Il codice HTML è Off
Vai al Forum


Tutti gli orari sono GMT +1. Ora sono le: 00:29.


Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Served by www3v