2013-12-25 2 views
1

Я пытаюсь сделать рекордер для игры, которую я сделал, и я хочу использовать keylistener, но ничего не происходит.Java Как сделать Keylistener?

вот часть моего кода, которая нуждается в исправлении.

import java.awt.*; 
import javax.swing.*; 
import java.awt.event.*; 
import java.awt.event.KeyEvent; 
import java.awt.event.KeyListener; 
import java.util.*; 
import java.io.*; 

public class score extends JPanel { 
    public static char highchar[] = new char[10]; 
    public static int i = 0; 
    public static boolean flag = true; 

    public static void scr() { 
     JFrame f = new JFrame("HighScores"); 
     score c = new score(); 
     f.setContentPane(c); 
     f.setLocation((int) (Toolkit.getDefaultToolkit().getScreenSize() 
      .getWidth() - 13)/2 - 200, (int) (Toolkit.getDefaultToolkit() 
      .getScreenSize().getHeight() - 63)/2 - 100); 
     c.setPreferredSize(new Dimension(400, 200)); 
     f.pack(); 
     f.setResizable(true); 
     f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     f.getContentPane(); 
     f.setVisible(true); 
     while (flag) { 
     c.repaint(); 
     } 
    } 

    public score() { 
     addKeyListener(new KeyAdapter() { 

     public void keyPressed(KeyEvent e) { 
      System.out.println("hello"); 
      if (flag) { 
       if (e.getKeyCode() == KeyEvent.VK_A) { 
        highchar[i] = 'A'; 
       } 
       if (e.getKeyCode() == KeyEvent.VK_B) { 
        highchar[i] = 'B'; 
       } 
       if (e.getKeyCode() == KeyEvent.VK_C) { 
        highchar[i] = 'C'; 
       } 
       if (e.getKeyCode() == KeyEvent.VK_D) { 
        highchar[i] = 'D'; 
       } 
       if (e.getKeyCode() == KeyEvent.VK_E) { 
        highchar[i] = 'E'; 
       } 
       if (e.getKeyCode() == KeyEvent.VK_F) { 
        highchar[i] = 'F'; 
       } 
       if (e.getKeyCode() == KeyEvent.VK_G) { 
        highchar[i] = 'G'; 
       } 
       if (e.getKeyCode() == KeyEvent.VK_H) { 
        highchar[i] = 'H'; 
       } 
       if (e.getKeyCode() == KeyEvent.VK_I) { 
        highchar[i] = 'I'; 
       } 
       if (e.getKeyCode() == KeyEvent.VK_J) { 
        highchar[i] = 'J'; 
       } 
       if (e.getKeyCode() == KeyEvent.VK_K) { 
        highchar[i] = 'K'; 
       } 
       if (e.getKeyCode() == KeyEvent.VK_L) { 
        highchar[i] = 'L'; 
       } 
       if (e.getKeyCode() == KeyEvent.VK_M) { 
        highchar[i] = 'M'; 
       } 
       if (e.getKeyCode() == KeyEvent.VK_N) { 
        highchar[i] = 'N'; 
       } 
       if (e.getKeyCode() == KeyEvent.VK_O) { 
        highchar[i] = 'O'; 
       } 
       if (e.getKeyCode() == KeyEvent.VK_P) { 
        highchar[i] = 'P'; 
       } 
       if (e.getKeyCode() == KeyEvent.VK_Q) { 
        highchar[i] = 'Q'; 
       } 
       if (e.getKeyCode() == KeyEvent.VK_R) { 
        highchar[i] = 'R'; 
       } 
       if (e.getKeyCode() == KeyEvent.VK_S) { 
        highchar[i] = 'S'; 
       } 
       if (e.getKeyCode() == KeyEvent.VK_T) { 
        highchar[i] = 'T'; 
       } 
       if (e.getKeyCode() == KeyEvent.VK_U) { 
        highchar[i] = 'U'; 
       } 
       if (e.getKeyCode() == KeyEvent.VK_V) { 
        highchar[i] = 'V'; 
       } 
       if (e.getKeyCode() == KeyEvent.VK_W) { 
        highchar[i] = 'W'; 
       } 
       if (e.getKeyCode() == KeyEvent.VK_X) { 
        highchar[i] = 'X'; 
       } 
       if (e.getKeyCode() == KeyEvent.VK_Y) { 
        highchar[i] = 'Y'; 
       } 
       if (e.getKeyCode() == KeyEvent.VK_Z) { 
        highchar[i] = 'Z'; 
       } 
       if (e.getKeyCode() == KeyEvent.VK_SPACE) { 
        highchar[i] = ' '; 
       } 
       if (e.getKeyCode() == KeyEvent.VK_0) { 
        highchar[i] = '0'; 
       } 
       if (e.getKeyCode() == KeyEvent.VK_1) { 
        highchar[i] = '1'; 
       } 
       if (e.getKeyCode() == KeyEvent.VK_2) { 
        highchar[i] = '2'; 
       } 
       if (e.getKeyCode() == KeyEvent.VK_3) { 
        highchar[i] = '3'; 
       } 
       if (e.getKeyCode() == KeyEvent.VK_4) { 
        highchar[i] = '4'; 
       } 
       if (e.getKeyCode() == KeyEvent.VK_5) { 
        highchar[i] = '5'; 
       } 
       if (e.getKeyCode() == KeyEvent.VK_6) { 
        highchar[i] = '6'; 
       } 
       if (e.getKeyCode() == KeyEvent.VK_7) { 
        highchar[i] = '7'; 
       } 
       if (e.getKeyCode() == KeyEvent.VK_8) { 
        highchar[i] = '8'; 
       } 
       if (e.getKeyCode() == KeyEvent.VK_9) { 
        highchar[i] = '9'; 
       } 
       if (e.getKeyCode() == KeyEvent.VK_BACK_SPACE) { 
        i--; 
        highchar[i] = ' '; 
        i--; 
       } 
       if (e.getKeyCode() == KeyEvent.VK_ENTER) { 
        flag = false; 
       } 
       i++; 
       System.out.println(highchar[i]); 
      } 
     } 
     }); 
    } 
} 

Можете ли вы исправить keylistener без изменения метода scr?

+5

Возможный дубликат [Java - программа с KeyListener не работает] (http://stackoverflow.com/questions/14298745/java-program-with-keylistener-isnt-working) и * много * похожих вопросов. Подумайте о том, чтобы немного поработать над вашими навыками Google. –

+0

_i хотите использовать keylistener_ no, вы не :-) Независимо от проблемы, keyListener не является решением, и ваш контекст не является одним из редких исключений – kleopatra

ответ

4

Если вы сделали какой-либо поиск вообще, вы бы обнаружили, что KeyListeners работают только с компонентом, если он имеет фокус, что для JPanel означает сделать его фокусируемым, someJPanel.setFocusable(true), а затем назначить фокус на него someJPanel.requestFocusInWindow().

Вы также увидите, что KeyListeners в целом следует избегать, если возможно, в пользу Key Bindings.

Как примечание стороны, это меня беспокоит:

while(flag){ 
    c.repaint(); 
} 

А в то время как истинная петля опасная вещь, чтобы сделать в GUI свинг, как вы будете связать нить событий. Просто не делайте этого - нет причин для этого.

Я вижу, что она является частью вашего метода Scr, и что вы заявили,

Можете ли вы исправить KeyListener без изменения метода Scr?

Был ли метод scr, предоставленный вам вашим инструктором? Если это так, я бы не слишком доверял этому инструктору.