Variablen Int Variabel in JTextField ändern

.basti

Aktives Mitglied
Ich hab hier ein kleines Spiel geschrieben. Es gibt einen Spieler(Pinkes Rechteck) und ein Hindernis das sich zufällig positioniert(Grünes Rechteck). Außerdem hab ich ein JTextField erzeugt namens "Zähler". Ich möchte, dass jedes mal wenn ich das Hindernis berühre der Zähler um eins hochgeht. Ich hab dafür die Variable p angelegt. Mein erster Versuch war, p=p+1; in den ActionListener zu schreiben, weil ich da auch schon den code für die Kollision zwischen Spieler und Hindernis geschrieben habe und das dann ja die selben Koordinaten sind die abgeprüft werden müssen wenn p um eins größer werden soll. Allerdings hat das alles nicht funktioniert und jetzt würde ich gerne wissen wie man das löst und ob das überhaupt funktionieren kann.
Hier noch der code von der Klasse Spieler:

import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;

@SuppressWarnings("serial")
public class Spiel extends JLabel implements KeyListener, ActionListener{



JTextField zähler = new JTextField();
Timer timer = new Timer(5,this);

int x = 0, velX = 0, velY = 0, y = 0, p=0;

int RandomYMin;
int RandomYMax;

int RandomXMin;
int RandomXMax;

int RandomBreiteMin;
int RandomBreiteMax;

int RandomHoeheMin;
int RandomHoeheMax;

int random_intY;
int random_intX;

public Spiel() {


zähler.setBounds(300,0,100,50);
zähler.setText("Punkte:"+p); //p ändert nicht
zähler.setEnabled(true);
zähler.setVisible(true);
zähler.setEditable(false);


timer.start();
addKeyListener(this);
setFocusable(true);
setRequestFocusEnabled(false);


int RandomYMin=1;
int RandomYMax=341;

int RandomXMin=1;
int RandomXMax=370;

random_intY = (int)Math.floor(Math.random()*(RandomYMin+RandomYMax+1)+RandomYMin);
random_intX = (int)Math.floor(Math.random()*(RandomXMin+RandomXMax+1)+RandomXMin);

if(random_intY<=0+30) {
random_intY=0+60;
}
if(random_intY>=341-60) {
random_intY=341-60;
}
if(random_intX+50>=370-30) {
random_intX=370-60;
}
if(random_intX<=0+60) {
random_intX=0+60;
}
}
public void paintComponent(Graphics g) {
super.paintComponent(g);
g.drawRect(x,y,30,30);
g.setColor(Color.PINK);
g.fillRect(x,y,30,30);

g.drawRect(random_intX,random_intY,50,50);
g.setColor(Color.GREEN);
g.fillRect(random_intX,random_intY,50,50);
}
@Override
public void actionPerformed(ActionEvent e) {

if(x < 0) {
velX = 0;
x = 0;
}

if(x > 370) {
velX = 0;
x = 370;
}

if(y < 0) {
velY = 0;
y = 0;
}

if(y > 341) {
velY = 0;
y = 341;
}

if(y+30==random_intY&&x+30>=random_intX&&x<=random_intX+50) {
y=y-1;


}
if(y==random_intY+50&&x+30>=random_intX&&x<=random_intX+50) {
y=y+1;

}
if(x+30==random_intX&&y+30>=random_intY&&y<=random_intY+50) {
x=x-1;

}
if(x==random_intX+50&&y+30>=random_intY&&y<=random_intY+50) {
x=x+1;
}


x = x + velX;
y = y + velY;
repaint();

}

@Override
public void keyTyped(KeyEvent e) {
// TODO Auto-generated method stub

}

@Override
public void keyPressed(KeyEvent e) {
if(e.getKeyCode() == KeyEvent.VK_W) {
velX = 0;
velY = -1;

}
if(e.getKeyCode() == KeyEvent.VK_S) {
velX = 0;
velY = 1;
}

if(e.getKeyCode() == KeyEvent.VK_A) {
velX = -1;
velY = 0;
}
if(e.getKeyCode() == KeyEvent.VK_D) {
velX = 1;
velY = 0;
}
}

@Override
public void keyReleased(KeyEvent e) {
velX = 0;
velY = 0;

}
}
 
1. Code immer in CodeTags posten

2. Ein JTextfield beinhaltet Text und kann auch nur Text darstellen. Wenn du dessen "int"-Wert um 1 erhöhen willst, dann lies erst mal dessen Text aus, parse ihn nach int, erhöhe den Wert, dann setze den Text neu.
Benötigte Funktionen:
JTextfield.getText() und Integer.parseInt zum Auslesen //eventuell auch nicht, du hast ja p als Int-Variable.
JTextfield.setText() zum setzen des neuen Texts.

Besser wäre, ein JFormattedTextfield mit Numberformatter zu verwenden, dann können auch nur Zahlen eingegeben werden. Da kannst du die Int-Variable auch direkt mit setValue zuweisen.
 

Zurück
Oben