PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : KeyListener



roontafloor
03-10-2006, 08:41
Hallo erstmal
Ich habe ein Problem mit dem KeyListener, der nicht richtig funktionieren will. Habe auch schon ausgiebig mit setFocusable rum gespielt aber kriege es nicht hin. Das ganze sollte ein kleines Mariokart darstellen wo die Fahrer wenn man die Taste "n" drückt eine bestimmte Anzahl auf der x-achse nach rechts gehen/fahren sollen, das ganze Gui habe ich auch hinbekommen doch als ich zum Testen vorerst nur ein Spieler programmiert habe , bekam ich Probleme mit dem KeyListener und mit mario.setLocation(mario.getLoc........);
und weiss nicht woran es liegt, bin auch ein rechter Anfänger wäre um jede Hilfe froh.
Hier noch der Code



import java.awt.BorderLayout;

import java.awt.Container;
import java.awt.FlowLayout;

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


import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;


public class MarioKart extends JFrame implements KeyListener, ActionListener {

int a = 32;




JPanel buttonPanel = new JPanel();
JPanel racePanel = new JPanel();

//private JButton reset = new JButton("Restart Race");
private JButton quit = new JButton("Exit Game");

//ImageIcon mario = new ImageIcon(getIconImage(), "Mario.gif");
JLabel mario = new JLabel(new ImageIcon("Mario.gif"));
JLabel luigi = new JLabel(new ImageIcon("Luigi.gif"));
JLabel peach = new JLabel(new ImageIcon("Peach.gif"));
JLabel yoshi = new JLabel(new ImageIcon("Yoshi.gif"));
JLabel dk = new JLabel(new ImageIcon("DK.gif"));
JLabel bowser = new JLabel(new ImageIcon("Bowser.gif"));
JLabel koppa = new JLabel(new ImageIcon("Koppa.gif"));
JLabel toad = new JLabel(new ImageIcon("Toad.gif"));

private Container contentPane = new Container();



public MarioKart() {

setSize(600, 400);
setTitle("Mario Grand-Prix");
setDefaultCloseOperation(EXIT_ON_CLOSE);



// dem Container wird das Layout und die Panels übergeben
contentPane = this.getContentPane();
contentPane.setLayout(new BorderLayout());
contentPane.add(BorderLayout.NORTH, buttonPanel);
contentPane.add(BorderLayout.CENTER, racePanel);

// dem buttonPanel wird ein Layout übergeben und der Knopf "reset"
buttonPanel.setLayout(new FlowLayout());

//buttonPanel.add(reset);
buttonPanel.add(quit);
setFocusable(false);
quit.addActionListener(this);


// dem racePanel wird Layout(null) übergeben und alle JLabels mit den Bildern der Fahrer
racePanel.setLayout(null);

//racePanel.setBorder(BorderFactory.createEmptyBorde r(5,5,5,5));
racePanel.add(mario);
racePanel.add(luigi);
racePanel.add(peach);
racePanel.add(yoshi);
racePanel.add(dk);
racePanel.add(bowser);
racePanel.add(koppa);
racePanel.add(toad);


// den JLables(Bilder) muss jetzt Standort (x-achse und y-achse) und die effektive Grösse des JLabels (Hier habe ich die genau
// die Grösse der Bilder genommen (32px, 32px)) übergeben werden
mario.setBounds(10,50,a,a);
luigi.setBounds(10,82, a, a);
peach.setBounds(10,114, a, a);
yoshi.setBounds(10,146, a, a);
dk.setBounds(10,178, 32, a);
bowser.setBounds(10,210, a, a);
koppa.setBounds(10,242, a, a);
toad.setBounds(10,274, a, a);

setVisible(true);
addKeyListener(this);
setFocusable(true);


}


/*public void movemario(int b1){

if (b1 == 1){

//mario.getLocation().getX();
mario.setBounds(mx+100,50,a,a);
//mx = mx+100;

}
}*/

public void keyPressed(KeyEvent e) {

if (e.getKeyCode() == KeyEvent.VK_N) {


System.out.println("hallo");
mario.setLocation(mario.getLocation().getX()+10, mario.getLocation().getY());


}

}

public void keyReleased(KeyEvent e) {}


public void keyTyped(KeyEvent e) {}



public void actionPerformed(ActionEvent arg0) {

if (arg0.getSource() == quit) {
System.exit(0);
}

}
public static void main(String args[]) {

MarioKart mk = new MarioKart();
}
}

falke2203
03-10-2006, 14:28
Änder mal


mario.setLocation(mario.getLocation().getX()+10, mario.getLocation().getY());

nach


mario.setLocation((int)(mario.getLocation().getX() +10), (int)(mario.getLocation().getY()));

roontafloor
06-10-2006, 07:47
hei danke viel mal, hat gleich auf anhieb an geklappt