Originariamente inviato da draghe
anche se tu me lo hai spiegato in due righe, quindi presuppongo sia semplicissimo, nn sono riuscito. potresti farmi l'implementazione sul codice del mio bottone
Io non ho utilizzato ciò che ha detto lui, anche se sarebbe decisamente meglio.. comunque ho fatto questo:
codice:
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
/*
* Un esempio decisamente migliorabile con i Timer di swing
* tuttavia e' funzionante.
*/
class ButtonInc extends JFrame implements Runnable {
private static int val=0;
private boolean suspend = false;
Thread t;
JTextField campo;
ButtonInc() {
super("TestIncrement");
JPanel pannello = new JPanel();
campo = new JTextField(20);
JButton bottone = new JButton("Click");
// Creo un thread e lo avvio.
t = new Thread(this);
t.start();
bottone.addMouseListener(new MouseListener() {
synchronized public void mousePressed(MouseEvent me) {
// Riprendo il conteggio
riprendi();
}
public void mouseReleased(MouseEvent me) {
// Sospendi il conteggio
sospendi();
// Mostro il risultato nella JTextField
campo.setText(""+val);
}
// Questi non ci servono
public void mouseClicked(MouseEvent me) {}
public void mouseEntered(MouseEvent me) {}
public void mouseExited(MouseEvent me) {}
});
pannello.add(bottone);
pannello.add(campo);
add(pannello);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
synchronized private void riprendi() {
suspend = false;
// riprendo il thread
notify();
}
private void sospendi() {
suspend = true;
}
public void run() {
try {
while(true) {
// Incremento la variabile
val++;
synchronized(this) {
while(suspend) {
// Sospendo il thread
wait();
}
}
}
} catch(InterruptedException ie) {}
}
public static void main(String args[]) {
try {
SwingUtilities.invokeAndWait( new Runnable() {
public void run() {
makeGUI();
}
});
} catch(Exception exc) {}
}
public static void makeGUI() {
ButtonInc bi = new ButtonInc();
bi.pack();
bi.setVisible(true);
}
}
Credo sia questo che intendi, provalo e modificatelo come vuoi ^^