Ich habe hier ein kleines GUI-Programm, bei dem man einen schwarzen Kreis mit den Pfeiltasten auf dem Frame steuern kann. Momentan benutze ich die keyPressed() Methode, welche bewirkt, dass bei einem Druck auf die Pfeiltaste der Ball in Bewegung gesetzt wird.
Mein Ziel ist es aber, dass sich der Ball nur bewegt, soland die jeweilige Pfeiltaste gedrückt bleibt. Wird sie losgelassen, soll der Ball auch stehen bleiben.
Dafür wäre die keyTyped() Methode geeignet. Wenn ich diese aber statt der keyPressed() Methode benutze, dann bewegt sich der Ball nicht...
Hier der Code mit der nicht funktionierenden keyTyped() Methode:
Mein Ziel ist es aber, dass sich der Ball nur bewegt, soland die jeweilige Pfeiltaste gedrückt bleibt. Wird sie losgelassen, soll der Ball auch stehen bleiben.
Dafür wäre die keyTyped() Methode geeignet. Wenn ich diese aber statt der keyPressed() Methode benutze, dann bewegt sich der Ball nicht...
Hier der Code mit der nicht funktionierenden keyTyped() Methode:
Java:
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.awt.geom.Ellipse2D;
import javax.swing.*;
public class second extends JPanel implements ActionListener, KeyListener {
Timer t = new Timer(5, this);
double x = 300, y = 300, velx = 0, vely = 0;
public second() {
t.start();
addKeyListener(this);
setFocusable(true);
setFocusTraversalKeysEnabled(false);
}
public void paintComponent(Graphics g) {
super.paintComponent(g);
Graphics2D g2 = (Graphics2D) g;
g2.fill(new Ellipse2D.Double(x, y, 40, 40));
}
public void actionPerformed(ActionEvent e) {
if(x >= 750 | x <= 10) {
velx = -velx;
}
if(y >= 525 | y <= 10) {
vely = -vely;
}
repaint();
x +=velx;
y +=vely;
}
public void up() {
vely = -1.5;
velx = 0;
}
public void down() {
vely = 1.5;
velx = 0;
}
public void left() {
vely = 0;
velx = -1.5;
}
public void right() {
vely = 0;
velx = 1.5;
}
public void keyPressed(KeyEvent e) {
int code = e.getKeyCode();
if(code == KeyEvent.VK_UP){
up();
}
if(code == KeyEvent.VK_DOWN){
down();
}
if(code == KeyEvent.VK_RIGHT){
right();
}
if(code == KeyEvent.VK_LEFT){
left();
}
}
// public void keyPressed(KeyEvent e) {}
public void keyTyped(KeyEvent e) {}
public void keyReleased(KeyEvent e) {}
}
Java:
import javax.swing.JFrame;
public class Macheads {
public static void main(String[] args) {
JFrame f = new JFrame();
second s = new second();
f.add(s);
f.setVisible(true);
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.setSize(800, 600);
}
}