Avatar billede a-torsten Nybegynder
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;   
    }
}
Avatar billede magoo20000 Nybegynder
14. februar 2003 - 12:22 #1
Hvorfor vil du det?
Avatar billede a-torsten Nybegynder
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.....
Avatar billede a-torsten Nybegynder
14. februar 2003 - 17:39 #3
Slet ingen der har et bud på mit lille problem....
Avatar billede magoo20000 Nybegynder
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 :-)
Avatar billede jesper_dk Nybegynder
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
Avatar billede a-torsten Nybegynder
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
Avatar billede jesper_dk Nybegynder
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();
    }
Avatar billede a-torsten Nybegynder
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
Avatar billede jonasbc Nybegynder
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
Avatar billede a-torsten Nybegynder
18. februar 2003 - 10:44 #10
Jeg er satme ikk meget for at acceptere dine svar.. Din satan :o)

-Anders
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester