2016-07-01 1 views
1

Нет ошибок или sth, просто прозрачный экран (он скопирует фон) и нарисованный овал, но всякий раз, когда я пытаюсь ввести клавишу со стрелкой в клавиатура не будет работать. Я добавил KeyListener и расширил класс до JFrame, но он все равно ничего не делает. Я знаю, что это всего лишь новичок, но я сам начинаю, и это меня раздражало: /. Кроме того, я также использовал repaint(); , но все же он повторно отображает фон? Спасибо за помощь в продвижении!Невозможно получить JFrame простую краскоподобную программу для работы с привязками клавиш

package JavaMain; 

import java.awt.Graphics; 
import java.awt.event.KeyAdapter; 
import java.awt.event.KeyEvent; 

import javax.swing.JFrame; 

public class javamain extends JFrame { 
int x, y; 
private static final long serialVersionUID = 1L; 
public class AL extends KeyAdapter { 

    private int keycode; 
    @SuppressWarnings("static-access") 
    public void keypress(KeyEvent event) { 
     keycode = event.getKeyCode(); 
     if (keycode == event.VK_LEFT) { 
      x -= 10; 
     } 
     if (keycode == event.VK_RIGHT) { 
      x += 10; 
     } 
     if (keycode == event.VK_UP) { 
      y -= 10; 
     } 
     if (keycode == event.VK_DOWN) { 
      y += 10; 
     } 
    } 

    public void keyrelease(KeyEvent e) { 
    } 
} 

public javamain() { 
    addKeyListener(new AL()); 
    setTitle("Statistic"); 
    setSize(600, 800); 
    setResizable(false); 
    setVisible(true); 
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 

    x = 200; 
    y = 200; 
} 

public void paint(Graphics g) { 
    g.fillOval(x, y, 20, 20); 
    repaint(); 
} 

public static void main(String[] args) { 
    new javamain(); 
} 
} 
+0

Возможно, вы захотите перейти к форматированию этого вопроса. Название немного для того, что вы просите, и ваш вопрос - один длинный фрагмент текста. Вы используете IDE? Они очень помогают в отладке и в формате кода. –

ответ

0

Ошибка с вашим KeyListener.

Класс AL не использует правильные имена методов.

Должен быть keyPressed и keyReleased насколько я знаю.

private class AL extends KeyAdapter { 

    public void keyPressed(KeyEvent event) { 

     int keycode = event.getKeyCode(); 

     if (keycode == KeyEvent.VK_LEFT) { 
      x -= 10; 
     } 
     if (keycode == KeyEvent.VK_RIGHT) { 
      x += 10; 
     } 
     if (keycode == KeyEvent.VK_UP) { 
      y -= 10; 
     } 
     if (keycode == KeyEvent.VK_DOWN) { 
      y += 10; 
     } 
    } 

    public void keyReleased(KeyEvent e) { 

    } 
} 

Без изменения какого-либо другого кода это, похоже, сработает.

+0

спасибо, это исправлено. также, как насчет экрана повторной рендеринга? У меня есть repaint(); , он по-прежнему делает фон? –

Смежные вопросы