2010-06-28 8 views
6

में प्रमुख घटनाओं का जवाब देना मैं स्कैला गुई प्रोग्रामिंग (स्केल में मेरी पहली परियोजना के साथ प्रयोग कर रहा हूं, इसलिए मैंने सोचा कि मैं कुछ सरल से शुरू करूंगा)। लेकिन ऐसा लगता है कि ऐसा कुछ ऐसा लगता है जो अपेक्षाकृत मामूली होना चाहिए। मेरे पास एक वर्ग है जो scala.swing.MainFrame को बढ़ाता है, और जब मैं उस विंडो पर ध्यान केंद्रित करता हूं तो कोई उपयोगकर्ता कुंजी दबाता है। मजेदार बात यह है कि मुझे लगता है कि उस घटना को आग लगने के लिए कोई रास्ता नहीं मिल रहा है।स्कैला

मुझे एक उदाहरण मिला कि किसी और को यहां समस्या के आसपास कैसे मिला: http://houseofmirrors.googlecode.com/svn/trunk/src/src/main/scala/HouseGui.scala लेकिन ऐसा लगता है कि वे जावा स्विंग एपीआई का उपयोग करने के लिए वापस आ गए हैं, जो थोड़ा निराशाजनक है। क्या किसी को पता है कि घटनाओं को रोकने का एक और बेवकूफ तरीका है?

उत्तर

0

इस के लिए मेरे समाधान मेरा पीछा करने के लिए आवश्यक।

1

मुझे उम्मीद है कि आपको this.keys (जहां this कुंजीपटल ईवेंट प्राप्त करने वाले जीयूआई का तत्व) सुनने की आवश्यकता है। mouse event के समकक्ष प्रश्न देखें।

class MyFrame extends MainFrame { 

this.peer.addKeyListener(new KeyListener() { 
    def keyPressed(e:KeyEvent) { 
     println("key pressed") 
    } 

    def keyReleased(e:KeyEvent) { 
     println("key released") 
    } 

def keyTyped(e:KeyEvent) { 
     println("key typed") 
    } 
}) 

} 

यह केवल हालांकि काम करने के लिए लग रहा था अगर कोई बटन वस्तुओं इस घटक के साथ संलग्न थे, या इसके किसी भी बच्चों को बताया गया है:

+0

Thx डैनियल के साथ काम करने लगता है, मैं यह भी जरूरत है। स्कैला स्विंग दस्तावेज वास्तव में खराब है। – Aymen

+0

'this.keys'' scala.swing.MainFrame' की वैध विशेषता प्रतीत नहीं होता है। न ही यह 'है।', 'यह। केबोर्ड' या 'this.keyboard' है। क्या इस पर कहीं भी कोई दस्तावेज है? – Ceilingfish

+0

@ छतफिश 'मुख्य फ्रेम' नहीं, बल्कि एक 'घटक': लेबल, पैनल, टेक्स्ट क्षेत्र इत्यादि। और, ज़ाहिर है, 'यह' घटक को संदर्भित करता है। –

3

this.keys को सुनने के अलावा आपको घटक पर अनुरोध फोकस भी कॉल करना चाहिए या फोकस करने योग्य = सत्य सेट करना चाहिए, यदि यह पैनल या व्युत्पन्न कक्षा है।

0

जावा घटनाओं पर वापस आने की बजाय सभी घटकों में keys है जो इन घटनाओं को प्रकाशित करता है (इसलिए MainFrame नहीं करता है)। सुनिश्चित नहीं है कि सबसे अच्छा समाधान क्या है, लेकिन Component के अंदर फ्रेम में सब कुछ लपेटना हमेशा संभव है और इसके keys को सुनें।

6

यह स्काला 2,9

package fi.harjum.swing 

import scala.swing._ 
import scala.swing.event._ 
import java.awt.event._ 

object KeyEventTest extends SimpleSwingApplication { 
    def top = new MainFrame { 
     val label = new Label { 
      text = "No click yet" 
     } 
     contents = new BoxPanel(Orientation.Vertical) { 
      contents += label 
      border = Swing.EmptyBorder(30,30,10,10) 
      listenTo(keys) 
      reactions += { 
       case KeyPressed(_, Key.Space, _, _) => 
        label.text = "Space is down" 
       case KeyReleased(_, Key.Space, _, _) => 
        label.text = "Space is up" 
      } 
      focusable = true 
      requestFocus 
     } 
    } 
}