java问题,p1.setFocusable(true);p2.setFocusable(ture),setFocusable,这三行求大神帮助!

为什么多了29行,方向键不能移动圆,少了30或31的任意行,圆也不能动了。packagePractice;importjava.awt.*;importjavax.swi... 为什么多了29行,方向键不能移动圆,少了30或31的任意行,圆也不能动了。
package Practice;
import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
public class Practice16_3 extends JFrame {
private JButton jbtUP;
private JButton jbtDOWN;
private JButton jbtRIGHT;
private JButton jbtLEFT;
Practice16_3(){
MovableCircle p1 = new MovableCircle();
p1.setFocusable(true);
jbtUP = new JButton("UP");
jbtDOWN = new JButton("DOWN");
jbtRIGHT = new JButton("RIGHT");
jbtLEFT = new JButton("LEFT");
jbtUP.addActionListener(p1.new jbtListener());
jbtDOWN.addActionListener(p1.new jbtListener());
jbtLEFT.addActionListener(p1.new jbtListener());
jbtRIGHT.addActionListener(p1.new jbtListener());
Panel p2 = new Panel(new GridLayout(1,4,5,5));
p2.add(jbtUP);
p2.add(jbtDOWN);
p2.add(jbtLEFT);
p2.add(jbtRIGHT);
setLayout(new BorderLayout());
add(p1,BorderLayout.CENTER);
add(p2,BorderLayout.SOUTH);
// setFocusable(true); 有了这行后上下左右方向键不能移动了;
p2.setFocusable(true); // 少了下面任意一行,上下左右方向键不能移动了。
p1.setFocusable(true); //

}
//Panel
public class MovableCircle extends JPanel{
private int x,y;
public MovableCircle(){
addKeyListener(new circleListener());
}
class circleListener extends KeyAdapter{
public void keyPressed (KeyEvent e){
switch(e.getKeyCode()){
case KeyEvent.VK_UP: y-=20; break;
case KeyEvent.VK_DOWN:y+= 20; break;
case KeyEvent.VK_RIGHT:x+= 20;break;
case KeyEvent.VK_LEFT :x-=20;break;

}
repaint();

}
}
class jbtListener implements ActionListener{
public void actionPerformed(ActionEvent e){
if(e.getSource()==jbtUP)
y-=50;
if(e.getSource()==jbtDOWN)
y+=50;
if(e.getSource()==jbtRIGHT)
x+=50;
if(e.getSource()==jbtLEFT)
x-=50;
repaint();
}
}

protected void paintComponent(Graphics g) {
super.paintComponent(g);
g.drawOval(x,y,100,100);
}
}
public static void main (String[]args){
Practice16_3 frame = new Practice16_3();
frame.setTitle("CONtrolCircle");
frame.setLocationRelativeTo(null);
frame.setSize(200,200);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
}
}
展开
 我来答
百度网友48c937c69
2013-11-10 · TA获得超过3126个赞
知道小有建树答主
回答量:1591
采纳率:0%
帮助的人:815万
展开全部
一个组件在获得焦点(focus)的时候, 该组件上的键盘事件监听器才能捕获键盘事件
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式