java - Adding a keylistener to main() not working -


i'm making game in java ball moves forward no user control, user can control vertical movement of ball, using , down arrow keys, i'm stuck on adding keylistener class/whatever jframe, through main method. basically, add(keylistener_class/method), , java (quite rightly), complains class or method not component. question, then, how supposed add keylistener jframe?

cheers, matt

code:

     package org.ultraluminous.vertiball;

import java.awt.color; import java.awt.graphics; import java.awt.graphics2d; import java.awt.renderinghints; import java.awt.event.keyevent; import java.awt.event.keylistener; import javax.swing.jframe; import javax.swing.jpanel; public class game extends jpanel{ static int x = 0; static int y = 0; static int ys = 0; private static void shift(){ x+=1; y+=ys; } public static void event(keyevent e){ if(e.getkeycode() == keyevent.vk_up){ ys = 1; } if (e.getkeycode() == keyevent.vk_down){ ys = -1; } } public class key{ public void listen() { keylistener listener = new keylistener() { @override public void keytyped(keyevent e) { } @override public void keypressed(keyevent e) { } @override public void keyreleased(keyevent e) { } }; addkeylistener(listener); setfocusable(true); } } @override public void paint(graphics g){ super.paint(g); graphics2d graph = (graphics2d) g; graph.setrenderinghint(renderinghints.key_antialiasing, renderinghints.value_antialias_on); graph.setcolor(color.blue); graph.drawoval(x, y, 50, 50); graph.filloval(x, y, 50, 50); } public static void main (string[] args){ jframe win = new jframe("pong"); game game = new game(); win.add(new game()); //win.add... add what? need add key listener here //but seem unable to. win.setresizable(false); win.setsize(900, 600); win.setdefaultcloseoperation(jframe.exit_on_close); win.setvisible(true); while (true) { shift(); win.repaint(); try { thread.sleep(10); } catch (interruptedexception e){ e.printstacktrace(); } } }

i got work adding keylistener jframe. alternatively create separate class keylistener , add way (instead of using anonymous inner class). here added:

public static void main (string[] args){         jframe win = new jframe("pong");             game game = new game();             win.add(new game());             win.addkeylistener(new keylistener() {                  @override                 public void keytyped(keyevent e) {                 }                  @override                 public void keypressed(keyevent e) {                     if(e.getkeycode() == keyevent.vk_up){                         ys = -1;                     }                     if (e.getkeycode() == keyevent.vk_down){                         ys = 1;                     }                 }                  @override                 public void keyreleased(keyevent e) {                 }              });             win.setresizable(false);             win.setsize(900, 600);             win.setdefaultcloseoperation(jframe.exit_on_close);             win.setvisible(true);             while (true) {                 shift();                 win.repaint();                 try {                     thread.sleep(10);                 } catch (interruptedexception e){                     e.printstacktrace();                 }             }          } } 

Comments