2012-02-27 14 views
5

मेरे पास KeyListener के बारे में कोई प्रश्न है। जब मुझे KeyEvent मिलता है और getKeyChar() करता है तो मैं तुलना करने के लिए और * तारांकन की तुलना करने के लिए टाइप कर रहा हूं और मैं KeyEvent.VK_ में से एक का उपयोग करने जा रहा था जो कि कई चाबियों के लिए काम करता है।KeyEvent अक्षर

लेकिन इस विशेष कुंजी और कुछ अन्य के लिए मान मेल नहीं खाते हैं।

* getKeyChar()0x2a और getKeyCode() रिटर्न 0x38 लौटाएगा। 0x38 के लिए परिभाषा VK_8VK_ASTERISK नहीं है जो 0x97 है।

कुछ कीकोड क्यों मेल खाते हैं और दूसरों को नहीं। ज्यादातर आप करते हैं। अगर मैं सिर्फ एक चरित्र की तुलना करता हूं जो (== '*') काम करता है, लेकिन मुझे यकीन नहीं है कि यह सबसे अच्छा समाधान है या नहीं?

सभी मदद के लिए धन्यवाद !!!

उत्तर

5
के लिए नामित किया गया है

ठीक है, आप कुछ गलत समझ रहे हैं।

कुंजी कुंजी हैं, और प्रतीकों प्रतीक हैं। प्रतीक कुंजी प्रेस के परिणाम होते हैं, और उसी कुंजी के परिणामस्वरूप परिस्थितियों के आधार पर विभिन्न प्रतीकों (Alt, नियंत्रण, शिफ्ट आदि) के आधार पर विभिन्न प्रतीकों का परिणाम हो सकता है।

तो, VK_8कुंजी कोड कुंजी कि प्रतीकों 8, * और संभवतः कुंजीपटल स्थानीयकरण के आधार पर अन्य लोगों के उत्पादन कर सकते हैं के लिए खड़ा है।

और * समर्पित कुंजी सांख्यिक कीबोर्ड पर VK_MULTIPLY है - यह सिर्फ एक प्रतीक * (मेरी जानकारी के लिए) का उत्पादन कर सकते हैं।

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

यह जानकारी आप getKeyChar() साथ प्राप्त कर सकते हैं, लेकिन कृपया ध्यान दें कि उपयोगकर्ता शिफ्ट प्रेस यदि संयोजन * यह वास्तव में दो कुंजियों (शिफ्ट और) है और आप दो घटनाओं मिल जाएगा निर्माण करने के लिए, और पहला (शिफ्ट) के लिए एक अपठनीय प्रतीक उत्पन्न करेगा।

+0

कि पिछले सुझाव मेरे लिए काम करने लग रहा था नहीं है। मैं एक 0xFFFF जो बदलाव जो मैं सिर्फ उपेक्षा के लिए एक CHAR_UNDEFIEND है और फिर मैं क्या एक getKeyChar() अगली बार मैं एक getKeyChar() == '*' donig कर रहा हूँ और उस work.Thanks करने लगता है !! – user565660

2

, JComponent

की निर्भर करता है कि आप तो DocumentListener उपयोग करते हैं, अगर आप अन्यथा KeyBindings को देखो तो DocumentFilter

का उपयोग चार अनुक्रम को संशोधित करना चाहते JTextComponent से निर्धारित करने के लिए चाहते हैं, क्योंकि KeyListenerAWT Components

+0

यह सिर्फ एक JTextField है जिसका उपयोग मैं कर रहा हूं। क्या इसे GetKetChar() == '*' के रूप में छोड़ने में कुछ भी गलत है? क्या वह हमेशा काम नहीं करेगा? एक JTextField के लिए – user565660

+1

का उपयोग केवल DocumentListener/DocumentFilter, वहाँ एक और सही तरीका – mKorbel

1
  1. KeyEvent.VK_ASTERISK (वर्चुअल) कुंजीपटल कुंजी के लिए निरंतर आरक्षित है जिस पर * चिह्नित किया गया है। जब कोई कुंजी कुंजी दबाता है तो उसे उत्पन्न होने वाले चरित्र से मेल नहीं करना पड़ेगा।

    यदि आप वीके स्थिरांक का उपयोग करना चाहते हैं तो आपको कुंजी अप और महत्वपूर्ण घटनाओं को सुनना होगा और KeyEvent.getKeyCode() विधि का उपयोग करना होगा। यदि आप वर्णों का उपयोग करना चाहते हैं तो आपने कुंजी टाइप की गई घटनाओं को सुन लिया है और KeyEvent.getKeyChar() विधि का उपयोग करें। सिर्फ इसलिए कि यह आसान है इसे उस तरह से परिभाषित करने के लिए

    कुछ प्रमुख कोड वर्ण से मेल कर सकते हैं; इस तरह से ऐसा करने की कोई वास्तविक आवश्यकता नहीं है।

  2. आप कहते हैं कि आप तारांकन टाइपिंग के लिए getKeyCode से एक VK_8 मिला है। क्या आपने वास्तविक तारांकन कुंजी दबाई है या क्या आपको Shift-8 टाइप करना है?

+0

जब मैं दबाने रहा हूँ '*' सांख्यिक कीबोर्ड पर मैं हो रही है 'VK_MULTIPLY' और नहीं' VK_ASTERISK' –

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