2011-09-16 32 views
9

JTextPane'i olan bir java uygulaması yapıyorum. anahtarına basıldığında (veya kullanıcı sonraki satıra gittiğinde) bazı kodları yürütmek istiyorum. İnternete baktım ve bir çözüm bulamadım. C# ile başa çıkmak daha iyi olur mu? Değilse, JTextPane'in keyTyped() olayında Enter tuşunu nasıl kaydedebilirim? C# iyi bir seçenekse, bunu C# 'da nasıl yaparım? İşte Java: Kayıt <ENTER> tuşa basın JTextPane

ben çalışmak düşündüm bir çözümdür ... ama

//Event triggered when a key is typed 
private void keyTyped(java.awt.event.KeyEvent evt) { 
    int key = evt.getKeyCode(); 
    if (key == KeyEvent.VK_ENTER) { 
     Toolkit.getDefaultToolkit().beep(); 
     System.out.println("ENTER pressed"); 
    } 
} 

vermedi Neden çalışmıyor Yukarıdaki örnek hangi tuşun olursa olsun i basma i 0 bir keyCode olsun, çünkü isterim olduğu Java'da bu soruna bir çözüm tercih eder ama C#, belki de daha iyi çalışır. Ayrıca, lütfen soruyu sorulara cevap vermeye çalışın ve bağlantı kurmayın (gerçekten ihtiyacınız olmadıkça). Teşekkürler!

+0

keyListeners'ı kullanmayın, @Hovercraft tarafından önerilen keyBindings'i kullanın – kleopatra

+0

getKeyCode için JavaDocs'dan(): 'KEY_TYPED olayları için keyCode, VK_UNDEFINED'dir. Bu, en az 1.3'ten beri belgelenmiştir. [Insert bindings] için –

cevap

13

Metin çözümüne bir çözüm eklemek bir çözümdür. vaka kimse Bay Mohammad Adib aynı şeyler var Konuyu manzarası içinde örneğin

JTextPane textPane = new JTextPane(); 

    int condition = JComponent.WHEN_FOCUSED; 
    InputMap iMap = textPane.getInputMap(condition); 
    ActionMap aMap = textPane.getActionMap(); 

    String enter = "enter"; 
    iMap.put(KeyStroke.getKeyStroke(KeyEvent.VK_ENTER, 0), enter); 
    aMap.put(enter, new AbstractAction() { 

    @Override 
    public void actionPerformed(ActionEvent arg0) { 
     System.out.println("enter pressed"); 
    } 
    }); 
+3

+1 (http://download.oracle.com/javase/tutorial/uiswing/misc/keybinding.html), ancak varsayılan insert-break eylemi kaybolacaktır. – trashgod

+2

@trashgod true, ancak gereksinim tam olarak anlaşılamıyor, a) varsayılan davranışı değiştirebilir veya b) varsayılan davranışı ekleyebilir b) Yalnızca varsayılan tutarı ve tetikleyiciyi – kleopatra

1

Bu cevaptır. Bunun yerine (evt.getKeyCode() == evt.VK_ENTER) kullanmanın ben (evt.getKeyChar() == '\ n')

and the solution worked. 
+0

yorumuna hala beklemedeki soruna sar: keyListeners kullanmayın ... hiç. Daha yüksek bir soyutlama seviyesinde çözümler var, bkz. @ Trashgod'un cevabı – kleopatra

+0

getKeyCode için JavaDocs'dan(): 'KEY_TYPED olayları için, keyCode VK_UNDEFINED'dir. 'En azından 1.3'ten beri belgelenmiştir. OP'nin asla belgeleri okumadığını farz ediyorum. –

0

ben şifre ENTER tuşuna arıyorum kullanmak metin alanına, ENTER tuşuna basıldığında oturum açma yöntemini başlatmak için. Aşağıdaki kod, konsolda tuş kodunu basacaktır. kutusuna birkaç tihngs programı çalıştırıp yazdıktan sonra ben tek bir tuşa basarak arıyorsanız o, hala biraz tembellik ve yeni öğrenme önleyebilirsiniz kodu 13.

txtPass = new Text(shlLogin, SWT.BORDER | SWT.PASSWORD); 
    txtPass.addKeyListener(new KeyAdapter() { 
     @Override 
     public void keyPressed(KeyEvent e) { 
      System.out.println(e.keyCode); 
      if (e.keyCode == 13) { /* ... Do your stuff ... */ } 
     } 
    }); 

olduğunu anahtar ENTER için keşfedilen Bu yöntemi kullanarak, anahtar bağları hakkında şeyler. Eğlence CTRL + [Harf] kısayollarını eklerken başlar - ancak bu başka bir tartışma içindir.