Hallo Leute,
ich bin gerade dabei einen Zeit- und Punktecounter zu programmieren. Könnt ihr euch am beispiel von Solitare anschauen - unten rechts in der Statusbar.
Zum Problem: Ich habe einen Thread der periodisch einen Couter hochzählt (Sekunden) und einen Wert der jede Sekunde um einen Bestimmten Wert reduziert wird. Nun will ich diesen Thread mit einem Stop- und Resume-JButton steuern. Nun hält nicht mein Thread an, sondern meine GUI wird gestoppt =/
Wie muss ich meine ActionListener bestücken damit das oben beschriebene werkelt?
Die Knackpunkte sind meiner Meinung nach die ActionListener
Hoffe auf baldige Hilfe
Mfg Burny
ich bin gerade dabei einen Zeit- und Punktecounter zu programmieren. Könnt ihr euch am beispiel von Solitare anschauen - unten rechts in der Statusbar.
Zum Problem: Ich habe einen Thread der periodisch einen Couter hochzählt (Sekunden) und einen Wert der jede Sekunde um einen Bestimmten Wert reduziert wird. Nun will ich diesen Thread mit einem Stop- und Resume-JButton steuern. Nun hält nicht mein Thread an, sondern meine GUI wird gestoppt =/
Wie muss ich meine ActionListener bestücken damit das oben beschriebene werkelt?
Java:
package timer_highscore2;
public enum Level {
EASY, MEDIUM, DIFFICULT, INFERNAL;
}
package timer_highscore2;
import java.util.TimerTask;
import javax.swing.JLabel;
public class Score extends TimerTask {
private int points = 0;
private int reducer = 0;
private int time = -1;
public JLabel tmplabel;
Score() {
}
Score(Level level, JLabel label) {
tmplabel = new JLabel();
tmplabel = label;
if (level == Level.EASY) {
points = 5005;
reducer = 5;
} else {
if (level == Level.MEDIUM) {
points = 10010;
reducer = 10;
} else {
if (level == Level.DIFFICULT) {
points = 15015;
reducer = 15;
} else {
points = 20020;
reducer = 20;
}
}
}
}
public void stop(){
try {
wait();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public void resume(){
notify();
}
public int getPoints() {
return points;
}
public int getTime() {
return time;
}
public void run() {
// Reducing point
points -= reducer;
// Time counting up each second
time += 1;
System.out.println("Score: " + points + " Time: " + time);
tmplabel.setText("Score: " + String.valueOf(points) + " Time: " + String.valueOf(time));
}
}
package timer_highscore2;
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Timer;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
public class TestFrame_2 extends JFrame{
public JLabel label;
public Score score;
public JButton stop;
public JButton resume;
TestFrame_2(){
final Timer timer = new Timer();
label = new JLabel("");
score = new Score(Level.EASY, label);
stop = new JButton("Stop");
resume = new JButton("Resume");
timer.scheduleAtFixedRate(score, 1000, 1000);
setLayout(new FlowLayout());
add(label);
add(stop);
add(resume);
// Adding actionlisteners to buttons
stop.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
synchronized(score){
try {
score.wait();
} catch (InterruptedException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
}
}
});
resume.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
score.resume();
}
});
pack();
setTitle("TestFrame_2");
setSize(400, 200);
setDefaultCloseOperation(EXIT_ON_CLOSE);
setVisible(true);
}
public void update(){
score.run();
}
public static void main(String args[]){
TestFrame_2 tf2 = new TestFrame_2();
tf2.update();
}
}
Die Knackpunkte sind meiner Meinung nach die ActionListener
Java:
// Adding actionlisteners to buttons
stop.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
synchronized(score){
try {
score.wait();
} catch (InterruptedException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
}
}
});
resume.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
score.resume();
}
});
Hoffe auf baldige Hilfe
Mfg Burny