java中keyevent_JAVA中的键盘事件KeyEvent

我用java编写一个小程序(俄罗斯方块),程序要求界面响应键盘上下左右键,freme.addKeyListener后,如果只添加gamePanel程序就能正确响应键盘上下左右键,但是如果添加了信息面板MessagePa...

我用java编写一个小程序(俄罗斯方块),程序要求界面响应键盘上下左右键,freme.addKeyListener后, 如果只添加gamePanel 程序就能正确响应键盘上下左右键,但是如果添加了信息面板MessagePanel后就不能响应了.

求解决办法.

为了减少代码量,写了个测试代码. 要求修改下面代码,使frame添加了MessagePanel后仍然能响应上下键.

import java.awt.event.*;

import java.awt.*;

import javax.swing.*;

import java.util.*;

import javax.swing.Timer;

public class KeyListener

{

public static void main(String[] agrs)

{

EventQueue.invokeLater(new Runnable()

{

public void run()

{

TetrisFrame frame = new TetrisFrame();

frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

frame.setVisible(true);

}

});

}

}

class TetrisFrame extends JFrame

{

public TetrisFrame()

{

setSize(450, 540);

addKeyListener(new MyKeyListener());

add(gameComponent, BorderLayout.CENTER);

/*问题就出在这里,如果添加了MessgePanel程序就无法响应键盘事件(上下键)了,如果不添加它,就能响应*/

add(new MessagePanel(), BorderLayout.EAST);

}

private GameComponent gameComponent = new GameComponent();

private class MyKeyListener extends KeyAdapter

{

public void keyPressed(KeyEvent e)

{

int keyCode = e.getKeyCode();

if(keyCode == KeyEvent.VK_UP || keyCode == KeyEvent.VK_KP_UP)

{

gameComponent.setColor(Color.BLACK);

gameComponent.repaint();

}

else if(keyCode == KeyEvent.VK_DOWN || keyCode == KeyEvent.VK_KP_DOWN)

{

gameComponent.setColor(Color.RED);

gameComponent.repaint();

}

}

}

}

class GameComponent extends JPanel

{

public GameComponent()

{

color = Color.RED;

}

public void setColor(Color c)

{

color = c;

}

public void paintComponent(Graphics g)

{

super.paintComponent(g);

Graphics2D g2 = (Graphics2D) g;

int size = 25;

g2.setPaint(color);

g2.fill(new Rectangle.Double(0, 0, size * 10 , size * 20));

}

private Color color;

}

class MessagePanel extends JPanel

{

public MessagePanel()

{

setLayout(new GridLayout(8, 1));

for(int i = 0; i < 8; i++)

add(new JButton("没用的按钮"));

}

}

展开

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值