surffindoggy
Gebruiker
- Lid geworden
- 5 apr 2006
- Berichten
- 9
Hallo iedereen,
ik heb hier de volgende code:
import java.awt.*;
import java.awt.event.*;
import java.applet.*;
public class InPanel extends Panel
{ ReserveerActionListener reserveer;
TextField aantalWachtendenVeld;
Button reserveerKnop;
Label inLabel ;
Licht licht;
public InPanel(String nr, Tuin tuin)
{ Label kassaLabel = new Label("KASSA " + nr);
kassaLabel.setBounds(24,0,48,21);
add(kassaLabel);
aantalWachtendenVeld = new TextField();
aantalWachtendenVeld.setBounds(0,36,36,27);
add(aantalWachtendenVeld);
reserveerKnop = new Button();
reserveerKnop.setLabel("Reserveer");
reserveerKnop.setBounds(60,36,74,25);
reserveerKnop.addActionListener(reserveer = new ReserveerActionListener());
add(reserveerKnop);
inLabel = new Label("IN " + nr);
inLabel.setBounds(156,0,30,20);
add(inLabel);
licht = new Licht();
licht.setBounds(156,36,24,24);
add(licht);
}
class Licht extends Canvas
{ private Color kleur = Color.red;
public Licht()
{ setSize(24,24);
}
public void setGroen()
{ kleur = Color.green;
puls = true;
repaint();
}
public void setRood()
{ kleur = Color.red;
puls = false;
repaint();
}
public void groenPuls() //Zet licht gedurende 3s op groen.
{ setGroen();
try
{ Thread.currentThread().sleep(3000);
}
catch(InterruptedException e){}
setRood();
}
public void paint(Graphics g)
{ g.setColor(kleur);
g.fillOval(0,0,24,24);
}
}
class ReserveerActionListener extends Thread implements ActionListener
{ private Thread t = null;
public void actionPerformed(ActionEvent event)
{ if(event.getSource()== reserveerKnop)
{ if(Integer.parseInt(aantalWachtendenVeld.getText())<= Tuin.MAX_AANTAL_BEZOEKERS)
{ if(t == null)
{ t = new Thread(this);
t.run();
}
}
else
{ aantalWachtendenVeld.setText("Fout");
}
}
}
public void run()
{ licht.groenPuls();
}
}
}
Het probleem ligt bij de procedure groenPuls() (in de klasse Licht). Ik will dat er DIRECT ge-repaint word nadat setGroen() en setRood() (ook in de klasse Licht) geroepen wordt.
Maar er wordt PAS ge-repaint wanneer de Thread eindigt (de Thread wordt in de klasse ReserveerActionListener aangeroepen).
gevraagd:
Weet iemand hoe ik de paint methode (klasse Licht) kan aanroepen terwijl de Thread nog "levend" is?
oohhh ja... er is een voorwaarde (sorry dat ik zo lastig ben
)
Ik will dat de Thread "slaapt" tijdens de groenPuls() methode, en NIET tijdens de run() (klasse ReserveerActionListener) methode.
Alvast bedankt en hopelijk is m'n probleemstelling duidelijk voor jullie.
ik heb hier de volgende code:
import java.awt.*;
import java.awt.event.*;
import java.applet.*;
public class InPanel extends Panel
{ ReserveerActionListener reserveer;
TextField aantalWachtendenVeld;
Button reserveerKnop;
Label inLabel ;
Licht licht;
public InPanel(String nr, Tuin tuin)
{ Label kassaLabel = new Label("KASSA " + nr);
kassaLabel.setBounds(24,0,48,21);
add(kassaLabel);
aantalWachtendenVeld = new TextField();
aantalWachtendenVeld.setBounds(0,36,36,27);
add(aantalWachtendenVeld);
reserveerKnop = new Button();
reserveerKnop.setLabel("Reserveer");
reserveerKnop.setBounds(60,36,74,25);
reserveerKnop.addActionListener(reserveer = new ReserveerActionListener());
add(reserveerKnop);
inLabel = new Label("IN " + nr);
inLabel.setBounds(156,0,30,20);
add(inLabel);
licht = new Licht();
licht.setBounds(156,36,24,24);
add(licht);
}
class Licht extends Canvas
{ private Color kleur = Color.red;
public Licht()
{ setSize(24,24);
}
public void setGroen()
{ kleur = Color.green;
puls = true;
repaint();
}
public void setRood()
{ kleur = Color.red;
puls = false;
repaint();
}
public void groenPuls() //Zet licht gedurende 3s op groen.
{ setGroen();
try
{ Thread.currentThread().sleep(3000);
}
catch(InterruptedException e){}
setRood();
}
public void paint(Graphics g)
{ g.setColor(kleur);
g.fillOval(0,0,24,24);
}
}
class ReserveerActionListener extends Thread implements ActionListener
{ private Thread t = null;
public void actionPerformed(ActionEvent event)
{ if(event.getSource()== reserveerKnop)
{ if(Integer.parseInt(aantalWachtendenVeld.getText())<= Tuin.MAX_AANTAL_BEZOEKERS)
{ if(t == null)
{ t = new Thread(this);
t.run();
}
}
else
{ aantalWachtendenVeld.setText("Fout");
}
}
}
public void run()
{ licht.groenPuls();
}
}
}
Het probleem ligt bij de procedure groenPuls() (in de klasse Licht). Ik will dat er DIRECT ge-repaint word nadat setGroen() en setRood() (ook in de klasse Licht) geroepen wordt.
Maar er wordt PAS ge-repaint wanneer de Thread eindigt (de Thread wordt in de klasse ReserveerActionListener aangeroepen).
gevraagd:
Weet iemand hoe ik de paint methode (klasse Licht) kan aanroepen terwijl de Thread nog "levend" is?
oohhh ja... er is een voorwaarde (sorry dat ik zo lastig ben

Ik will dat de Thread "slaapt" tijdens de groenPuls() methode, en NIET tijdens de run() (klasse ReserveerActionListener) methode.
Alvast bedankt en hopelijk is m'n probleemstelling duidelijk voor jullie.
