[Java] waarom werkt add() niet en remove() wel?

Pagina: 1
Acties:

  • bitbasher
  • Registratie: Februari 2002
  • Laatst online: 17-02 12:01
ik heb een probleempje, als ik namelijk op de knop Bnewgame druk dan zal er een ander knopje bij moeten komen
op m'n venster. helaas werkt dit niet. heeft iemand een oplossing voor dit probleem? want eigenlijk moeten er straks
ook nog invoer velden bij geplaatst worden.
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
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
package bke;

import java.awt.*;
import java.awt.event.*;
import java.applet.*;

public class bke extends Applet
{
  private Image afbeelding;
  Status infostatus;
  Button Bnewgame, Bstartgame;
  Speler  nummer1,    
        nummer2;
  int   scherm =0;

  public void init()
  {
    infostatus  = new Status();
    nummer1     = new Speler();   
    nummer2     = new Speler();
    afbeelding  = Toolkit.getDefaultToolkit().getImage("c://bke//plaatje.jpg"); 
    Bnewgame    = new Button("opnieuw spelen");
    Bstartgame  = new Button("Start het spel");

    add(Bstartgame);

    nummer1.setWaardenBegin("nummer1", 0);
    nummer2.setWaardenBegin("nummer2", 0);
    nummer1.setScore(1);
    nummer2.setScore(2);
    infostatus.setWaarden("Welkom");

  }

  public void paint(Graphics g)
  {
    if (scherm != 0)
    {
      infostatus.teken( g );
      Bnewgame.setLocation(240,210);    // reset game
      g.drawImage(afbeelding, 260, 60, 40, 56, this );

      nummer1.tekenNaam( g , 260, 20 );
      nummer2.tekenNaam( g , 260, 40 );
      nummer1.tekenScore( g , 25, 270 ); // score spelers
      nummer2.tekenScore( g , 25, 290 );

      g.drawLine(10,90,250,90);      // raster voor bke
      g.drawLine(10,170,250,170);
      g.drawLine(90,10,90,250);
      g.drawLine(170,10,170,250);
    }
    else
    {
      Bstartgame.setLocation(270,210);

      infostatus.teken( g );    //status weergeven.
    }
  }

  public boolean action( Event e, Object o)
  {
    if (e.target == Bstartgame)
    {
    scherm = scherm + 1;
    //remove(Bstartgame);       //waarom doet deze het dan wel 
    add(Bnewgame);          //waarom doet die het niet
    repaint();
    infostatus.setWaarden("begin");   //status aanpassen
    return true;
    }
    if (e.target == Bnewgame)
    {
    scherm = 0;
    repaint();
    return true;
    }
    return false;
  }
}

class Speler        //class
{
  private String  naam;
  private int     score;
  private int     plaatje;

  void setWaardenBegin( String naam, int plaatje)  // instellen van de variabelen
  {
    this.naam     = naam;
    this.plaatje  = plaatje;
    this.score    = 0;
  }

  void setScore(int score)  // aanpassen van de status regel
  {
    this.score = score;
  }

  void tekenNaam( Graphics g, int x, int y )          //neer zetten van naam + plaatje
  {
    g.drawString(""+this.naam +" --> "+this.plaatje,x,y);
  }

  void tekenScore( Graphics g, int x, int y )        // neer zetten van de score
  {
     g.drawString("Score van "+this.naam +":    "+this.score,x,y);
  }

}

class Status
{
  private String Strstatus;

  void teken( Graphics g )          // het plaatsen van de status
  {
    g.drawString(this.Strstatus,5,345);
    g.drawLine(0,329,450,329);
  }

  void setWaarden( String StrStatus)  // aanpassen van de status regel
  {
    this.Strstatus = StrStatus;
  }
}

.


  • ACM
  • Registratie: Januari 2000
  • Niet online

ACM

Software Architect

Werkt hier

W&G -> P&W

Hoe kom je er in godsnaam bij dat dat javascript is :?

  • D2k
  • Registratie: Januari 2001
  • Laatst online: 31-08 10:19

D2k

ik sluit me bij ACM aan? dat javascript met java wordt verward gebeurd normaal alleen de andere kant op?

Doet iets met Cloud (MS/IBM)


  • bitbasher
  • Registratie: Februari 2002
  • Laatst online: 17-02 12:01
sowwy :o krijg je ervan als je vrienden probeert te helpen

* bitbasher is clueless als het om JS of java gaat

.


Verwijderd

jah sorry,
Altijd goed dat ze proberen te helpen, maar heb zelf maar een accountje gebakken

kan iemmand mij toevallig met dat probleem helpen? kben nog al een aardig newbie,

cheerss

  • Alarmnummer
  • Registratie: Juli 2001
  • Laatst online: 09-07-2024

Alarmnummer

-= Tja =-

tips:
1) class namen beginnen altijd met een hoofdletter. (Achterlijk dat sun het heeft toegelaten). dus Bke ipv bke. En probeer ook een wat duidelijkere naam eraan te geven. GameApplet ofzoiets.

2)1 variable declaratie per regel.. dus
code:
1
2
int a;
int b;

ipv
code:
1
int a,b;

of
code:
1
2
int  a,
        b;

3) access modifiers gebruiken voor je variable declaratie.
dus
code:
1
private int a;

ipv
code:
1
int a;

Als je geen access modifier gebruikt, dan heb je dus een 'friendly' access. Dit houd in dit iedere class in dezelfde package bij de variablen kan komen, en dat is iets wat je ECHT niet wilt.

4)je hebt geen action listener aan de buttons toegevoegd, dus
die action listener die jij hebt gemaakt heeft geen effect.

je zult dus zoiets moeten doen:
code:
1
startButton.addActionListener(this);

5)geen algemene actionListener implementeren op een frame. Naarmate er meer componenten op je scherm gaan komen, zal je actionListener alleen maar gecompliceerder worden. En je weet niet of een onderliggende frame ook een actionListener heeft die jij dus nu hebt overriden en waardoor het component niet meer naar behoren werkt. Je kan beter zoiets doen:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
public class BlaatFrame{

    private Button startButton = null;
    
    public void init(){
        startButton = new Button("blaat");
        startButton.addActionListener(new StartActionImpl());
    }

    private class StartActionImpl implements ActionListener{

        public void actionPerformed(ActionEvent ae){
            System.out.println("startButton is ingedrukt.");
        }
    }
}

6) gebruik voor member variablen een prefix bv '_'

vb:
code:
1
2
3
4
5
6
7
8
9
10
public class Persoon{
    private int _leeftijd;
    
    public void setLeeftijd(int leeftijd){
        if(leeftijd<0){
            throw new IllegalArgumentException("leeftijd can`t be smaller then 0, leeftijd ="+leeftijd);
        }
        _leeftijd = leeftijd;
    }
}

8) variable namen beginnen ALTIJD met een kleine letter, dus:
code:
1
 Button bNewGame; (alleen constanten die schrijf je volledig in hoofdletters)

ipv
code:
1
Button BNewGame;

En je kan ook beter de volgende naamsopbouw hanteren:
code:
1
Button newGameButton;

Nu zie je meteen wat voor object je te pakken hebt. Laatste stuk van de variable naam is bij mij meestal de class van de variable,

9)last but not least: je hebt buttons gemaakt, maar de 1e voeg je alleen toe en de 2e niet. Je voegt de 1e ook op een hele vreemde manier toe. Ik ben niet bekend met applets, maar ik neem aan dat je standaard een borderLayout hebt en dan moet je als volgt toevoegen:
code:
1
2
applet.add(newGameButton,BorderLayout.NORTH);
applet.add(stopGameButton,BorderLayout.SOUTH);

  • NDF82
  • Registratie: Januari 2002
  • Laatst online: 07-09 15:50

NDF82

Doomed Space Marine

volgens mij heeft een applet standaard een FlowLayout dus klopt wel
code:
1
add(button);

Pentium 233MHz MMX + Diamond Monster 3D 3DFX Voodoo II


Verwijderd

jah oke dit snap ik maar als ik het gaat runne kan ik nergens dan behalfe de "public void init()" de add(button) functie gebruiken, en niet ergens anders en dat snap ikke niet want de remove(button) kan ik wel overal gebruiken.
Pagina: 1