2013-10-25 3 views
1

Я хотел сделать java-программу для получения нажатий клавиш без фокусировки и без объекта класса keyevent для моего проекта .. есть ли способ сделать это .. ??получить нажатия клавиш в java без фокусировки?

Я попробовал это, но это не соответствует моим требованиям!

import java.awt.Container; 
import java.awt.event.ActionEvent; 
import java.awt.event.ActionListener; 
import java.awt.event.KeyEvent; 
import javax.swing.JButton; 
import javax.swing.JFrame; 
import javax.swing.JPanel; 
import javax.swing.JTextField; 
import javax.swing.KeyStroke; 
import javax.swing.text.Keymap; 

public class key1 { 

    private static void showUI() { 
     JFrame jFrame = new JFrame(""); 
     jFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     Container container = jFrame.getContentPane(); 
     JTextField txt = new JTextField(); 
     container.add(txt, BorderLayout.NORTH); 
     ActionListener actListener = new ActionListener() { 
      @Override 
      public void actionPerformed(ActionEvent event) { 
       System.out.println(event.getActionCommand() + " selected"); 
      } 
     }; 
     JPanel jPane = new JPanel(); 
     JButton defaultButton = new JButton("Hit Enter"); 
     defaultButton.addActionListener(actListener); 
     jPane.add(defaultButton); 
     JButton otherButton = new JButton("Onother Button"); 
     otherButton.addActionListener(actListener); 
     jPane.add(otherButton); 
     container.add(jPane, BorderLayout.SOUTH); 
     Keymap map = txt.getKeymap(); 
     KeyStroke stroke = KeyStroke.getKeyStroke(KeyEvent.VK_ENTER, 0, false); 
     map.removeKeyStrokeBinding(stroke); 
     jFrame.getRootPane().setDefaultButton(defaultButton); 
     jFrame.setSize(350, 250); 
     jFrame.setVisible(true); 
    } 

    public static void main(String args[]) { 
     javax.swing.SwingUtilities.invokeLater(new Runnable() { 
      @Override 
      public void run() { 
       showUI(); 
      } 
     }); 
    } 
} 
+0

почему причина вы удалили ENTER, как built_in KeyBinding из JTextField, это комбинация клавиш не работает без добавления ActionListener к JTextField, пропустить какие-либо причине без объяснений – mKorbel

ответ

1

Я не считаю, что это возможно в свинг level..the весь KeyEvent API вращается вокруг некоторого Component, имеющего фокус :(

На самом деле, я уверен, что виртуальная машина только генерирует события основанный на том, что операционная система дает it..and вы можете получить только те события, если что-то находится в фокусе.

Однако, я нашел библиотеку, которая может делать то, что вы хотите. Я никогда не использовал хотя ... просто посмотрел из любопытства:

http://code.google.com/p/jnativehook/

+0

точно .. Thnx за ссылку ... – anookha

Смежные вопросы