Moin, ich mal wieder.
Heute habe ich folgendes Problem: Wir sollen ein Pong programmieren und ich habe keine Lust, wie andere ausm Studiengang, einfach nen Code irgendwoher zu kopieren und dann einfach einzufügen. Also wollte ich es selbst machen. Nur funktioniert der KeyListener bei mir nicht. Ich wollte die Balken über Tastaturkommandos steuern. Aber die keyPressed Methode wird einfach nicht angesprochen (habe ich durch die System.out.print in der Methode getestet). Hier mein Code:
Ich hab jetzt den ganzen Sonntag damit verbracht, aber ich finde den Fehler einfach nicht. Ich arbeite das erste mal mit dem KeyListener, also habt erbarmen mit mir
Heute habe ich folgendes Problem: Wir sollen ein Pong programmieren und ich habe keine Lust, wie andere ausm Studiengang, einfach nen Code irgendwoher zu kopieren und dann einfach einzufügen. Also wollte ich es selbst machen. Nur funktioniert der KeyListener bei mir nicht. Ich wollte die Balken über Tastaturkommandos steuern. Aber die keyPressed Methode wird einfach nicht angesprochen (habe ich durch die System.out.print in der Methode getestet). Hier mein Code:
Java:
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.util.*;
public class VeryCoolPong extends JFrame implements KeyListener, ActionListener{
/**
*
*/
private static final long serialVersionUID = 1L;
JButton newGame;
JSlider dif;
JLabel size;
JLabel px;
JTextField pixel;
JPanel buttons;
JPanel field;
JPanel points;
JLabel player1;
JLabel player2;
JLabel easy = new JLabel("Easy");
JLabel medium = new JLabel("Medium");
JLabel hard = new JLabel("Hard");
Hashtable <Integer, JLabel> speed;
int pad1y = 150;
int pad2y = 150;
Graphics g;
public VeryCoolPong (){
super ("Very Cool Pong");
setSize(800, 600);
setResizable(false);
// Buttons
buttons = new JPanel();
buttons.setBorder(BorderFactory.createEtchedBorder());
newGame = new JButton ("Neues Spiel");
newGame.addActionListener(this);
buttons.add(newGame);
speed = new Hashtable<Integer, JLabel>();
speed.put(1, easy);
speed.put(2, medium);
speed.put(3, hard);
dif = new JSlider(SwingConstants.HORIZONTAL, 1, 3, 1);
dif.setLabelTable(speed);
dif.setSnapToTicks(true);
dif.setPaintLabels(true);
buttons.add(dif);
size = new JLabel("Größe");
buttons.add(size);
pixel = new JTextField(3);
pixel.setToolTipText("Geben Sie hier die Größe der Schläger ein");
buttons.add(pixel);
px = new JLabel("Pixel");
buttons.add(px);
getContentPane().add(buttons, BorderLayout.NORTH);
//
// The court
field = new JPanel();
field.setFocusable(true);
field.setBackground(Color.BLACK);
getContentPane().add(field, BorderLayout.CENTER);
//
// Points
points = new JPanel(new GridLayout(1,2));
points.setBorder(BorderFactory.createEtchedBorder());
player1 = new JLabel("Player1");
points.add(player1);
player2 = new JLabel("Player2");
points.add(player2);
getContentPane().add(points, BorderLayout.SOUTH);
//
addWindowListener(
new WindowAdapter() {
public void windowClosing(WindowEvent e) {
System.exit(0);
}
}
);
setVisible(true);
field.addKeyListener(this);
g = field.getGraphics();
}
public void paintElements(Graphics g){
g.setColor(Color.WHITE);
g.fillRect(50, pad1y, 20, 80); //Paddel Player1
g.fillRect(750, pad2y, 20, 80); //Paddel Player2
g.fillOval(350, 250, 15, 15); //Ball
}
public void keyPressed(KeyEvent e) {
System.out.println(pad2y);
if(e.getKeyCode() == KeyEvent.VK_Q){
pad1y -= 5;
}
if(e.getKeyCode() == KeyEvent.VK_A){
pad1y += 5;
}
if(e.getKeyCode() == KeyEvent.VK_UP){
pad2y -= 5;
}
if(e.getKeyCode() == KeyEvent.VK_DOWN){
pad2y += 5;
}
this.repaint();
this.paintElements(g);
}
public void keyReleased(KeyEvent e) {
}
public void keyTyped(KeyEvent e) {
}
public void actionPerformed(ActionEvent e) {
if ("Neues Spiel".equals(e.getActionCommand())){
this.paintElements(g);
}
}
public static void main (String... args){
new VeryCoolPong();
}
}