2013-08-03 8 views
16

जावा में मेरे पास एक ऐसा प्रोग्राम है जिसे उपयोगकर्ता लगातार कुंजी दबाए रखने की आवश्यकता है। तो psuedocode में, इस तरह somthingमैं कैसे जांचूं कि उपयोगकर्ता कुंजी दबा रहा है या नहीं?

if (isPressing("w")) 
{ 
//do somthing 
} 

अग्रिम धन्यवाद! इसके बजाय आप http://docs.oracle.com/javase/tutorial/uiswing/events/keylistener.html

+0

संभावित डुप्लिकेट http://stackoverflow.com/questions/616924/how-to-check-if-the-key-pressed-was-an-arrow- कुंजी-इन-जावा-कीलिस्टर – woofmeow

+0

जावा में, लेकिन एक विशेष जीयूआई ढांचे का उपयोग (स्विंग?)? – mael

उत्तर

32

जावा में आप की जांच नहीं करते हैं कि कोई कुंजी दबाने,: यह कैसे उपयोग करने पर http://docs.oracle.com/javase/7/docs/api/java/awt/event/KeyListener.html

अधिक विवरण:

+0

धन्यवाद यह सही है! – Saucymeatman

+0

यह संकलित नहीं होगा, यह कहता है "स्थिर संदर्भ में IKeyPressed.this का उपयोग करें" – Saucymeatman

+1

क्षमा करें, मैंने इसे जांचने के बिना अपना कोड अपडेट किया। मेरा अद्यतन उत्तर देखें - यह उदाहरण के बजाए क्लास ऑब्जेक्ट का उपयोग करता है। इसे फिर से प्रयास करें (केवल 'IsKeyPressed.this' दोनों को' IsKeyPressed.class' 'के साथ बदलें)। वैसे, 'सिंक्रनाइज़' ब्लॉक, उस मामले में वास्तव में आवश्यक नहीं है। – Elist

1

आप KeyListener लागू करने के लिए, एक नज़र यहाँ ले से KeyEvent एस सुनो।

import java.awt.KeyEventDispatcher; 
import java.awt.KeyboardFocusManager; 
import java.awt.event.KeyEvent; 

public class IsKeyPressed { 
    private static volatile boolean wPressed = false; 
    public static boolean isWPressed() { 
     synchronized (IsKeyPressed.class) { 
      return wPressed; 
     } 
    } 

    public static void main(String[] args) { 
     KeyboardFocusManager.getCurrentKeyboardFocusManager().addKeyEventDispatcher(new KeyEventDispatcher() { 

      @Override 
      public boolean dispatchKeyEvent(KeyEvent ke) { 
       synchronized (IsKeyPressed.class) { 
        switch (ke.getID()) { 
        case KeyEvent.KEY_PRESSED: 
         if (ke.getKeyCode() == KeyEvent.VK_W) { 
          wPressed = true; 
         } 
         break; 

        case KeyEvent.KEY_RELEASED: 
         if (ke.getKeyCode() == KeyEvent.VK_W) { 
          wPressed = false; 
         } 
         break; 
        } 
        return false; 
       } 
      } 
     }); 
    } 
} 

तो फिर तुम हमेशा उपयोग कर सकते हैं:

if (IsKeyPressed.isWPressed()) { 
    // do your thing. 
} 

आप कर सकते हैं, के सही तरीके से अपने लक्ष्य को प्राप्त करने के लिए एक KeyEventDispatcher रजिस्टर, और इसे लागू इच्छित कुंजी की स्थिति बनाए रखने के लिए करने के लिए है पाठ्यक्रम, isPressing("<some key>") को कुंजियों के मानचित्र और उनके राज्य को IsKeyPressed के अंदर लपेटने के लिए लागू करने के लिए एक ही विधि का उपयोग करें।

1

आशा है कि यह काम करेगा: की

import java.awt.event.KeyAdapter; 
    import java.awt.event.KeyEvent; 
    import javax.swing.JFrame; 
    import javax.swing.JTextField; 

    public class Main { 

     public static void main(String[] argv) throws Exception { 

     JTextField textField = new JTextField(); 

     textField.addKeyListener(new Keychecker()); 

     JFrame jframe = new JFrame(); 

     jframe.add(textField); 

     jframe.setSize(400, 350); 

     jframe.setVisible(true); 

     } 
    } 

    class Keychecker extends KeyAdapter { 

     @Override 
     public void keyPressed(KeyEvent event) { 

     char ch = event.getKeyChar(); 

     System.out.println(event.getKeyChar()); 




     } 
     } 
    } 
संबंधित मुद्दे

 संबंधित मुद्दे