Archief - JTextField wilt niet repainten (java)

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:
class BrickScore {

private int score;

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

public int getScore() {
return this.score;

}

public void setScore(int score) {
this.score = score;
}

public void verhoogScore() {

System.out.println(score);
this.score += 1;

}
}

Met de lijn "System.out.println(score);'" heb ik kunnen waarnemen dat de score effectief wordt opgenomen

De code van mijn tekstvak:

class BrickSpelPaneelOost extends JPanel {

private BrickPeddel brickPeddel;
private BrickBal brickBal;
private BrickScore brickScore;
private ArrayList<BrickBrick> brickLijst;
private JTextField Score;

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

brickScore = new BrickScore();
Score = new JTextField("score: " + brickScore.getScore());

add(Score);
}

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

//System.out.println("test dit");
Score.setText("score: " + brickScore.getScore());
repaint();
}
}


Met de code: //System.out.println("test dit");
controleer ik of hij hier meer dan 1x in komt en dat doet hij?

Het probleem is dus dat hij de score maar 1x opneemt dus deze blijft op 1 staan.

Ziet iemand het probleem?

Vriendelijke groeten
Ruud

Prodigy

Legacy Member
Aangezien je uw score laat updaten via paintComponent zou ik daar de methode validate() in toevoegen, (voor of na repaint()). Denk ik.

The validate method is used to cause a container to lay out its subcomponents again. It should be invoked when this container's subcomponents are modified (added to or removed from the container, or layout-related information changed) after the container has been displayed.

Maser00

Legacy Member
System.out.println(score);

Zie je dat?

Vreemde code maar hoor...

Rubax

Legacy Member
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;
}
}

In mijn class verandert de score bij public void telOp (kon in waarnemen via de println) maar in mijn paneel en in mijn class bij getScore zegt hij altijd de waarde 1.

duidelijker?

alvast bedankt voor de tijd

NeverwinterX

Legacy Member
Je moet dat paneel hertekenen nadat de score wijzigt (tenzij dat achterliggend al regelmatig wordt gedaan).

Repaint binnen een paint methode houdt geen steek, dat is 2x hetzelfde doen.

Past eerder binnen: https://www.beyondgaming.be/forums

Rubax

Legacy Member
//System.out.println(brickScore.getScore());
deze regel staat in het paneel en hij blijft 1 herhalen wilt toch zeggen dat hij terug in die regelt komt ?

ik zal het daar posten, mijn excuses

NeverwinterX

Legacy Member
Rubax zei:
//System.out.println(brickScore.getScore());
deze regel staat in het paneel en hij blijft 1 herhalen wilt toch zeggen dat hij terug in die regelt komt ?

ik zal het daar posten, mijn excuses

Ja, dat zegt dat dat paneel een aantal keer getekend wordt op het scherm wanneer de score op 1 staat. Dat zegt niet of het paneel wel opnieuw getekend wordt nadat de score verandert. Het hele painting mechanisme wordt achterliggend door de java gui library afgehandeld en kan meerdere keren opgeroepen worden als het paneel zichtbaar wordt op het scherm. Je kan zelf de opdracht geven om het paneel te hertekenen met repaint (eigenlijk best niet rechtstreeks, maar via het observer patroon, maar daar ben je nog niet, negeer wat ik hier tussen haakjes zeg maar voorlopig).

Rubax

Legacy Member
Oke, bedankt voor de informatie.

Ik zal zoeken hoe en waar ik dit paneel kan hertekenen

groeten
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