Vytvořme čítač, jenž lze opakovaně zastavovat a spouštět. Čítač bude reprezentován
instancí třídy Thread, která dostane k dispozici odkaz na
textové pole, do kterého bude čítač zapisovat svou aktuální hodnotu. Voláním metody
invertFlag se bude stav čítače měnit ze spuštěného na
pozastavený a naopak.
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
class CounterThread extends Thread
{
private int count = 0;
private boolean runFlag = false;
private JTextField txt;
public CounterThread(JTextField txt)
{
this.txt = txt;
}
public void invertFlag()
{
runFlag = !runFlag;
}
public void run()
{
while( true ) {
try {
sleep(100);
} catch( InterruptedException e) {}
if( runFlag )
txt.setText(Integer.toString(count++));
}
}
}
public class Counter extends JFrame {
JTextField txt = new JTextField(10);
CounterThread cntr = new CounterThread(txt);
Counter()
{
JPanel p = new JPanel();
p.add(txt);
JButton bStop = new JButton("Start/Stop");
bStop.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
cntr.invertFlag();
}
});
p.add(bStop);
getContentPane().add(p, BorderLayout.CENTER);
setSize(300,80);
}
public static void main(String[] args) {
Counter app = new Counter();
app.setVisible(true);
app.cntr.start();
}
}
|