Пожалуйста, помогите мне, ребята. Я просто не могу запустить KeyListener. Но я добавил все, что вам нужно (я думаю). Я действительно не знаю, что не так с этим кодом. Я добавил Key Listener, реализовал прослушиватель клавиш и включил все классы, чтобы что я забыл? :/My KeyListener не работает
import java.awt.Button;
import java.awt.CardLayout;
import java.awt.Color;
import java.awt.FlowLayout;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.GridLayout;
import java.awt.Rectangle;
/******Key classes are included*********/
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.io.IOException;
import javax.swing.JButton;
import javax.swing.JPanel;
import javax.swing.Timer;
/********Key listener is Implemented********/
public class Game extends JPanel implements KeyListener,Runnable
{
JPanel m_mainPanel;
Thread moveBall = new Thread();
Timer t = new Timer(5, this);
int radius = 50;
int posx = 400;
int posy = 400;
int RectPosX = 10;
int RectPosY = 400;
int velocityX = 0;
int velocityY = 0;
//Konstruktor
public Game(JPanel mainPanel) {
m_mainPanel = mainPanel;
setLayout(new GridLayout(3, 1));
JPanel north_panel = new JPanel();
north_panel.setLayout(new FlowLayout(FlowLayout.LEFT));
/**********I didn't forget this********/
this.addKeyListener(this);
/*******Focus is set**********/
setFocusable(true);
setFocusTraversalKeysEnabled(false);
add(north_panel);
}
//Painting rectangle
public void paintComponent(Graphics g)
{
super.paintComponent(g);
g.setColor(Color.BLACK);
g.fillRect(RectPosX, RectPosY, radius, radius);
}
//the key event wich isn't called
@Override
public void keyPressed(KeyEvent e)
{
System.out.println("Key pressed");
if(e.getKeyCode() == KeyEvent.VK_UP)
{
velocityY = 10;
}
if(e.getKeyCode() == KeyEvent.VK_DOWN)
{
velocityY = -10;
}
}
@Override
public void keyTyped(KeyEvent e) {
}
@Override
public void keyReleased(KeyEvent e) {
}
@Override
public void run()
{
while(true)
{
repaint();
}
}
}
В чем фокус? Готов поспорить, 5 долларов это JFrame вместо JPanel. Либо добавьте KeyListener в JFrame, либо сосредоточьтесь на JPanel. –
Как изменить фокус? edit: В JFrame не установлен KeyListener –
Google - ваш друг, но requestFocusInWindow() - хорошее место для начала. –