14. februar 2003 - 12:07
Der er
9 kommentarer og 1 løsning
Opdel applet i 2 klasser
Hvordan deler jeg denne klasse op i 2... en GUI og en Clock klasse..?? import java.awt.*; import java.awt.event.*; import java.applet.*; public class Clock extends java.applet.Applet implements Runnable { Thread clockThread = null; int tid = 5; private Label spilTid; public void init() { spilPlade(); } private void spilPlade() { spilTid = new Label(); spilTid.setBackground(Color.white); spilTid.setForeground(Color.black); spilTid.setText(""); spilTid.setBounds(10,10,100,30); setLayout(null); add(spilTid); } public void start() { if (clockThread == null) { clockThread = new Thread(this, "Clock"); clockThread.start(); } } public void run() { while (tid > 0) { tid = tid - 1; try { clockThread.sleep(1000); spilTid.setText(""+tid); } catch (InterruptedException e) { } } if(tid == 0) stop(); } public void stop() { spilTid.setText("Runden er slut"); clockThread = null; } }
Annonceindlæg tema
Offentlig digitalisering
Fra effektivisering til digital suverænitet. Hvordan skaber det offentlige en digital fremtid med AI, sikkerhed og kontrol i centrum?
14. februar 2003 - 12:22
#1
Hvorfor vil du det?
14. februar 2003 - 12:45
#2
Jamen, det er vel ikke vigtigt hvorfor... Men kan sige at der skal proppes meget mere på den GUI og så er det for at gøre det mere overskueligt.....
14. februar 2003 - 17:39
#3
Slet ingen der har et bud på mit lille problem....
14. februar 2003 - 18:09
#4
Jeg mener ikke, at det kan lade sig gøre. Jeg ser intet forkert/besværligt i, at holde Java Appletten, som en indkapsling af en tråd. Dette gælder også selvom der måtte komme meget andet kode i denne klasse. Evt. kunne du (for at midske antallet af kodelinjer) implementere en guihandler klasse, der håndtere de events du måtte få på klassen senere hen; jeg kan se at du laver import java.awt.event.*, men ikke benytter den endnu. Valget er dit :-)
16. februar 2003 - 22:21
#5
jeg er ikke ekspert i applets (jeg laver ikke applets kun "almindelige" java programmer), men jeg mener at applets skulle virke næsten ligesådan som "almindelig" java. Her kommer mit bud: læg start(), run() og stop() metoden over i en ny klasse kald start metoden i din nye klasse fra din spilPlade() metode
17. februar 2003 - 09:33
#6
Jesper: Den bliver godt nok kørt så (Set via en System.out), men GUI´en opdateres jo ikk... Kan det virkelig passe at man ikk kan lave et Applet-nedtællingsur via en GUI-klasse og en Kontrol-klasse..?? -Anders
18. februar 2003 - 09:08
#7
husker du at ændre din run() og stop() metoder, så de kalder tilbage i GUI klassen? altså: opret en public metode i GUI klassen der kan ændrer "spilTid Labelen", og kalde denne metode fra din run() metod når du vil ændrer "spilTid" se her under: i GUI klassen oprettes en set metode: public void setSpiltid(String tidtext){ spilTid.setText(tidtext); } //jeg regner med at du kører nedtælling på tid variablen i Kontroller klassen I run() og Stop() ændres så du kalder den nye metode når du vil opdatere public void run() { while (tid > 0) { tid = tid - 1; try { clockThread.sleep(1000); Guiklasse.setSpiltid(tid); //her kaldes den nye metode } catch (InterruptedException e) { } } if(tid == 0) stop(); }
18. februar 2003 - 09:27
#8
Måske... GUI-klassen : import java.awt.*; import java.applet.*; public class Clock extends java.applet.Applet{ int tid = 5; public Label spilTid; public void init() { ur.start(); spilPlade(); } public void setSpiltid(String tidtext) { spilTid.setText(tidtext); } public void spilPlade() { spilTid = new Label(); spilTid.setBackground(Color.white); spilTid.setForeground(Color.black); spilTid.setText(""); spilTid.setBounds(10,10,100,30); setLayout(null); add(spilTid); } } Kontrol-klassen : public class ur implements Runnable { Thread clockThread = null; public void start() { if (clockThread == null) { clockThread = new Thread(this, "Clock"); clockThread.start(); } } public void run() { int tid = 5; while (tid > 0) { tid = tid - 1; try { clockThread.sleep(1000); Clock.setSpiltid(""+tid); //her kaldes den nye metode System.out.println(""+tid); } catch (InterruptedException e) { } } if(tid == 0) Clock.setSpiltid("Slut"); } } Hva gør jeg forkert..? -Anders
18. februar 2003 - 10:31
#9
Observer/Observable er din ven... import java.awt.*; import java.applet.*; public class Clock extends java.applet.Applet implements java.util.Observer{ int tid = 5; public Label spilTid; public void init() { ur ur = new ur(); ur.addObserver(this); Thread traad = new Thread(ur); traad.start(); spilPlade(); } public void setSpiltid(String tidtext) { spilTid.setText(tidtext); } public void spilPlade() { spilTid = new Label(); spilTid.setBackground(Color.white); spilTid.setForeground(Color.black); spilTid.setText(""); spilTid.setBounds(10,10,100,30); setLayout(null); add(spilTid); } public void update(java.util.Observable observable, Object obj) { System.out.println("modtog tid: " + obj); setSpiltid(obj.toString()); } } public class ur extends java.util.Observable implements Runnable { Thread clockThread = null; public void run() { int tid = 5; while (tid > 0) { tid = tid - 1; try { clockThread.sleep(1000); // Clock.setSpiltid(""+tid); //her kaldes den nye metode opdater(""+tid); System.out.println(""+tid); } catch (InterruptedException e) { } } if(tid == 0){ // Clock.setSpiltid("Slut"); opdater("slut"); System.out.println("slut"); } } private void opdater(String text){ setChanged(); notifyObservers(text); clearChanged(); } } - Jones
18. februar 2003 - 10:44
#10
Jeg er satme ikk meget for at acceptere dine svar.. Din satan :o) -Anders
Kurser inden for grundlæggende programmering