Java,

2011-01-26 11 views
10

numaralı tuşa bastığınızda odağı ayarlar. JTextField'a girdiğimde, belirli bir JButton'u etkinleştirmesi için bunu nasıl yapabilirim? Demek istediğim, formdaki düğmeyi etkinleştirmek için enter tuşuna basabildiğiniz bir web sayfası formundaki çizgilerdir. Teşekkürler.Java,

cevap

13

Sen JButton için Action kullanmalıdır:

textField.addActionListener(new ActionListener() 
{ 
    @Override 
    public void actionPerformed(ActionEvent e) 
    { 
     button.requestFocusInWindow(); 
    } 
}); 
+5

+1, cool, setAction() yöntemini bile bilmiyordum. Her zaman addActionListener kullandım. Her iki durumda da bu daha iyi bir çözüm. – camickr

7

Böyle bir şey çalışması gerekir: Sonra

Action sendAction = new AbstractAction("Send") { 
    public void actionPerformed(ActionEvent e) { 
     // do something 
    } 
}; 

JButton button = new JButton(sendAction); 

:

textField.addKeyListener(
    new KeyAdapter() { 
    public void keyPressed(KeyEvent e) { 
     if (e.getKeyCode() == KeyEvent.VK_ENTER) { 
      button.doClick(); 
     } 
    } 
    }); 
} 
+0

gibi düğmeye default davranışı ekleyerek bunu başarabilirsiniz ve onu koyar Düğmeye odaklanın, ancak etkinleştirmez. – LOD121

+0

Bu, requestFocusInWindow() yöntemi, teneke üzerinde yazdığı şeyi yapmaz. Bir tıklamayı simClick yapmak için doClick() yöntemi şudur. – berry120

+2

button.doClick(); iyi çalışıyor. Teşekkürler. – LOD121

3

aşağıdaki gibi bir şey yaparım Aynı işlemi JTextField için veya hatta bir MenuItem aynı eylem Menüsü kullanılabilir olmasını istiyorsanız:

JTextField textField = new JTextField(); 
textField.setAction(sendAction); 
+1

Teşekkürler. Bu iyi çalışıyor. – LOD121

+1

@ LOD121, Evet işe yarıyor, ancak bu, metin alanının kullanılacak şekilde tasarlanma şekli değil. – camickr

+0

Kabul etmem ve kabul etmem de setAction() yönteminden habersizdim! Her gün bir şeyler öğreniriz. KeyListener için – berry120

4

Sen sadece o çalıştı bu

cmdLogin.setDefaultCapable(true); // by default, this is true 
this.getRootPane().setDefaultButton(cmdLogin); // here `this` is your parent container 
+1

+1, ancak dikkat edin: bu yalnızca textField _not_ işleminin eklenmiş olduğu sürece çalışır. – kleopatra

+0

yup. bu doğru. ama bu durumda, bu çalışmalı ve umarım post yazarın amacı “varsayılan” davranışı elde etmekti. – sunil