在一个JPanel 上注册键盘监听器,可用。但如果在这个JPanel 上放一个 JButton 之类的就没用了,为什么?

解决方案 »

  1.   

    此回复为自动发出,仅用于显示而已,并无任何其他特殊作用
    楼主【tristan0429】截止到2008-07-13 09:33:10的历史汇总数据(不包括此帖):
    发帖的总数量:10                       发帖的总分数:150                      每贴平均分数:15                       
    回帖的总数量:9                        得分贴总数量:0                        回帖的得分率:0%                       
    结贴的总数量:9                        结贴的总分数:130                      
    无满意结贴数:1                        无满意结贴分:10                       
    未结的帖子数:1                        未结的总分数:20                       
    结贴的百分比:90.00 %               结分的百分比:86.67 %                  
    无满意结贴率:11.11 %               无满意结分率:7.69  %                  
    值得尊敬
      

  2.   

    示范代码如下,把注册里的按钮加上就不能触发监听事件,为什么?谢谢。另,这事件是注册给panel、还是frame ,我下面是两个都注册了,但不知道其中的区别。import java.awt.event.KeyAdapter;
    import java.awt.event.KeyEvent;import javax.swing.JButton;
    import javax.swing.JFrame;
    import javax.swing.JPanel;public class Test
    { public static void main(String[] args)
    {
    TestFrame frame = new TestFrame();
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

    TestPanel panel = new TestPanel();

    Controller ctr = new Controller();

    frame.add(panel);
    panel.addKeyListener(ctr);
    frame.addKeyListener(ctr);

    frame.setVisible(true);
    }}class TestFrame extends JFrame
    {
    public TestFrame()
    {
    setTitle("test");
    setBounds(100, 100, 250, 250);

    }
    }class TestPanel extends JPanel
    {
    public TestPanel()
    {
    setSize(200, 200);

    // JButton btn = new JButton("btn");
    //
    // this.add(btn);
    }
    }class Controller extends KeyAdapter
    { @Override
    public void keyPressed(KeyEvent e)
    {
    switch(e.getKeyCode())
    {
    case KeyEvent.VK_UP:
    System.out.println("up");
    break;

    case KeyEvent.VK_DOWN:
    System.out.println("Down");
    break;
    }
    }

    }