2011-01-16 48 views
11

Benim salıncak programımda bir JTextField ve bir JButton var. Kullanıcı "enter" tuşuna bastığında, JButton'un actionListener'ı çalıştırdığında, bunu yapmak isterim. Bunu nasıl yapardım? Şimdiden teşekkürler.Tıklama tuşu ile "enter" tuşuna nasıl basılır?

+0

getRootPane() setDefaultButton (JButton defaultButton); – ashubuntu

cevap

10

JRootPane, istediğiniz şeyi yapacak bir yöntem setDefaultButton (JButton düğmesi) içerir. Uygulamanız bir JFrame ise, RootPaneContainer arabirimini uygular ve JFrame'de getRootPane() öğesini çağırarak kök bölmeyi alabilir ve ardından döndürülen kök bölmesinde setDefaultButton öğesini çağırabilirsiniz. Aynı teknik JApplet, JDialog veya RootPaneContainer'ı uygulayan başka bir sınıf için de çalışır. Burada

http://www.java2s.com/Code/Java/Swing-JFC/SwingDefaultButton.htm

bu bir örnek vardır

+0

Bu yalnızca .getRootPane() öğesini planladığınız bileşeni başlattıktan sonra çalışır mı? Eğer öyleyse, bu onu doğrudan bu bileşenin yapıcısına yapamam, yani? –

+0

@LucasMorgan: Bunun çalışması için bir JRootPane'e ihtiyacınız var ve bu mantıklı. Aksi halde anahtar bağlamaları kullanmanız gerekebilir. –

3

ne ihtiyaç vardır: rootPane.setDefaultButton (button2);

2

ActionListeners'tan kurtulun. Dinleyiciler için eski tarz bu. Eylem sınıfına mezunu. Hile, InputMaps ve ActionMaps çalışmalarını anlamaktır. Bu gerçekten çok güzel Swing benzersiz bir özelliktir: WHEN_ANCESTOR_OF_FOCUSED_COMPONENT kullanma

JPanel panel = new JPanel(); 
panel.setLayout(new TableLayout(...)); 
Action someAction = new AbstractAction("GO") { 
    public void actionPerformed() { 
    } 
}; 

InputMap input = panel.getInputMap(JComponent.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT); 

input.put(KeyStroke.getKeyStroke("enter", "submit"); 
panel.getActionMap().put("submit", someAction); 

panel.add(button = new JButton(someAction)); 
panel.add(textField = new JTextField()); 

çocuğu bunun herhangi birinden klavye olaylarını alacak şekilde panelini sağlar:

http://download.oracle.com/javase/tutorial/uiswing/misc/keybinding.html İşte

var bunu nasıl (yani atalar). Dolayısıyla, panelin içinde bulunduğu sürece hangi bileşenin odaklandığı önemli değildir, bu durumda tuş vuruşu, ActionMap'ta "gönder" altında kayıtlı herhangi bir eylemi başlatır.

Bu, menüleri, düğmeleri veya tuş vuruşlarını kullanarak eylemleri yeniden paylaşarak yeniden kullanmanızı sağlar.

+0

Anahtar Bağlama pek çok durumda yararlıdır, ancak sunulan diğer basit çözümleri kullanabildiğinizde (arka planda önemli ölçüde bağlayıcı olan) büyük olasılıkla mevcut sorun için fazla bir şey değildir. –

+0

Yazarın kendi başına bir iletişim kutusunun veya ana kullanıcı arabiriminin olup olmadığını belirtmediğine bağlı. SetDefaultButton() kullanımı, bir iletişim kutusundaki tek şey olduğunu varsayar. Eylemler'i ve Swing araç setinin geri kalanıyla nasıl ilişkili olduklarını belirtmemek, menü bağlamaları, genel tuş vuruşları gibi diğer konulara daha fazla götürür ve varsayılan bileşenler için anahtar eşlemelerini özelleştirir. Ayrıca, ActionListen kullanan herkesin farkında olması gerekir. Her durumda işlemler üstündür. – chubbsondubs

+0

"ActionListeners kullanan herkesin farkında olması gerekir. Eylemler her durumda üstündür." - Hmm, ve tüm genellemelerin yanlış olduğunu öğrettim. :) –

İlgili konular