Archief - Java score teller probleem

Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.

Rubax

Legacy Member
Beste,

Bij mijn BreakOut game zou ik graag een score bijhouden van de blokjes dat verwijderd worden. Hiervoor heb ik volgende klasse aangemaakt:

CODE PANEEL________________

class BrickSpelPaneelOost extends JPanel {

private BrickPeddel brickPeddel;
private BrickBal brickBal;
private BrickScore brickScore;
private ArrayList<BrickBrick> brickLijst;
private JLabel Score;
private JPanel BrickspelPaneelCenter;

public BrickSpelPaneelOost() {
setBackground(Color.yellow);

brickScore = new BrickScore();
BrickspelPaneelCenter = new JPanel();
brickPeddel = new BrickPeddel();
brickLijst = new ArrayList();

Score = new JLabel("score: ");

brickBal = new BrickBal(BrickspelPaneelCenter, this, brickPeddel, brickLijst, brickScore);

add(Score);
}

public void paintComponent(Graphics g) {
super.paintComponent(g);

//System.out.println(brickScore.getScore());

Score.setText("score: " + brickScore.getScore());

repaint();

}
}

CODE CLASS--------------------

class BrickScore {

private int score;

public BrickScore() {
this.score = 1;
}

public int getScore() {
//System.out.println(score);
return this.score;
}

public void telOp() {
System.out.println(score);
this.score += 1;

}
}

Met de verschillende println kan ik waarnemen dat hij bij de class (public void telOp) de score wel aanpast maar bij de class (getscore) en bij het paneel geeft hij telkens terug de 1 door.

Iemand die het probleem ziet?

alvast bedankt
Vriendelijke groeten

Emerxill

Legacy Member
Zit je wel op dezelfde instance van BrickScore te werken?

Btw, waarom een aparte klasse voor 1 variable?

Vin

Legacy Member
Je doet vanalles in je paintComponent methode, maar die wordt nooit bewust opgeroepen.

De paintCompomponent methode wordt automatisch opgeroepen wanneer een deel van het paneel hertekend moet worden. Dit gebeurt bijvoorbeeld wanneer het paneel van grootte verandert, of wanneer je een ander venster over je paneel sleept.

Wil je manueel de paintComponent methode triggeren, dan dien je de repaint methode aan te roepen. Ik zie dat je deze methode al ontdekt hebt, maar je roept ze gewoon op binnen de paintComponent methode zelf, waar deze geen effect zal hebben.
(De repaint methode plaatst een repaint event in de EventQueue van de GUI thread, wanneer meerdere repaints elkaar rap opvolgen zal enkel de laatste zorgen dat paintComponent effectief wordt opgeroepen)

Verder is het ook niet zo proper om de waarden van je labels in je paintComponent te wijzigen. Deze methode dient enkel om dingen op je paneel te tekenen.
Beter is om een andere methode "somethingChanged" (fictieve naam) aan te roepen wanneer je score gewijzigd wordt. In deze methode zet je de juiste tekst op het label en roep je vervolgens repaint op (indien dit nog nodig zou blijken, in dit geval lijkt het erop van niet).
Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.
Terug
Bovenaan