[Java] Model View probleempje

Pagina: 1
Acties:

  • Scare360
  • Registratie: Juli 2001
  • Laatst online: 21:54
Listing Applet
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
/*
A basic extension of the com.sun.java.swing.JApplet class
*/

import com.sun.java.swing.*;
import java.awt.*;

public class JApplet1 extends JApplet
{
    private ObservableDobbelsteen dobbelsteen = new ObservableDobbelsteen();
    
    public void init()
    {
        // Take out this line if you don't use symantec.itools.net.RelativeURL or symantec.itools.awt.util.StatusScroller
        symantec.itools.lang.Context.setApplet(this);
        
        // This line prevents the "Swing: checked access to system event queue" message seen in some browsers.
        getRootPane().putClientProperty("defeatSystemEventQueueCheck", Boolean.TRUE);
        
        // This code is automatically generated by Visual Cafe when you add
        // components to the visual environment. It instantiates and initializes
        // the components. To modify the code, only use code syntax that matches
        // what Visual Cafe can generate, or Visual Cafe may be unable to back
        // parse your Java file into its visual environment.
        //{{INIT_CONTROLS
        getContentPane().setLayout(null);
        setSize(426,266);
        buttonDobbel.setLabel("Dobbel");
        getContentPane().add(buttonDobbel);
        buttonDobbel.setBackground(java.awt.Color.lightGray);
        buttonDobbel.setBounds(288,36,80,38);
        getContentPane().add(obsLabelOgen);
        obsLabelOgen.setBounds(60,156,174,39);
        getContentPane().add(obsTextFieldOgen);
        obsTextFieldOgen.setBounds(36,36,163,44);
        //}}
    
        //{{REGISTER_LISTENERS
        SymAction lSymAction = new SymAction();
        buttonDobbel.addActionListener(lSymAction);
        //}}
    }

    //{{DECLARE_CONTROLS
    java.awt.Button buttonDobbel = new java.awt.Button();
    java.awt.Label obsLabelOgen = new obsLabel();   //java.awt.Label();
    java.awt.TextField obsTextFieldOgen = new obsTextField(); //java.awt.TextField();
    //}}

    class SymAction implements java.awt.event.ActionListener
    {
        public void actionPerformed(java.awt.event.ActionEvent event)
        {
            Object object = event.getSource();
            if (object == buttonDobbel)
                buttonDobbel_ActionPerformed(event);
        }
    }

    void buttonDobbel_ActionPerformed(java.awt.event.ActionEvent event)
    {
        dobbelsteen.gooi();          
    }
}

Listing ObservableDobbelsteen
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
import java.util.*;

public class ObservableDobbelsteen extends Observable
{
    private int ogen;
    
    public int getOgen()
    {
      return ogen;
    }
    
    public void gooi()
    {
      ogen = (int) (6 * Math.random() + 1);
      setChanged();
      notifyObservers();
    }     
}

Listing obsTexfield
code:
1
2
3
4
5
6
7
8
9
10
11
12
import java.util.*;
import java.awt.*;

public class obsTextField extends TextField
    implements Observer
{
    public void update(Observable obs, Object arg)
    {
      ObservableDobbelsteen dobbelsteen = (ObservableDobbelsteen) obs;
      setText(" " + dobbelsteen.getOgen());
    }
}

Listing obsLabel
code:
1
2
3
4
5
6
7
8
9
10
11
12
import java.util.*;
import java.awt.*;

public class obsLabel extends Label
    implements Observer
{
    public void update(Observable obs, Object arg)
    {
      ObservableDobbelsteen dobbelsteen = (ObservableDobbelsteen) obs;
      setText(" " + dobbelsteen.getOgen());
    }
}

What it does
Zodra ik op de knop Dobbel druk vangt de Event Handler dat voor me af en roept uiteindelijk dobblsteen.gooi() aan. De gaat een random getal genereren en vult vult het attribuut ogen met de gevonden waarde... het dobbelsteen object heeft een contract met de class Observable die op zijn beurt weer communiceert met Observers. Zodra ik setChanged() aanroep wil dat zeggen dat de views op mijn model een update moeten krijgen, maar hij doet niks... rara wie kan mij vertellen waarom dit stukje niet werkt.

  • marcusk
  • Registratie: Februari 2001
  • Laatst online: 26-09-2023
ik zie nergens dobbelsteen.addObserver :?

  • Scare360
  • Registratie: Juli 2001
  • Laatst online: 21:54
hehe dobbelsteen.addObserver( (Observer) objLabelOgen); wil wel eens helpen ;)

thnx