hallo,
ich habe versucht an hand eines beispiels von ariol einen keylistener in mein programm einzubauen, allerdigns funktioniert er nicht.
hier ist der code:
in einer anderen klasse hab ich meine main-methode, da wird lediglich eine neue Instanz von View() erstellt und das programm dann in einer endlosschleife festgehalten.
die system.out.println meldung, dass ein key gedrückt wurde, erscheint nicht, er startet ihn also irgendwie erst gar nicht?
ich habe versucht an hand eines beispiels von ariol einen keylistener in mein programm einzubauen, allerdigns funktioniert er nicht.
hier ist der code:
Code:
import javax.swing.JComponent;
import java.awt.Graphics;
import java.awt.Dimension;
import javax.swing.JFrame;
import javax.swing.JPanel;
import java.awt.Label;
import java.awt.FlowLayout;
import java.awt.Toolkit;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
public class View extends JFrame{
private GraphicsPanel panel;
private Label label;
public void sleep(long millis) {
try {Thread.sleep(millis);} catch (Exception e){}
}
public View(Worm w){
super();
setLayout(new FlowLayout());
setDefaultCloseOperation(EXIT_ON_CLOSE);
panel = new GraphicsPanel(this, w);
panel.setPreferredSize(new Dimension(Data.HOR_RES, Data.VER_RES));
add(panel);
label = new Label();
add(label);
setFocusable(true);
pack();
setVisible(true);
}
}
class GraphicsPanel extends JPanel implements KeyListener{
private Worm w;
private View v;
/**
* @Override
*/
protected void paintComponent(Graphics g){
super.paintComponent(g);
w.draw(g);
}
public void keyPressed(KeyEvent e)
{
System.out.println("taste gedrückt."); // <--------------------- erscheint nicht.
int key = e.getKeyCode();
if (key == KeyEvent.VK_UP){
w.move(Data.UP);
v.repaint();}
else if (key == KeyEvent.VK_RIGHT){
w.move(Data.RIGHT);
v.repaint();}
else if (key == KeyEvent.VK_DOWN){
w.move(Data.DOWN);
v.repaint();}
else if (key == KeyEvent.VK_LEFT){
w.move(Data.LEFT);
v.repaint();}
}
public void keyReleased(KeyEvent e)
{
}
public void keyTyped(KeyEvent e)
{
}
/**
* CONSTRUCTOR
*/
GraphicsPanel(View v,Worm w){
this.v = v;
this.w = w;
addKeyListener(this);
}
}
in einer anderen klasse hab ich meine main-methode, da wird lediglich eine neue Instanz von View() erstellt und das programm dann in einer endlosschleife festgehalten.
die system.out.println meldung, dass ein key gedrückt wurde, erscheint nicht, er startet ihn also irgendwie erst gar nicht?