2012-03-08 18 views
16

Üzerinde üç JButton bulunan bir JFrame var. JFrame yüklendiğinde odaklanmak için txtSearch (bir JTextField bileşen) ayarladı. Düğmelerden biri varsayılan düğme olarak ayarlanmıştır. Bu benim kodudur: JFrame'deki varsayılan düğme, giriş tuşuna basıldığında tetiklenmiyor

private void formWindowOpened(java.awt.event.WindowEvent evt) 
{ 
    // btnRefresh.setMnemonic(KeyEvent.VK_R); // Even if this line 
               // is not commented, but 
               // still the event wouldn't fire. 
    this.getRootPane().setDefaultButton(btnRefresh); 
} 

yüklendiğinde

, düğme, sadece seçilen, ancak tuşuna basıldığında edildiğini giriniz zaman hiçbir şey yapmadı. Bunu doğru bir şekilde nasıl uygularım?

btnRefresh.addActionListener(new java.awt.event.ActionListener() { 
    public void actionPerformed(java.awt.event.ActionEvent evt) { 
     btnRefreshActionPerformed(evt); 
    } 
}); 

private void btnRefreshActionPerformed(java.awt.event.ActionEvent evt) {           
    JOptionPane.showMessageDialog(this, "Pressed!"); 
    // Other codes here (Replace by JOptionPane) 
} 
+0

En kolay yolun requestFocusInWindow() işlevini çağırmak olduğunu öğrendim. JFrame'den sonra varsayılan bir düğme ayarlamak için görünür. Umarım bu birisine yardım eder. – GeriBoss

cevap

10

JFrame açıldığında hangi bileşen odaklanır? Bazı bileşenler "Enter tuşuna" yemek "çünkü" soruyorum. Örneğin, bir JEditorPane bunu yapacaktır. Bir ActionListenerJTextField atamak Ayrıca

, ActionListener yerine kök bölmesinde için DefaultButton ait çağrılır. ActionListener veya DefaultButton için seçim yapmanız gerekir, ancak aynı JTextField için iki ateşiniz olamaz. Bunun diğer bileşenler için de geçerli olduğundan eminim.

+0

"JFrame" yüklendiğinde odaklanacak "JTextField" öğesini ayarlıyorum. –

+1

doğru analiz, bir çözüm değil :-) @johntotetwoo bunu kabul ettiğinizden bir çözüm yönüne işaret ettiğinizi varsayalım - sorunuzun bu çözümü kullanarak düşünmeyi düşünebilirsiniz – kleopatra

+0

Parlak .. Şifre alanımda bir actionListener var ve yanıt vermediği varsayılan düğmenin nedeni olduğunu anlayamadı. Thanx – Olu

0

Ne yazdığınızdan yanlış yaptığınızı göremiyorum. İşte işe yarayan kısa bir örnek. Belki de sizin için yararlı bir şey ortaya çıkaracaktır.

import java.awt.BorderLayout; 
public class ExampleFrame extends JFrame 
{ 
    private JPanel m_contentPane; 
    private JTextField m_textField; 

    /** 
    * Launch the application. 
    */ 
    public static void main(String[] args) 
    { 
    EventQueue.invokeLater(new Runnable() 
    { 
     public void run() 
     { 
      try 
      { 
       ExampleFrame frame = new ExampleFrame(); 
       frame.setVisible(true); 
      } 
      catch (Exception e) 
      { 
       e.printStackTrace(); 
      } 
     } 
    }); 
    } 

    /** 
    * Create the frame. 
    */ 
    public ExampleFrame() 
    { 
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    setBounds(100, 100, 450, 300); 
    m_contentPane = new JPanel(); 
    m_contentPane.setBorder(new EmptyBorder(5, 5, 5, 5)); 
    m_contentPane.setLayout(new BorderLayout(0, 0)); 
    setContentPane(m_contentPane); 

    m_textField = new JTextField(); 
    m_contentPane.add(m_textField, BorderLayout.NORTH); 
    m_textField.setColumns(10); 

    JButton btnNewButton = new JButton("Default"); 
    btnNewButton.addActionListener(new ActionListener() { 
     public void actionPerformed(ActionEvent e) { 
      JOptionPane.showMessageDialog(ExampleFrame.this, "Default."); 
     } 
    }); 
    m_contentPane.add(btnNewButton, BorderLayout.CENTER); 

    JButton btnNewButton_1 = new JButton("Not default"); 
    btnNewButton_1.addActionListener(new ActionListener() { 
     public void actionPerformed(ActionEvent arg0) { 
      JOptionPane.showMessageDialog(ExampleFrame.this, "Not default."); 
     } 
    }); 
    m_contentPane.add(btnNewButton_1, BorderLayout.WEST); 
    m_textField.requestFocus(); 
    getRootPane().setDefaultButton(btnNewButton); 
    } 
} 
+1

textField'a bir actionListener ekleyin ve ne olacağını görün :-) – kleopatra

+0

Kleopatra'yı çivitmişsiniz! ActionListener'ı yerleştirdiğimde, varsayılan düğme tetiklenemedi. johntotetwoo, * varsayılan düğmeye basmak için * eylem dinleyicisini kaldırmanız gerekir. –

İlgili konular