2017-09-10 96 views
0

我的程序有问题,我无法解决。我试了几个小时,试图谷歌,等等...我见过很多程序,这是工作,但我不知道为什么我的解决方案没有。我的目标(现在)很简单,我想在鼠标点击或按键时写入cmd行。第一个是有效的,但第二个不行。谁能告诉我为什么?java eclipse windowbuilder keyPressed事件不会触发

import java.awt.EventQueue; 

import javax.swing.JFrame; 
import java.awt.event.KeyAdapter; 
import java.awt.event.KeyEvent; 
import java.awt.event.MouseAdapter; 
import java.awt.event.MouseEvent; 

public class test { 

    private JFrame frame; 

    public static void main(String[] args) { 
     EventQueue.invokeLater(new Runnable() { 
      public void run() { 
       try { 
        test window = new test(); 
        window.frame.setVisible(true); 
       } catch (Exception e) { 
        e.printStackTrace(); 
       } 
      } 
     }); 
    } 

    public test() { 
     initialize(); 
    } 

    private void initialize() { 
     frame = new JFrame(); 
     frame.getContentPane().addMouseListener(new MouseAdapter() { 
      @Override 
      public void mouseClicked(MouseEvent arg0) { 
       System.out.println("Mouse has clicked!"); 
      } 
     }); 
     frame.getContentPane().addKeyListener(new KeyAdapter() { 
      @Override 
      public void keyPressed(KeyEvent arg0) { 
       System.out.println("A key has pressed."); 
      } 
     }); 
     frame.setBounds(100, 100, 450, 300); 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    } 

} 
+3

1)对于Swing,我们通常使用[key bindings](https://docs.oracle.com)。 com/javase/tutorial/uiswing/misc/keybinding.html)而不是较低级别的'KeyListener'。 2)*“我尝试了几个小时并尝试了谷歌等等......我看过很多程序,这些程序正在运行,但我不知道为什么我的解决方案没有。”*我无法理解为什么在你尝试过的'很多程序'中,你没有看到有问题的组件需要同时关注焦点和输入焦点才能让关键听众工作。 (或者这是关键绑定帮助我们解决的问题之一!) –

+0

您是否尝试过'frame.add ... Listener(...)'而不是'frame.getContentPane()。add ... Listener (...)'? – howlger

回答

-1

那么,最后我有足够的时间来寻找解决方案,现在我发现了它。我不知道为什么,但是无法将一个keyListener添加到JFrame中。我只能添加一个JButton或一个JTextField等等......这对我来说有点奇怪:c

+0

*“我不知道为什么,但不能添加keyListener到JFrame,我只能添加一个JButton或一个JTextField等......这对我来说很奇怪,有点”*它应该不是,如果你从2天前阅读并理解我的评论。 –