Avatar billede muingaza Nybegynder
23. januar 2005 - 02:32 Der er 7 kommentarer

Min observer klasse bliver ikke aktiveret! (Observable/Observer)

Når jeg kalder elements metoden skulle den gerne aktivere setChanged og notifyObservers() som dernæst pr. automatik skulle aktivere update metoden i min view class. Men jeg får ikke skrevet noget ud på mit frame selvom det der det som update metoden gerne skulle gøre!

Min model:----------------------------------

import java.util.*;

public class Model extends Observable {
  private int[][] map;
  private int[]list;


 
  public Model () {
    map = new int [4][4];
    list = new int[16];

    map[3][3] = 1001;
    map[0][0] = 1002;


 
 
  }
 

  public void element() {
     
      int l = 0;
      int k = 0;
     
      for(int i = 0; i <= 3; i++)
      {
          for (int j = 0; j<=3; j++)
          {
              l = map[i][j];
              list[k] = l;           
              k++;
             
              setChanged();
              notifyObservers();
             
          }
      }
  }
 
  public int[] listHere() {
      return list;
  }

  }



Min View Class-----------------------


import javax.swing.*;
import java.util.*;
import java.awt.*;


public class View extends JPanel implements Observer {
  private Model model;
  private Graphics p;

 
 
  public View(Model mode ) {

    model = mode;
    JFrame my_frame = new JFrame();
    my_frame.getContentPane().add(this);
    my_frame.setTitle("KillZone");
    my_frame.setSize(410,430);
    my_frame.setVisible(true);
   
   
  }
 
 
  public void paintComponent(Graphics g) {

   
    g.setColor(Color.BLUE);
    g.fillRect(0,0,400,400);
    g.setColor(Color.GREEN);
    g.fillRect(10,10, 380,380);
   
  }

 
 
  public void update(Observable model, Object arg) {
     
     
      String k = model.listHere().toString();
      for (int i = 0; i<k.length(); i++)
      {
          int z = new Integer(k.charAt(i)).intValue();
     
         
     
      switch(z)
      {
      case 1001:
      {
          p.setColor(Color.PINK);
          p.fillRect(50,50,4, 4);
          break;
      }
      case 1002:
      {
          p.setColor(Color.PINK);
          p.fillRect(100,100, 4, 4);
          break;
      }
      }
      }
      this.repaint();
  }
}

Min Controller----------------------

class Controller {
 
  public static void main(String[] args){
    Model model = new Model();
    View l = new Viewe(model);
   
    model.addObserver(l);
    model.element();
   
  }
}
Avatar billede arne_v Ekspert
23. januar 2005 - 09:44 #1
Jeg forstår ikke helt din brug af Swing.

Du har en klasse som extender JPanel og som indeholder en JFrame ??
Avatar billede muingaza Nybegynder
23. januar 2005 - 09:49 #2
Det er en måde som vi har lært det på, man indsætter et JPanel i et frame man opretter. Men er der ellers noget andet i vejen med måde jeg brugere Observers på?
Avatar billede arne_v Ekspert
23. januar 2005 - 10:00 #3
Normalt laver man en klasse som extender JFrame og i dens constructor added en
JPanel.
Avatar billede arne_v Ekspert
23. januar 2005 - 10:02 #4
Med hensyn til dit problem gå rmin mistanke primært på:

      String k = model.listHere().toString();
      for (int i = 0; i<k.length(); i++)
      {
          int z = new Integer(k.charAt(i)).intValue();
     
som jeg tro skal være:

      int[] k = model.listHere();
      for (int i = 0; i<k.length(); i++)
      {
          int z = k[i];
Avatar billede _carsten Nybegynder
23. januar 2005 - 10:29 #5
> muingaza
Jeg tror du har sovet i timen på et afgørende tidspunkt eller misforstået et eller andet, som Arne siger er det ikke lige måden at bruge Swing/java på, er det virkelig tilfældet du har lært at gøre det på den måde, så slå din lærer oven i hovedet, selvfølgelig kan det virke, men det svarer til at man tager sin eventuelle bil/cykel og forsøger at bakke forlæns.
Avatar billede n1ghtmr Nybegynder
23. januar 2005 - 11:35 #6
Nej, han har ikke sovet i timen, vi har bare haft en forfærdelig lærebog. Jeg vil anbefale dig (muingaza) at søge lidt på nettet efter gui og så designe det rigtigt eller evt. låne en bedre java bog end den vi har haft i kurset.

Mvh. Morten
Avatar billede _carsten Nybegynder
23. januar 2005 - 11:54 #7
Okay - jeg var ikke klar over at det var noget man rent faktisk kunne finde i en lærebog, en lærebog var netop det sted hvor jeg ville forvente at man antog en mere logisk indgangsvinkel til tingene, men er i deltagere i et kursus hvor bogen anvendes, er der jo ikke meget andet at gøre end at følge stilen, så vi andre jo se om vi kan vende os til tankegangen.

Det bliver dog nok ikke sidste i hører folk kommentere den fremgangsmåde.  :)
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